Cách cài đặt Django Framework trên Debian 11

theanh

Administrator
Nhân viên
Django là một khuôn khổ phát triển web miễn phí và mã nguồn mở được viết bằng Python. Nó được sử dụng để phát triển các ứng dụng Python phức tạp và dựa trên cơ sở dữ liệu. Nó đi kèm với một bộ tập lệnh Python để tạo các dự án Python. Nó có thể chạy trên bất kỳ hệ điều hành nào có thể chạy Python bao gồm Windows, macOS, Linux/Unix và Solaris. Nó giúp các nhà phát triển viết ít mã hơn và tạo một trang web mới trong một khoảng thời gian ngắn.

Trong hướng dẫn này, tôi sẽ giải thích cách thiết lập Django trong môi trường ảo Python bằng cách sử dụng cơ sở dữ liệu PostgreSQL trên Debian 11. Sau đó, chúng ta sẽ cài đặt và cấu hình Nginx làm proxy ngược cho Django.

Điều kiện tiên quyết​

  • Một máy chủ đang chạy Debian 11.
  • Một tên miền hợp lệ được trỏ bằng IP máy chủ của bạn.
  • Một mật khẩu gốc được cấu hình trên máy chủ.

Bắt đầu​

Trước khi bắt đầu, bạn nên cập nhật các gói hệ thống của mình lên phiên bản mới nhất. Bạn có thể thực hiện bằng lệnh sau:
Mã:
apt-get update -y
Sau khi tất cả các gói được cập nhật, hãy cài đặt các công cụ Python khác và gói Nginx bằng lệnh sau:
Mã:
apt-get install python3-pip python3-dev libpq-dev curl nginx -y
Sau khi tất cả các gói cần thiết được cài đặt, bạn có thể tiến hành bước tiếp theo.

Cài đặt PostgreSQL Database Server​

Ở đây, chúng ta sẽ sử dụng PostgreSQL làm cơ sở dữ liệu phụ trợ. Vì vậy, hãy cài đặt nó bằng lệnh sau:
Mã:
apt-get install postgresql postgresql-contrib -y
Sau khi PostgreSQL được cài đặt, hãy kết nối với shell PostgreSQL bằng lệnh sau:
Mã:
su - postgres
psql
Tiếp theo, tạo cơ sở dữ liệu và người dùng cho Django bằng lệnh sau:
Mã:
CREATE DATABASE django;
CREATE USER django WITH PASSWORD 'password';
Tiếp theo, cấp một số vai trò bắt buộc bằng lệnh sau:
Mã:
ALTER ROLE django SET client_encoding TO 'utf8';
ALTER ROLE django SET default_transaction_isolation TO 'read commit';
ALTER ROLE django SET timezone TO 'UTC';
GRANT ALL QUYỀN TRÊN CƠ SỞ DỮ LIỆU django ĐỐI VỚI django;
Tiếp theo, thoát khỏi shell PostgreSQL bằng lệnh sau:
Mã:
\q
exit
Lúc này, cơ sở dữ liệu PostgreSQL đã sẵn sàng cho Django. Bây giờ bạn có thể tiến hành bước tiếp theo.

Tạo Môi trường ảo Python​

Tiếp theo, bạn sẽ cần tạo một môi trường ảo Python để tạo dự án Django.

Đầu tiên, nâng cấp gói PIP lên phiên bản mới nhất bằng lệnh sau:
Mã:
pip3 install --upgrade pip
Tiếp theo, xác minh phiên bản PIP bằng lệnh sau:
Mã:
pip --version
Đầu ra mẫu:
Mã:
pip 21.2.4 từ /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
Tiếp theo, cài đặt gói Môi trường ảo bằng lệnh sau:
Mã:
pip3 install virtualenv
Tiếp theo, tạo một thư mục cho dự án Django và tạo một thư mục ảo Django môi trường:
Mã:
mkdir ~/djangoapp
cd ~/djangoapp
virtualenv djangoenv
Tiếp theo, kích hoạt môi trường ảo Django bằng lệnh bên dưới:
Mã:
source djangoenv/bin/activate
Tiếp theo, cài đặt Django, Gunicorn và các gói khác bằng lệnh sau:
Mã:
pip install django gunicorn psycopg2-binary
Lúc này, Django đã được cài đặt trong môi trường ảo Python. Bây giờ, bạn có thể tiến hành bước tiếp theo.

Cài đặt và cấu hình Django​

Django cung cấp một tập lệnh django-admin.py để tạo một dự án. Bạn có thể chạy lệnh sau để tạo một dự án Django:
Mã:
django-admin.py startproject djangoapp ~/djangoapp
Tiếp theo, bạn sẽ cần chỉnh sửa settings.py và xác định cài đặt cơ sở dữ liệu của mình:
Mã:
nano ~/djangoapp/djangoapp/settings.py
Thay đổi dòng sau bằng tên miền của bạn:
Mã:
ALLOWED_HOSTS = ['django.example.com', 'localhost']
Bỏ chú thích cho backend cơ sở dữ liệu mặc định và thêm cài đặt cơ sở dữ liệu PostgreSQL:
Mã:
#DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': BASE_DIR / 'db.sqlite3',# }#}DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'django', 'USER': 'django', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', }}
Thêm các dòng sau vào cuối tệp:
Mã:
STATIC_URL = '/static/'import osSTATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Lưu và đóng tệp, sau đó di chuyển lược đồ cơ sở dữ liệu ban đầu sang cơ sở dữ liệu PostgreSQL:
Mã:
./manage.py makemigrations
./manage.py migrate
Mẫu đầu raL:
Mã:
Áp dụng tất cả các lần di chuyển: admin, auth, contenttypes, sessionsĐang chạy các lần di chuyển: Đang áp dụng contenttypes.0001_initial... OK Đang áp dụng auth.0001_initial... OK Đang áp dụng admin.0001_initial... OK Đang áp dụng admin.0002_logentry_remove_auto_add... OK Đang áp dụng admin.0003_logentry_add_action_flag_choices... OK Đang áp dụng contenttypes.0002_remove_content_type_name... OK Đang áp dụng auth.0002_alter_permission_name_max_length... OK Đang áp dụng auth.0003_alter_user_email_max_length... OK Đang áp dụng auth.0004_alter_user_username_opts... OK Đang áp dụng auth.0005_alter_user_last_login_null... OK Đang áp dụng auth.0006_require_contenttypes_0002... OK Đang áp dụng auth.0007_alter_validators_add_error_messages... OK Đang áp dụng auth.0008_alter_user_username_max_length... OK Đang áp dụng auth.0009_alter_user_last_name_max_length... OK Đang áp dụng auth.0010_alter_group_name_max_length... OK Đang áp dụng auth.0011_update_proxy_permissions... OK Đang áp dụng auth.0012_alter_user_first_name_max_length... OK Đang áp dụng sessions.0001_initial... OK
Tiếp theo, tạo một tài khoản siêu người dùng cho Django bằng lệnh sau:
Mã:
./manage.py createsuperuser
Đặt tên người dùng và mật khẩu quản trị viên của bạn như hiển thị bên dưới:
Mã:
Tên người dùng (để trống để sử dụng 'root'): dadminĐịa chỉ email: [emailprotected]Mật khẩu:Mật khẩu (lặp lại):Siêu người dùng đã được tạo thành công.
Tiếp theo, thu thập tất cả nội dung tĩnh vào thư mục:
Mã:
./manage.py collectstatic

Chạy Django Development Server​

Lúc này, Django đã được cài đặt và cấu hình. Bây giờ bạn có thể khởi động máy chủ phát triển Django bằng lệnh sau:
Mã:
./manage.py runserver 0.0.0.0:8000
Nếu mọi thứ ổn, bạn sẽ nhận được kết quả sau:
Mã:
Đang theo dõi các thay đổi tệp bằng StatReloaderĐang thực hiện kiểm tra hệ thống...Kiểm tra hệ thống không phát hiện thấy sự cố nào (0 bị tắt tiếng).Ngày 27 tháng 8 năm 2021 - 10:02:05Django phiên bản 3.2.6, sử dụng cài đặt 'djangoapp.settings'Khởi động máy chủ phát triển tại http://0.0.0.0:8000/Thoát khỏi máy chủ bằng CONTROL-C.
Bây giờ, hãy mở trình duyệt web của bạn và truy cập dự án Django của bạn bằng URL . Bạn sẽ được chuyển hướng đến trang đăng nhập Django:



Cung cấp tên người dùng quản trị, mật khẩu và nhấp vào Đăng nhập. Bạn sẽ thấy bảng điều khiển Django trên trang sau:



Bây giờ, hãy quay lại thiết bị đầu cuối của bạn và nhấn CTRL + C để dừng máy chủ phát triển Django.

Xác minh Django với Gunicorn​

Tiếp theo, bạn cũng cần kiểm tra xem Gunicorn có thể phục vụ Django hay không. Bạn có thể khởi động Django bằng máy chủ Gunicorn bằng lệnh sau:
Mã:
gunicorn --bind 0.0.0.0:8000 djangoapp.wsgi
Nếu mọi thứ ổn, bạn sẽ nhận được kết quả sau:
Mã:
[2021-08-27 10:04:22 +0000] [47383] [INFO] Đang khởi động gunicorn 20.1.0[2021-08-27 10:04:22 +0000] [47383] [INFO] Đang nghe tại: http://0.0.0.0:8000 (47383)[2021-08-27 10:04:22 +0000] [47383] [INFO] Đang sử dụng worker: sync[2021-08-27 10:04:22 +0000] [47384] [INFO] Đang khởi động worker với pid: 47384
Nhấn CTRL + C để dừng máy chủ Gunicorn.

Tiếp theo, hủy kích hoạt khỏi môi trường ảo Python bằng lệnh sau:
Mã:
hủy kích hoạt

Tạo tệp dịch vụ Systemd cho Gunicorn​

Tiếp theo, bạn sẽ cần tạo tệp dịch vụ systemd để Gunicorn khởi động và dừng máy chủ ứng dụng Django.

Bạn có thể tạo Gunicorn bằng lệnh sau:
Mã:
nano /etc/systemd/system/gunicorn.socket
Thêm các dòng sau:
Mã:
[Unit]Mô tả=gunicorn socket[Socket]ListenStream=/run/gunicorn.sock[Install]WantedBy=sockets.target
Lưu và đóng tệp sau đó tạo tệp dịch vụ cho Gunicorn:
Mã:
nano /etc/systemd/system/gunicorn.service
Thêm các dòng sau khớp với đường dẫn dự án Django của bạn:
Mã:
[Unit]Description=gunicorn daemonRequires=gunicorn.socketAfter=network.target[Service]User=rootGroup=www-dataWorkingDirectory=/root/djangoappExecStart=/root/djangoapp/djangoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock djangoapp.wsgi:application[Install]WantedBy=multi-user.target
Lưu và đóng tệp sau đó thiết lập đúng quyền đối với thư mục dự án Django:
Mã:
chown -R www-data:root ~/djangoapp
Tiếp theo, tải lại daemon systemd bằng lệnh sau:
Mã:
systemctl daemon-reload
Tiếp theo, khởi động dịch vụ Gunicorn và cho phép nó khởi động khi khởi động lại hệ thống:
Mã:
systemctl start gunicorn.socket
systemctl enable gunicorn.socket
Tiếp theo, hãy kiểm tra trạng thái của Gunicorn bằng lệnh bên dưới:
Mã:
systemctl status gunicorn.socket
Bạn sẽ nhận được kết quả đầu ra sau:
Mã:
? gunicorn.socket - gunicorn socket Đã tải: đã tải (/etc/systemd/system/gunicorn.socket; đã tắt; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang lắng nghe) kể từ Thứ sáu 2021-08-27 10:05:46 UTC; 6 giây trước Kích hoạt: ? gunicorn.service Listen: /run/gunicorn.sock (Stream) CGroup: /system.slice/gunicorn.socket27 tháng 8 10:05:46 debian11 systemd[1]: Đang lắng nghe trên socket gunicorn.

Cấu hình Nginx làm Proxy ngược cho Django​

Tiếp theo, bạn sẽ cần cấu hình Nginx làm proxy ngược để phục vụ Django.

Để thực hiện, hãy tạo tệp cấu hình Nginx:
Mã:
nano /etc/nginx/conf.d/django.conf
Thêm các dòng sau:
Mã:
server { listen 80; server_name django.example.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /root/djangoapp; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; }}
Lưu và đóng tệp, sau đó xác minh Nginx xem có lỗi cấu hình nào không:
Mã:
nginx -t
Mã:
Đầu ra:
Mã:
nginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: tệp cấu hình /etc/nginx/nginx.conf thử nghiệm thành công
Cuối cùng, khởi động lại dịch vụ Nginx để áp dụng các thay đổi:
Mã:
systemctl restart nginx
Để kiểm tra trạng thái của Nginx, hãy chạy:
Mã:
systemctl status nginx
Đầu ra mẫu:
Mã:
? nginx.service - Máy chủ web hiệu suất cao và máy chủ proxy ngược Đã tải: đã tải (/lib/systemd/system/nginx.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) từ Thứ sáu 2021-08-27 10:06:59 UTC; 6 giây trước Tài liệu: man:nginx(8) Quy trình: 47494 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Quy trình: 47495 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) PID chính: 47496 (nginx) Nhiệm vụ: 2 (giới hạn: 2341) Bộ nhớ: 2,5M CPU: 49ms CGroup: /system.slice/nginx.service ??47496 nginx: tiến trình chính /usr/sbin/nginx -g daemon on; master_process on; ??47497 nginx: tiến trình công nhân27 tháng 8 10:06:59 debian11 systemd[1]: Đang khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược...27 tháng 8 10:06:59 debian11 systemd[1]: nginx.service: Không phân tích được PID từ tệp /run/nginx.pid: Đối số không hợp lệ27 tháng 8 10:06:59 debian11 systemd[1]: Đang khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược.
Bây giờ, bạn có thể truy cập ứng dụng Django bằng URL . Bạn cũng có thể truy cập ứng dụng Django bằng URL .


Kết luận​

Xin chúc mừng! bạn đã cài đặt thành công ứng dụng Django với Gunicorn và Nginx làm proxy ngược. Bây giờ bạn có thể bắt đầu triển khai ứng dụng Python của mình bằng cách sử dụng nền tảng Django.
 
Back
Bên trên