# بک‌اند FastAPI — تصویر باریک و بدون root FROM python:3.13-slim WORKDIR /app ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # FFmpeg — نرمال‌سازی رسانه به WebP برای ورودی‌هایی که Pillow نمی‌خواند # (ویدیو → WebP متحرک، فرمت‌های تصویری خاص). مسیر Pillow به آن وابسته نیست. RUN apt-get update \ && apt-get install -y --no-install-recommends ffmpeg \ && rm -rf /var/lib/apt/lists/* COPY app ./app COPY alembic.ini ./ COPY migrations ./migrations # کاربر بدون دسترسی root — برنامه چیزی روی دیسک محلی نمی‌نویسد RUN useradd --system --create-home appuser \ && chown -R appuser:appuser /app USER appuser EXPOSE 8000 # ساخت جداول پایه، مهاجرت‌های Alembic و seed (بدون حذف داده‌های موجود) و سپس # اجرای سرور با exec — تا SIGTERM (docker stop) مستقیم به uvicorn برسد و خاموشی # تمیز انجام شود؛ --proxy-headers برای دیدن IP واقعی کلاینت پشت Traefik CMD ["sh", "-c", "python -m app.db_init && alembic upgrade head && python -m app.seed && exec uvicorn app.main:app --host 0.0.0.0 --port 8000 --proxy-headers --forwarded-allow-ips='*'"]