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