رانتایم پایتون

هاست Python برای FastAPI و سرویس‌های پایتون

پروژه‌ی پایتون را با هر ابزار وابستگی که دارید مستقر کنید: pip، Poetry، uv، Pipenv یا PDM. دستور اجرا از Procfile خوانده می‌شود یا از روی فایل‌های پروژه حدس زده می‌شود.

تشخیص
requirements.txt، pyproject.toml و…
نسخه‌ها
Python 3.10 تا 3.13 (پیش‌فرض 3.12)
اجرا
Procfile یا تشخیص خودکار
پورت پیش‌فرض
8000
لوگوی Python

پایتون با هر ابزاری که دارید

سکو کلود ابزار وابستگی را از روی فایل‌های پروژه تشخیص می‌دهد و وابستگی‌ها را از میرور داخلی PyPI نصب می‌کند. نسخه‌ی پایتون از runtime.txt، .python-version یا requires-python خوانده می‌شود.

بهترین راه تعیین دستور اجرا، یک خط web در Procfile است. اگر Procfile نباشد، فایل‌های manage.py، wsgi.py، app.py و main.py به ترتیب بررسی می‌شوند و در صورت نصب بودن، gunicorn یا uvicorn انتخاب می‌شود.

مناسب برای

  • API با FastAPI و uvicorn
  • سرویس WSGI با gunicorn
  • بات تلگرام و وب‌هوک
  • سرویس مدل یادگیری ماشین

مسیر بیلد Python

  1. تشخیص

    یکی از requirements.txt، pyproject.toml، Pipfile، uv.lock یا pdm.lock.

    requirements.txt
  2. نسخه

    نسخه‌ی پایتون از runtime.txt یا .python-version تعیین می‌شود.

    python-3.12
  3. نصب

    وابستگی‌ها با همان ابزار و از میرور داخلی PyPI نصب می‌شوند.

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

    خط web در Procfile اجرا می‌شود.

    uvicorn main:app

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

sakoocloud deploy
sakoocloud deploy
✔ Packed 0.3MB
✔ 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-fastapi.sakooapps.ir

FastAPI در کمترین شکل

وب‌سرور باید روی 0.0.0.0 و پورت $PORT گوش بدهد؛ Procfile این را صریح می‌کند.

from fastapi import FastAPI

app = FastAPI()


@app.get("/health")
def health():
    return {"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

اگر Procfile نباشد

اولین فایلی که پیدا شود دستور اجرا را تعیین می‌کند.

فایلدستور اجرا
manage.pyپروژه‌ی Django با gunicorn
wsgi.pygunicorn wsgi:application
app.pyuvicorn app:app یا python app.py
main.pyuvicorn main:app یا python main.py

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

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

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

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

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

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

خطاهای رایج

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

علتوب‌سرور روی پورت ثابت یا 127.0.0.1 گوش می‌دهد.

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

Procfile
web: gunicorn -w 4 -b 0.0.0.0:$PORT app:app

ModuleNotFoundError در شروع برنامه

علتبسته در فایل وابستگی‌ها نیامده و فقط روی سیستم شما نصب است.

راه‌حلوابستگی‌ها را با pip freeze > requirements.txt یا قفل ابزار خودتان به‌روز کنید.

دستور اجرای اشتباه انتخاب می‌شود

علتProcfile وجود ندارد و تشخیص خودکار فایل دیگری را پیدا کرده است.

راه‌حلیک Procfile با خط web: بگذارید.

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

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

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

terminal
sakoocloud apps scale --memory 1Gi

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

FastAPI را با چه سروری اجرا کنم؟

uvicorn، یا gunicorn با worker های uvicorn برای چند پردازه. هر دو در Procfile تعریف می‌شوند.

uv و Poetry پشتیبانی می‌شوند؟

بله. uv.lock، poetry.lock، Pipfile و pdm.lock همگی تشخیص داده می‌شوند.

کار زمان‌بندی‌شده را کجا اجرا کنم؟

از کران‌جاب‌های اپ استفاده کنید؛ دستور در همان ایمیج و با همان متغیرهای محیطی اجرا می‌شود.

بسته‌هایی که کامپایل لازم دارند نصب می‌شوند؟

بیشتر بسته‌های رایج wheel آماده دارند. اگر بسته‌ای کتابخانه‌ی سیستمی خاصی بخواهد، Dockerfile اختصاصی بنویسید.

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

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

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

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