Blog ZoCloud Dùng thử

Đăng ngày 17/10/2026 · cập nhật 19/10/2026

Deploy app Python FastAPI, Django, Flask kèm database và cron

Để deploy app Python FastAPI, Django hay Flask lên ZoCloud, đẩy code từ GitHub hoặc chạy zo deploy: ZoCloud tự nhận diện framework, cài dependency vào virtualenv và chạy app bằng uvicorn hoặc gunicorn trên cổng PORT. Database PostgreSQL, Redis (Valkey), worker nền và cron job đều thêm được trong cùng project, nối với nhau bằng biến tham chiếu.

ZoCloud nhận diện app Python thế nào

ZoCloud đọc requirements.txt, pyproject.toml hoặc Pipfile, tạo virtualenv .venv và cài dependency. Phiên bản Python lấy từ .python-version nếu có.

Framework Nhận diện khi Lệnh chạy mặc định
Django có manage.py hoặc django trong dependency gunicorn <project>.wsgi:application --bind 0.0.0.0:$PORT, build chạy collectstatic
FastAPI có fastapi uvicorn main:app --host 0.0.0.0 --port $PORT (tìm biến FastAPI( trong main.py, app.py…)
Flask có flask gunicorn app:app --bind 0.0.0.0:$PORT
Python khác main.py, app.py hoặc server.py python <file>

Nếu thiếu uvicorn hay gunicorn trong dependency, ZoCloud cài thêm. Có Procfile kiểu Heroku thì lệnh chạy lấy từ Procfile. Kiểm tra trước trên máy:

zo detect

Điều kiện duy nhất cần nhớ: app phải nghe 0.0.0.0 và cổng trong biến PORT.

Deploy FastAPI hoặc Django từng bước

1. Tạo project và database

  1. Đăng ký, xác minh e-mail, hoàn tất thiết lập (nạp tiền hoặc kết nối GitHub).
  2. Project → Tạo project (ví dụ shop), chọn Vị trí.
  3. Trên canvas, Thêm → PostgreSQL, đặt tên pg. Database được quản lý, sẵn sàng sau vài giây, sao lưu mỗi đêm, bản chính lưu tại Việt Nam.
  4. Nếu cần cache hay hàng đợi: Thêm → Redis (Valkey), đặt tên cache.

CLI tương đương:

zo db create pg -engine postgres
zo db create cache -engine valkey

2. Deploy service web

Từ GitHub: Thêm → Deploy từ Git → thẻ GitHub, chọn repo, đặt Tên service là web, để trống Lệnh chạy, bấm Tạo và deploy.

Từ máy:

curl -fsSL https://app.zocloud.io/install.sh | sh
zo login
zo deploy -to myorg/shop/web

zo bỏ qua .venv, venv, __pycache__, .git và không bao giờ gửi file .env* (trừ .env.example).

3. Đặt biến môi trường

DATABASE_URL=${{pg.DATABASE_URL}}
REDIS_URL=${{cache.REDIS_URL}}
DJANGO_SECRET_KEY=một-chuỗi-ngẫu-nhiên-dài
DJANGO_ALLOWED_HOSTS=www.example.vn

Bằng CLI (nháy đơn để shell không đụng tới ${{…}}):

zo vars set 'DATABASE_URL=${{pg.DATABASE_URL}}' 'REDIS_URL=${{cache.REDIS_URL}}'
zo deploy

Biến có hiệu lực từ lần deploy sau. Với Django, đọc DATABASE_URL bằng thư viện như dj-database-url, và thêm tên miền vào ALLOWED_HOSTS (ZoCloud nhắc điều này khi nhận diện Django). Địa chỉ ….zocloud.app của service nằm trong biến ZOCLOUD_PUBLIC_DOMAIN.

4. Migration trước khi app chạy

Đặt zocloud.json ở gốc repo:

{
  "deploy": {
    "prestart": ".venv/bin/python manage.py migrate --noinput",
    "health_path": "/health"
  }
}

Phiên bản Python đặt bằng file .python-version (hoặc trường runtime_version trong build); nếu phiên bản đó không có, ZoCloud báo và dùng một phiên bản có sẵn. Với FastAPI dùng Alembic: "prestart": ".venv/bin/alembic upgrade head". Giá trị trong zocloud.json được ưu tiên hơn portal; trường lạ hoặc sai tên làm deploy báo lỗi, nên kiểm tra kỹ.

Worker nền với Celery, RQ hay Dramatiq

Worker là service không có cổng, không có địa chỉ, chạy liên tục để xử lý hàng đợi.

  1. Thêm → Deploy từ Git, chọn cùng repo, đặt tên worker.
  2. Tab Cấu hình → Loại service → Worker.
  3. Lệnh chạy, ví dụ:
.venv/bin/celery -A config worker --loglevel=info
  1. Thêm cùng các biến DATABASE_URL, REDIS_URL bằng biến tham chiếu, rồi deploy.

Worker có tab Log và Số liệu riêng; tăng Số bản chạy khi hàng đợi dài. Nếu web cần gọi một service nội bộ khác, dùng ${{api.PRIVATE_URL}} (địa chỉ http://api.internal, đi trong mạng riêng).

Cron job cho tác vụ định kỳ

Gửi báo cáo, dọn dữ liệu, đồng bộ đơn hàng… dùng service loại Cron job:

  1. Tạo service từ cùng repo, đặt tên report.
  2. Loại service → Cron job.
  3. Lịch chạy (cron) theo giờ Việt Nam, ví dụ 0 2 * * * (2 giờ sáng mỗi ngày) hay */15 * * * * (mỗi 15 phút). Đặt Tối đa (phút) cho mỗi lần chạy.
  4. Lệnh chạy, ví dụ .venv/bin/python manage.py send_reports.

Mỗi lần chạy là một container chạy tới khi xong, dùng cùng biến và mạng của environment. Lần trước chưa xong thì lần sau bị bỏ qua. Tab Lần chạy hiện mã thoát và log cuối; Chạy ngay để chạy tay. Với zocloud.json, dùng "cron_schedule": "0 2 * * *" trong deploy.

Lưu file người dùng tải lên

Container không giữ file giữa các lần deploy, trừ khi bạn dùng một trong hai cách:

  • Volume: tab Cấu hình → Volume → Thêm volume tại /data. Có sao lưu tự động. Service có volume chạy 1 bản.
  • Object storage S3 (khuyên dùng cho media Django): Thêm → Object storage (S3), dùng boto3 hoặc django-storages với các biến ${{files.S3_ENDPOINT}}, ${{files.S3_BUCKET}}… Endpoint https://s3.zocloud.app, kiểu path-style. Xem hướng dẫn storage.

Production checklist cho app Python

  • 2 bản chạy trở lên cho web, hoặc bật Tự động scale theo CPU.
  • Đường dẫn Kiểm tra sức khoẻ (/health) trả mã dưới 500.
  • Tường lửa ở Cấu hình → Bảo mật: để Chỉ ghi nhận vài ngày, xem log Tường lửa, rồi chuyển Chặn.
  • Backup ngay database trước lệnh ghi lớn; khôi phục luôn vào database mới.
  • Gắn tên miền riêng ở tab Tên miền, HTTPS tự động.

Số service, bản chạy, RAM và database tuỳ gói; giá hiện trong portal (Bảng giá), trả từ ví VND, có hoá đơn VAT điện tử.

Câu hỏi thường gặp

ZoCloud chạy FastAPI, Django, Flask bằng lệnh gì?

ZoCloud tự nhận diện framework. FastAPI chạy bằng uvicorn, Django và Flask chạy bằng gunicorn, đều nghe 0.0.0.0 và cổng trong biến PORT; nếu thiếu uvicorn hoặc gunicorn trong dependency, ZoCloud tự cài thêm. Bạn có thể ghi đè bằng Lệnh chạy, Procfile hoặc zocloud.json.

Chạy migration Django ở đâu?

Đặt lệnh migration vào trường prestart trong zocloud.json, ví dụ .venv/bin/python manage.py migrate --noinput. Lệnh này chạy trước khi app khởi động ở mỗi lần deploy.

Làm sao chạy Celery hay RQ worker?

Tạo thêm một service từ cùng repo, đổi Loại service thành Worker và đặt Lệnh chạy là lệnh của worker. Worker không có cổng, dùng chung biến như REDIS_URL và DATABASE_URL qua biến tham chiếu.

Cron job trên ZoCloud chạy theo múi giờ nào?

Lịch cron có 5 trường và tính theo giờ Việt Nam. Mỗi lần chạy là một container chạy tới khi xong; lần trước chưa xong thì lần sau bị bỏ qua.

Đưa app Python lên production

Đăng ký ZoCloud và deploy app FastAPI, Django hay Flask đầu tiên. Đọc thêm hướng dẫn app, database và zo CLI. Dùng Node.js? Xem deploy Node.js có PostgreSQL.

Chạy app của bạn tại Việt Nam trong vài phút.
Deploy từ GitHub, database được quản lý, thanh toán bằng VND, có hoá đơn VAT.
Đăng ký ZoCloud   Xem hướng dẫn