فریم‌ورک پایتون

هاست Flask با gunicorn

app.py یا wsgi.py کافی است تا اپ Flask شناخته شود و با gunicorn اجرا شود. برای کنترل کامل، دستور را در Procfile بنویسید.

تشخیص
app.py یا wsgi.py و فایل وابستگی‌ها
نسخه‌ها
Python 3.10 تا 3.13
اجرا
gunicorn app:app --workers 2
پورت پیش‌فرض
8000
لوگوی Flask

Flask، کوچک و آماده

اگر Procfile نباشد، wsgi.py و بعد app.py و main.py بررسی می‌شوند و gunicorn با دو worker روی پورت اپ اجرا می‌شود. بنابراین یک اپ Flask ساده بدون هیچ تنظیمی بالا می‌آید.

سرور توسعه‌ی Flask (flask run) برای تولید مناسب نیست. gunicorn را به وابستگی‌ها اضافه کنید و اگر درخواست‌های طولانی دارید، timeout را در Procfile بالا ببرید.

مناسب برای

  • API سبک و میکروسرویس
  • وب‌هوک و بات
  • سرویس مدل یادگیری ماشین
  • داشبورد داخلی کوچک

مسیر بیلد Flask

  1. تشخیص

    فایل وابستگی‌ها و app.py یا wsgi.py.

    app.py
  2. نصب

    وابستگی‌ها با ابزار پروژه نصب می‌شوند.

    pip install -r requirements.txt
  3. اجرا

    gunicorn شیء app را با دو worker اجرا می‌کند.

    gunicorn app:app

خروجی یک استقرار واقعی

sakoocloud deploy
sakoocloud deploy
✔ Packed 0.2MB
✔ Source uploaded
ℹ Build started · dep_7k2m9q
#4 [build 1/5] FROM python:3.12-slim
#6 [build 3/5] RUN pip install -r requirements.txt
#8 [build 4/5] COPY . .
#10 exporting to image
✔ Deployed — app is running.
→ https://my-flask.sakooapps.ir

کمترین چیزی که لازم دارید

gunicorn را به وابستگی‌ها اضافه کنید؛ Procfile اختیاری است ولی رفتار را صریح می‌کند.

from flask import Flask, jsonify

app = Flask(__name__)


@app.get("/health")
def health():
    return jsonify(ok=True)

تنظیمات

نسخه‌ی Python

نسخه‌های 3.10 تا 3.13 در دسترس‌اند و بدون اعلام نسخه، Python 3.12 استفاده می‌شود.

از کجا خوانده می‌شودنمونه
runtime.txtpython-3.12.4
.python-version3.12
requires-python در pyproject.toml">=3.12"

مدیریت وابستگی‌ها

اگر چند فایل کنار هم باشند، اولویت از بالا به پایین است.

فایلابزار
PipfilePipenv
poetry.lock یا [tool.poetry] در pyproject.tomlPoetry
uv.lockuv
pdm.lockPDM
requirements.txtpip

اتصال به دیتابیس

بعد از لینک کردن دیتابیس، DATABASE_URL در محیط اپ است و ORM ها مستقیم از آن استفاده می‌کنند.

sakoocloud apps link-db <db-id> --app my-api

دیتابیس‌هایی که معمولاً کنارش می‌آیند

همراه هر استقرار

این‌ها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعال‌اند. بعضی، مثل مقیاس‌دهی خودکار و کران‌جاب، به پلن بستگی دارند.

خطاهای رایج

اپ بالا نمی‌آید یا مدام ری‌استارت می‌شود

علتاپ با app.run() روی پورت ثابت اجرا شده است.

راه‌حلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.

Procfile
web: gunicorn app:app --bind 0.0.0.0:$PORT

WORKER TIMEOUT در لاگ

علتدرخواست‌های طولانی از timeout پیش‌فرض 30 ثانیه‌ی gunicorn بیشتر طول می‌کشند.

راه‌حل--timeout را در Procfile بالا ببرید یا کار طولانی را به صف پس‌زمینه بسپارید.

gunicorn پیدا نمی‌شود

علتgunicorn در requirements.txt نیامده است.

راه‌حلgunicorn را به وابستگی‌ها اضافه کنید.

پاد با OOMKilled متوقف می‌شود

علتمصرف حافظه از سقف منابع اپ بیشتر شده است.

راه‌حلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.

terminal
sakoocloud apps scale --memory 1Gi

پرسش‌های متداول

flask run را در تولید استفاده کنم؟

نه. سرور توسعه برای یک کاربر طراحی شده؛ gunicorn را استفاده کنید.

تعداد worker ها را چطور تعیین کنم؟

در Procfile با --workers. برای اپ‌های کوچک 2 کافی است؛ با افزایش CPU اپ، worker ها را بیشتر کنید.

Flask-SQLAlchemy به دیتابیس وصل می‌شود؟

بله. SQLALCHEMY_DATABASE_URI را برابر DATABASE_URL بگذارید.

جزئیات بیشتر در راهنمای Flask در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید