پایتون با هر ابزاری که دارید
سکو کلود ابزار وابستگی را از روی فایلهای پروژه تشخیص میدهد و وابستگیها را از میرور داخلی 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
تشخیص
یکی از
requirements.txt،pyproject.toml،Pipfile،uv.lockیاpdm.lock.requirements.txtنسخه
نسخهی پایتون از
runtime.txtیا.python-versionتعیین میشود.python-3.12نصب
وابستگیها با همان ابزار و از میرور داخلی PyPI نصب میشوند.
pip install -r requirements.txtاجرا
خط
webدرProcfileاجرا میشود.uvicorn main:app
خروجی یک استقرار واقعی
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}
web: uvicorn main:app --host 0.0.0.0 --port $PORT
fastapi==0.115.*
uvicorn[standard]==0.32.*
تنظیمات
نسخهی Python
نسخههای 3.10 تا 3.13 در دسترساند و بدون اعلام نسخه، Python 3.12 استفاده میشود.
| از کجا خوانده میشود | نمونه |
|---|---|
runtime.txt | python-3.12.4 |
.python-version | 3.12 |
requires-python در pyproject.toml | ">=3.12" |
مدیریت وابستگیها
اگر چند فایل کنار هم باشند، اولویت از بالا به پایین است.
| فایل | ابزار |
|---|---|
Pipfile | Pipenv |
poetry.lock یا [tool.poetry] در pyproject.toml | Poetry |
uv.lock | uv |
pdm.lock | PDM |
requirements.txt | pip |
اگر Procfile نباشد
اولین فایلی که پیدا شود دستور اجرا را تعیین میکند.
| فایل | دستور اجرا |
|---|---|
manage.py | پروژهی Django با gunicorn |
wsgi.py | gunicorn wsgi:application |
app.py | uvicorn app:app یا python app.py |
main.py | uvicorn main:app یا python main.py |
اتصال به دیتابیس
بعد از لینک کردن دیتابیس، DATABASE_URL در محیط اپ است و ORM ها مستقیم از آن استفاده میکنند.
sakoocloud apps link-db <db-id> --app my-api
import os
from sqlalchemy import create_engine
engine = create_engine(os.environ["DATABASE_URL"])
دیتابیسهایی که معمولاً کنارش میآیند
همراه هر استقرار
اینها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعالاند. بعضی، مثل مقیاسدهی خودکار و کرانجاب، به پلن بستگی دارند.
- دامنهی اختصاصی و SSLدامنه را اضافه کنید؛ گواهی خودکار صادر و تمدید میشود.
- متغیرهای محیطی و سکرتمقادیر رمزگذاریشده فقط در زمان اجرا به اپ میرسند.
- مرحلهی انتشارmigration بعد از بیلد و پیش از جایگزینی نسخهی قبلی اجرا میشود.
- لاگ زندهلاگ بیلد و زمان اجرا، در CLI و کنسول.
- بازگشت به نسخهی قبلهر استقرار قبلی با یک دستور برمیگردد.
- مقیاسدهیمنابع و تعداد نمونهها را تغییر دهید یا خودکارش کنید.
- دیسک ماندگاربرای فایلهایی که باید بعد از هر استقرار بمانند.
- کرانجابدستور زمانبندیشده با همان ایمیج و متغیرها.
- استقرار خودکار با گیتهر push روی شاخهی هدف بیلد و مستقر میشود.
خطاهای رایج
اپ بالا نمیآید یا مدام ریاستارت میشود
علتوبسرور روی پورت ثابت یا 127.0.0.1 گوش میدهد.
راهحلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.
web: gunicorn -w 4 -b 0.0.0.0:$PORT app:app
ModuleNotFoundError در شروع برنامه
علتبسته در فایل وابستگیها نیامده و فقط روی سیستم شما نصب است.
راهحلوابستگیها را با pip freeze > requirements.txt یا قفل ابزار خودتان بهروز کنید.
دستور اجرای اشتباه انتخاب میشود
علتProcfile وجود ندارد و تشخیص خودکار فایل دیگری را پیدا کرده است.
راهحلیک Procfile با خط web: بگذارید.
پاد با OOMKilled متوقف میشود
علتمصرف حافظه از سقف منابع اپ بیشتر شده است.
راهحلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.
sakoocloud apps scale --memory 1Gi
پرسشهای متداول
FastAPI را با چه سروری اجرا کنم؟
uvicorn، یا gunicorn با worker های uvicorn برای چند پردازه. هر دو در Procfile تعریف میشوند.
uv و Poetry پشتیبانی میشوند؟
بله. uv.lock، poetry.lock، Pipfile و pdm.lock همگی تشخیص داده میشوند.
کار زمانبندیشده را کجا اجرا کنم؟
از کرانجابهای اپ استفاده کنید؛ دستور در همان ایمیج و با همان متغیرهای محیطی اجرا میشود.
بستههایی که کامپایل لازم دارند نصب میشوند؟
بیشتر بستههای رایج wheel آماده دارند. اگر بستهای کتابخانهی سیستمی خاصی بخواهد، Dockerfile اختصاصی بنویسید.
جزئیات بیشتر در راهنمای Python در مستندات و مرجع CLI.