Deploy Ứng Dụng Python Flask Lên VPS TrumVPS - Production-Ready Với Gunicorn & Nginx

📅 05/2026 · ⏱ 12 phút đọc · 🏷 Hướng Dẫn

Bạn đã viết xong API Flask hay Django app, chạy python app.py trên local ngon lành. Nhưng làm sao để deploy lên production, chạy 24/7, chịu được hàng nghìn request? Cùng deploy ứng dụng Python lên VPS TrumVPS với stack Gunicorn + Nginx + systemd — chuẩn production, không lo crash!

Tại Sao Cần Gunicorn & Nginx?

Flask dev server (app.run()) chỉ dành cho development, không chịu được production load. Để ứng dụng Python chạy ổn định:

💡 Stack chuẩn production: Client → Nginx (port 80/443) → Gunicorn (port 8000, internal) → Flask App → Database. Nginx xử lý HTTPS + static files, Gunicorn chỉ lo business logic.

Yêu Cầu

Bước 1: Chuẩn Bị Môi Trường Python

Cập nhật hệ thống và cài dependencies:

apt update && apt install -y python3 python3-pip python3-venv python3-dev build-essential nginx

Tạo thư mục app và virtual environment:

mkdir -p /var/www/myapp && cd /var/www/myapp

python3 -m venv venv && source venv/bin/activate

pip install flask gunicorn

Bước 2: Tạo Flask App Mẫu

Tạo file app.py:

nano /var/www/myapp/app.py

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/')

def home():

    return jsonify({"status":"ok","message":"Flask API on VPS TrumVPS 🚀"})

@app.route('/api/hello')

def hello():

    name = request.args.get('name', 'World')

    return jsonify({"hello": name, "server": "TrumVPS"})

if __name__ == '__main__':

    app.run()

Test nhanh:

python3 app.py

Mở browser hoặc curl http://your-ip:5000 — nếu thấy JSON response là OK!

Bước 3: Chạy Với Gunicorn

Test Gunicorn (vẫn trong môi trường ảo):

gunicorn --bind 0.0.0.0:8000 app:app

Truy cập http://your-ip:8000 để kiểm tra. Ctrl+C để dừng.

Cấu Hình Gunicorn Worker

Số worker khuyến nghị: (2 × số CPU core) + 1

Ví dụ VPS 2 core: dùng 5 workers.

gunicorn --bind 0.0.0.0:8000 --workers 5 --timeout 120 app:app

Bước 4: Tạo systemd Service

Để Gunicorn chạy vĩnh viễn và tự restart:

nano /etc/systemd/system/myapp.service

Dán nội dung:

[Unit]

Description=Gunicorn instance to serve myapp

After=network.target

[Service]

User=root

Group=www-data

WorkingDirectory=/var/www/myapp

Environment="PATH=/var/www/myapp/venv/bin"

ExecStart=/var/www/myapp/venv/bin/gunicorn --workers 5 --bind 127.0.0.1:8000 --timeout 120 --access-logfile /var/log/myapp-access.log --error-logfile /var/log/myapp-error.log app:app

Restart=always

RestartSec=10

[Install]

WantedBy=multi-user.target

⚠️ Quan trọng: Bind vào 127.0.0.1:8000 (local only), không phải 0.0.0.0. Chỉ Nginx mới expose ra ngoài!

Kích hoạt service:

systemctl daemon-reload

systemctl enable myapp && systemctl start myapp

systemctl status myapp

Bước 5: Cấu Hình Nginx Reverse Proxy

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

nano /etc/nginx/sites-available/myapp

Dán nội dung:

server {

    listen 80;

    server_name yourdomain.com;

    client_max_body_size 50M;

    location / {

        proxy_pass http://127.0.0.1:8000;

        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_read_timeout 120s;

    }

    location /static/ {

        alias /var/www/myapp/static/;

        expires 30d;

    }

}

Kích hoạt site:

ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/

nginx -t && systemctl reload nginx

Truy cập http://yourdomain.com — Flask app đã chạy qua Nginx!

Bước 6: Thêm SSL Với Let's Encrypt

apt install -y certbot python3-certbot-nginx

certbot --nginx -d yourdomain.com

Chọn redirect HTTP → HTTPS (option 2). Xong!

Deploy Django App (Tương Tự)

Với Django, thay Gunicorn command thành:

ExecStart=/var/www/myapp/venv/bin/gunicorn --workers 5 --bind 127.0.0.1:8000 myproject.wsgi:application

Nhớ cài dependencies: pip install django gunicorn và chạy python manage.py collectstatic trước khi deploy.

Auto Deploy Với Git

Mỗi lần update code, chỉ cần:

cd /var/www/myapp

git pull origin main

source venv/bin/activate && pip install -r requirements.txt

systemctl restart myapp

Hoặc tạo script update.sh tự động hóa 4 bước trên. Kết hợp với GitHub Actions để auto deploy khi push code (xem bài CI/CD).

Monitoring & Log

Xử Lý Lỗi Thường Gặp

Cần VPS ổn định deploy Flask/Django app 24/7?

TrumVPS - NVMe SSD, uptime 99.9%, hỗ trợ đầy đủ Python/Node.js - Từ 40K/tháng!

Mã giảm giá: 42089QPI03TI (-9%)

THUÊ VPS NGAY