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.
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:
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.
Sau khi PostgreSQL được cài đặt, hãy kết nối với shell PostgreSQL bằng lệnh sau:
Tiếp theo, tạo cơ sở dữ liệu và người dùng cho Django bằng lệnh sau:
Tiếp theo, cấp một số vai trò bắt buộc bằng lệnh sau:
Tiếp theo, thoát khỏi shell PostgreSQL bằng lệnh sau:
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.
Đầ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:
Tiếp theo, xác minh phiên bản PIP bằng lệnh sau:
Đầu ra mẫu:
Tiếp theo, cài đặt gói Môi trường ảo bằng lệnh sau:
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:
Tiếp theo, kích hoạt môi trường ảo Django bằng lệnh bên dưới:
Tiếp theo, cài đặt Django, Gunicorn và các gói khác bằng lệnh sau:
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.
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:
Thay đổi dòng sau bằng tên miền của bạn:
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:
Thêm các dòng sau vào cuối tệp:
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ẫu đầu raL:
Tiếp theo, tạo một tài khoản siêu người dùng cho Django bằng lệnh sau:
Đặ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:
Tiếp theo, thu thập tất cả nội dung tĩnh vào thư mục:
Nếu mọi thứ ổn, bạn sẽ nhận được kết quả sau:
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.
Nếu mọi thứ ổn, bạn sẽ nhận được kết quả sau:
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:
Bạn có thể tạo Gunicorn bằng lệnh sau:
Thêm các dòng sau:
Lưu và đóng tệp sau đó tạo tệp dịch vụ cho Gunicorn:
Thêm các dòng sau khớp với đường dẫn dự án Django của bạn:
Lưu và đóng tệp sau đó thiết lập đúng quyền đối với thư mục dự án Django:
Tiếp theo, tải lại daemon systemd bằng lệnh sau:
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:
Tiếp theo, hãy kiểm tra trạng thái của Gunicorn bằng lệnh bên dưới:
Bạn sẽ nhận được kết quả đầu ra sau:
Để thực hiện, hãy tạo tệp cấu hình Nginx:
Thêm các dòng sau:
Lưu và đóng tệp, sau đó xác minh Nginx xem có lỗi cấu hình nào không:
Cuối cùng, khởi động lại dịch vụ Nginx để áp dụng các thay đổi:
Để kiểm tra trạng thái của Nginx, hãy chạy:
Đầu ra mẫu:
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
.
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
Mã:
apt-get install python3-pip python3-dev libpq-dev curl nginx -y
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
Mã:
su - postgres
psql
Mã:
CREATE DATABASE django;
CREATE USER django WITH PASSWORD 'password';
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;
Mã:
\q
exit
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
Mã:
pip --version
Mã:
pip 21.2.4 từ /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
Mã:
pip3 install virtualenv
Mã:
mkdir ~/djangoapp
cd ~/djangoapp
virtualenv djangoenv
Mã:
source djangoenv/bin/activate
Mã:
pip install django gunicorn psycopg2-binary
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
Mã:
nano ~/djangoapp/djangoapp/settings.py
Mã:
ALLOWED_HOSTS = ['django.example.com', 'localhost']
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': '', }}
Mã:
STATIC_URL = '/static/'import osSTATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Mã:
./manage.py makemigrations
./manage.py migrate
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
Mã:
./manage.py createsuperuser
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.
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
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.
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
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
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
Mã:
[Unit]Mô tả=gunicorn socket[Socket]ListenStream=/run/gunicorn.sock[Install]WantedBy=sockets.target
Mã:
nano /etc/systemd/system/gunicorn.service
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
Mã:
chown -R www-data:root ~/djangoapp
Mã:
systemctl daemon-reload
Mã:
systemctl start gunicorn.socket
systemctl enable gunicorn.socket
Mã:
systemctl status gunicorn.socket
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
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; }}
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
Mã:
systemctl restart nginx
Mã:
systemctl status nginx
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.