Cách triển khai dự án Django của bạn lên vps Ubuntu với Nginx và Gunicorn

Bước 1: Đưa code của bạn lên vps Ubuntu

1. Tạo thư mục lưu dự án django

mkdir /opt/aznetproject
cd /opt/aznetproject

aznetproject sẽ là thư mục chứa môi trường ảo và dự án của bạn.

2. Tạo và kích hoạt môi trường ảo (python3.10)

python3.10 -m venv .venv
source .venv/bin/activate

3. Cài đặt django trong môi trường ảo

pip install django

4. Lấy code từ github
Cài đặt git nếu chưa có

sudo apt-get install git

Lấy code từ git

git clone <your-repo-url>

Nếu repo của bạn là riêng tư, bạn sẽ cần cung cấp username và mã xác thực của github
5. Cài đặt các gói
cd đến thư mục dự án, ví dụ: aznet - nơi chứa manage.py, db.sqlite3

cd /opt/aznetproject/aznet
pip install -r requirements.txt

6. chạy kiểm tra

python3 manage.py runserver 0.0.0.0:8000

Bước 2: Cài đặt gunicorn

pip install gunicorn

Chạy kiểm tra:

gunicorn --bind 0.0.0.0:8000 aznet.wsgi:application

Lưu ý: aznet chính là <project_name> mà bạn đã tạo lúc đầu bằng lệnh django-admin startproject <project_name>

Bạn sẽ thấy

[2022-02-08 15:20:17 +0000] [12789] [INFO] Starting gunicorn 20.1.0 
[2022-02-08 15:20:17 +0000] [12789] [INFO] Listening at: http://0.0.0.0:8000 (12789) 
[2022-02-08 15:20:17 +0000] [12789] [INFO] Using worker: sync 
[2022-02-08 15:20:17 +0000] [12791] [INFO] Booting worker with pid: 12791 

Có nghĩa là bạn đã liên kết thành công gunicorn của mình để chạy ứng dụng Django và ứng dụng Django của bạn hiện đã sẵn sàng để được liên kết với một máy chủ web (trong trường hợp của chúng tôi là NGINX). Điều này đánh dấu sự hoàn thành của Giai đoạn 1. Để kiểm tra thành công Giai đoạn 1, bạn có thể nhập IP có cổng :8000 của mình và xem ứng dụng của bạn chạy.

Bước 3: Thiết lập supervisor để Gunicorn tự động khởi động lại ứng dụng Django của bạn khi khởi động lại và sau lần khởi động đầu tiên.

1. Cài đặt supervisor

sudo apt-get install -y supervisor

2. Tạo file cấu hình

cd /etc/supervisor/conf.d/
sudo touch gunicorn.conf

Thêm nội dung sau vào tệp cấu hình vừa tạo, thay đổi cho phù hợp với thôn tin của bạn
Mở trình soạn thảo

sudo nano gunicorn.conf

Nhập nội dung:

[program:gunicorn]
directory = /opt/aznetproject/aznet  ## <path to manage.py>
command = /opt/aznetproject/.venv/bin/gunicorn --workers 3 --bind unix:/opt/aznetproject/aznet.sock aznet.wsgi:application
autostart = true
autorestart = true
stderr_logfile = /var/log/gunicorn/gunicorn.err.log
stdout_logfile = /var/log/gunicorn/gunicorn.out.log

[group:guni]
programs:gunicorn

Lưu ý: Các hướng dẫn trên internet có thể sẽ hướng dẫn bạn đặt tệp .sock bên trong thư mục dự án, cùng thư mục với tệp manage.py. Nếu làm vậy tệp .sock có thể bị xóa nếu bạn git pull.
Vì vậy, hãy đặt tệp .sock cùng cấp với thư mục dự án.

Tạo thư mục nhật ký

sudo mkdir /var/log/gunicorn,

3. Đọc file cấu hình và cập nhật, chạy lần lượt các lệnh sau:

sudo supervisorctl reread

Nếu bạn thấy guni:available ở đây, điều đó có nghĩa là Supervisor đã sẵn sàng và bạn đã làm đúng mọi thứ cho đến thời điểm hiện tại.

sudo supervisorctl update

Nếu bạn thấy guni: added process group đây là một điểm đánh dấu khác nghĩa là bạn đã thực hiện đúng các bước.

sudo supervisorctl status

Nếu bạn thấy guni:gunicorn RUNNING đây là chỉ báo thứ ba và cuối cùng cho thấy gunicorn của bạn đã được thiết lập đúng cách.

Sau tất cả các bước này, nó được xác nhận rằng gunicorn của bạn hiện đang giao tiếp hai chiều với một tệp aznet.sock được tạo tự động bên trong thư mục aznetproject.

Bước 4: Liên kết Gunicorn với Nginx

Đảm bảo bạn đã cài đặt nginx, hoặc có thể cài đặt bằng lệnh: sudo apt-get install -y nginx

Khi đã có nginx , chạy các lện sau để tạo cấu hình web với nginx

cd /etc/nginx/sites-available
sudo touch aznet.conf
sudo nano aznet.conf

Trình chỉnh sửa mở ra, nhập nội dung sau

server {
    listen 80;
    server_name aznet.io ;
    #server_name 192.168.0.1 yourdomain.com your_alternate_domain.com; this is how you can add multiple hosts. Do not add any comma just separate it with spaces

    location / {
        include proxy_params;
        proxy_pass http://unix:/opt/aznetproject/aznet.sock;
    }
}

Kiểm tra cú pháp file trên:

sudo nginx -t

Đảm bảo không có lỗi đánh máy cho lện dưới đây, nó tạo một liên kết tượng trưng

sudo ln aznet.conf /etc/nginx/sites-enabled/

Kiểm tra và khởi động lại nginx

sudo nginx -t && nginx -s reload

Bây giờ bạn đã liên kết Nginx của mình với gunicorn trên aznet.sock, vì vậy hãy truy cập trình duyệt của bạn và nhập địa chỉ web hoặc ip và bạn sẽ thấy ứng dụng của mình hoạt động.

Nếu bạn có thể thấy trang web của mình mà không có bất kỳ CSS nào (vỡ giao diện) thì bạn đã làm theo mọi thứ đúng cách. Ta sẽ đọc bài tiếp theo để biết cách cung cấp tệp tĩnh Django trên nginx

OK.