Cài đặt Django/Python lên máy chủ VPS như thế nào?

Django Developer
Django hay các website framework viết bằng Python đều có cách deploy lên máy chủ khá tương tự nhau. Bài viết này hướng dẫn cách đơn giản nhất để bạn đưa website của mình lên internet với 1 máy chủ ảo VPS tránh gặp những lỗi ngớ ngẫn không cần thiết.
cai-dat-djangopython-len-may-chu-vps-nhu-the-nao

Bức ảnh sau mô tả cách một website viết bằng Python/Django đưa dữ liệu từ máy chủ đến trình duyệt của người dùng.

Django

Ở đây, máy chủ WSGI sẽ đọc hiểu các đoạn mã Python để chuyển nó thành HTML, CSS, Javascript và các tài nguyên khác. Sau đó, nó sẽ gửi các tài nguyên này đến trình duyệt của người dùng thông qua Web Server.

Trong bài này, tôi sẽ dùng Gunicorn làm máy chủ WSGI, Nginx làm web server và SQLite3 làm cơ sở dữ liệu.

Chuẩn bị cho máy chủ

Tôi sử dụng Debian 10 là hệ điều hành của máy chủ với Python 3.11 được cài đặt riêng. Bạn phải có quyền root để thực hiện các bước cài đặt.

Để tránh các lỗi vặt không cần thiết, hãy cài các gói theo script sau với quyền root:

/bin/bash -c "$(curl -fsSL https://gist.githubusercontent.com/anhtran/07f1c7f45ec0d58d09e1/raw/50bfb5a77e599a39bdabfd6e0c928725030bd49e/deb9.sh)"

Bước 1: Cài đặt Python (virtualenv) và Django

Tôi sẽ cài đặt 1 phần mềm tên là pyenv vào user hiện hành của máy chủ: curl https://pyenv.run | bash

Với pyenv, tôi có thể cài đặt phiên bản mới nhất của Python 3.11 như sau: pyenv install 3.11

Sau đó tôi có thể tạo venv dễ dàng với lệnh: pyenv virtualenv 3.11 myvenv

Rồi dùng nó để cài đặt Django vào myvenv:

pyenv activate myvenv
pip install -U pip wheel
pip install django

# cài các gói phụ thuộc nếu cần
pip install -r requirements.txt

Lúc này tôi có thể tạo một project Django mới với lệnh:

django-admin startproject myproject
cd myproject
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

Đương nhiên, bạn có thể dùng git để clone một project Django có sẵn về máy chủ.

Bước 2: Cài đặt và thiết lập Gunicorn cùng với Supervisor

Trước tiên tôi sẽ cài đặt Gunicorn với lệnh: pip install gunicorn

Supervisor là một công cụ giúp chạy các tiến trình ngầm (daemon) và khởi động lại chúng khi cần thiết.
Tôi sẽ cài đặt nó với lệnh: sudo apt install supervisor

Lưu ý: Khi nào bạn gõ lệnh supervisorctl mà không bị lỗi, thì bạn đã cài đặt thành công.

Hãy tạo 1 file supervisor.ini với nội dung như sau và chỉnh lại các đường dẫn cho đúng:

[unix_http_server]
file=/home/myuser/configs/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/home/myuser/logs/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
loglevel=error                ; (log level;default info; others: debug,warn,trace)
pidfile=/home/myuser/configs/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false               ; (start in foreground if true;default false)
minfds=32000                  ; (min. avail startup file descriptors;default 1024)
minprocs=32000                 ; (min. avail process descriptors;default 200)

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///home/myuser/configs/supervisor.sock

[program:django]
command=/home/myuser/venv/bin/gunicorn myproject.wsgi:application -b 0.0.0.0:8800
directory=/home/myuser/django/myproject
priority=1
autostart=true

Sau đó, hãy khởi động supervisor với lệnh: supervisord -c /home/myuser/configs/supervisor.ini

Lúc này Supervisor sẽ chạy ngầm với user hiện hành và cũng sẽ chạy Gunicorn lắng nghe trên cổng 8800. Bạn có thể quản lý Supervisor với lệnh supervisorctl như sau:

supervisorctl -c /home/myuser/configs/supervisor.ini
supervisorctl -c /home/myuser/configs/supervisor.ini status
supervisorctl -c /home/myuser/configs/supervisor.ini reload
supervisorctl -c /home/myuser/configs/supervisor.ini restart django

Bước 3: Cài đặt và thiết lập Nginx

Tôi sẽ cài đặt Nginx với lệnh: sudo apt install nginx

Kiểm tra Nginx đã chạy chưa với lệnh: sudo systemctl status nginx

Hãy tạo 1 file nginx.conf với nội dung như sau và chỉnh lại các đường dẫn cho đúng:

upstream django {
  server 127.0.0.1:8800;
}

server {
  listen 80;
  server_name django-install.vietdev.com;

  access_log off;
  error_log off;

  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_min_length 256;
  gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon application/octet-stream;
  gzip on;

  root /home/myuser/django;
  index index.html index.htm;

  location / {
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_redirect off;
    proxy_buffering off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_read_timeout 60s;
    proxy_send_timeout 180s;
    proxy_pass http://django;
  }
}

Lúc này, Nginx sẽ lắng nghe trên cổng 80 và chuyển các request đến Gunicorn đang chạy ở cổng 8800. Đồng thời nó sẽ dùng domain django-install.vietdev.com để phân giải đến máy chủ. Tức là chỉ cần trỏ tên miền django-install.vietdev.com về máy chủ, bạn sẽ có thể truy cập vào website.

Bước 4: Trỏ tên miền về máy chủ

Tôi dùng Cloudflare để quản lý tên miền. Bạn có thể dùng bất kỳ dịch vụ nào khác cũng được. Cloudflare

IPv4 là IP của máy chủ có cài đặt Nginx của chúng ta.

Bước 5: Kiểm tra kết quả

Truy cập vào địa chỉ http://django-install.google.com và bạn sẽ thấy trang chủ của Django. Lưu ý: Cloudflare có thể sẽ tự động chuyển sang HTTPS, bạn có thể tắt tính năng này trong phần SSL/TLS của Cloudflare hoặc cấu hình riêng cho Nginx.

Bài viết dừng ở đây, cảm ơn bạn đã theo dõi!

Công nghệ được nhắc đến trong bài viết này

Tên Công NghệPhiên BảnPhát Hành
Django4.2--
5 phút đọc·134 lượt xem·