Triển khai ứng dụng Flask Python với Gunicorn và venv trên Ubuntu (Production)

Python

Hướng dẫn này sẽ giúp bạn triển khai ứng dụng Flask của Python với Gunicorn và venv để triển khai ứng dụng trong môi trường Production

  • Dùng venv để quản lý dependencies.
  • Dùng Gunicorn để chạy Flask.
  • Dùng systemd để quản lý tiến trình (tự động restart khi lỗi).
  • Dùng Nginx làm reverse proxy (tùy chọn: nếu cần truy cập công khai).

Bước 1: Cài đặt Python, Gunicorn và Nginx

    Chạy các lệnh sau để cài đặt các thành phần cần thiết:

    sudo apt update && sudo apt install -y python3 python3-venv python3-pip nginx

    Bước 2: Tạo môi trường venv và cài đặt dependencies

    Chuyển đến thư mục ứng dụng (giả sử ứng dụng được lưu tại /var/www/flask_app):

    cd /var/www/flask_app

    Tạo và kích hoạt môi trường ảo:

    python3 -m venv venv
    source venv/bin/activate

    Cài đặt thư viện cần thiết:

    pip install --no-cache-dir -r requirements.txt

    File requirements.txt sẽ bao gồm các thành phần cần thiết của ví dụ:

    flask
    gunicorn
    minio

    Sau khi cài đặt xong, thoát venv:

    deactivate

    Bước 3: Chạy thử ứng dụng với Gunicorn

    Trước khi thiết lập systemd, hãy kiểm tra xem Gunicorn có chạy ứng dụng đúng không

    cd /var/www/flask_app
    source venv/bin/activate
    gunicorn --bind 0.0.0.0:5000 app:app

    Bước 4: Cấu hình systemd để quản lý Gunicorn

    Tạo file /etc/systemd/system/flask_app.service

    sudo nano /etc/systemd/system/flask_app.service

    Thêm nội dung như sau:

    [Unit]
    Description=Gunicorn instance to serve Flask app
    After=network.target
    
    [Service]
    User=root
    Group=root
    WorkingDirectory=/var/www/flask_app
    ExecStart=/var/www/flask_app/venv/bin/gunicorn --workers 4 --bind 0.0.0.0:5000 app:app
    Restart=always
    
    [Install]
    WantedBy=multi-user.target

    Bước 5: Khởi động Gunicorn với systemd

    Chạy các lệnh sau để khởi động dịch vụ:

    sudo systemctl daemon-reload
    sudo systemctl start flask_app
    sudo systemctl enable flask_app

    Kiểm tra trạng thái dịch vụ:

    sudo systemctl status flask_app

    Bước 6: Cấu hình Nginx làm Reverse Proxy (tùy chọn)

    Tạo file cấu hình Nginx:

    sudo nano /etc/nginx/sites-available/flask_app

    Thêm nội dung sau (thay your_domain_or_ip bằng IP hoặc domain của server):

    server {
    listen 80;
    server_name your_domain_or_ip;
    
    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    }

    Kích hoạt cấu hình Nginx:

    sudo ln -s /etc/nginx/sites-available/flask_app /etc/nginx/sites-enabled/
    sudo systemctl restart nginx

    Kiểm tra Nginx:

    sudo systemctl status nginx

    Bước 7: Mở firewall nếu cần

    Nếu bạn chạy Gunicorn không qua Nginx, hãy mở cổng 5000:

    sudo ufw allow 5000

    Nếu bạn dùng Nginx, mở cổng 80 và 443 thay vì 5000:

    sudo ufw allow 80
    sudo ufw allow 443

    Sau đó kiểm tra firewall:

    sudo ufw status