# استفاده از ایمیج پایه‌ای که قبلاً Push کردید ARG BASE_IMAGE=hub.peikarband.ir/peikarband/landing:base FROM ${BASE_IMAGE} AS builder WORKDIR /app # ۱. کپی کردن فایل‌های نیازمندی (برای استفاده از Cache) COPY peikarband/requirements.txt . RUN --mount=type=cache,target=/root/.cache/pip \ pip install --no-cache-dir -r requirements.txt # ۲. کپی کردن کل کدها # مهم: ساختار فولدر باید با app_name در rxconfig.py یکی باشد COPY peikarband/ . # ۳. تنظیم PYTHONPATH برای حل مشکل ModuleNotFoundError ENV PYTHONPATH=/app # ۴. اجرای Reflex Export # این دستور خودش فرانت‌تند را بیلد می‌کند و نیازی به npm run build دستی نیست RUN reflex init --loglevel debug RUN reflex export --frontend-only --no-zip --loglevel debug # ================= Stage 2: Runtime ================= FROM ${BASE_IMAGE} AS runtime # ایجاد یوزر غیر ریشه برای امنیت RUN groupadd -r peikarband && useradd -r -g peikarband -u 1000 -m peikarband WORKDIR /app # کپی کردن کتابخانه‌های نصب شده از مرحله قبل COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages COPY --from=builder /usr/local/bin /usr/local/bin # کپی کردن کد اپلیکیشن و فایلهای بیلد شده فرانت‌تند COPY --from=builder --chown=peikarband:peikarband /app /app # ایجاد پوشه‌های مورد نیاز RUN mkdir -p data logs uploaded_files && \ chown -R peikarband:peikarband /app && \ chmod -R 755 /app ENV PYTHONUNBUFFERED=1 \ PYTHONPATH=/app \ NODE_ENV=production USER peikarband EXPOSE 3000 8000 ENTRYPOINT ["/usr/bin/tini", "--"] CMD ["reflex", "run", "--env", "prod"]