# ========================================== # Stage 1: Build dependencies # ========================================== FROM python:3.11-slim AS builder ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ libpq-dev \ && rm -rf /var/lib/apt/lists/* RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" COPY requirements.txt . #RUN pip install --no-cache-dir -r requirements.txt RUN pip install --no-cache-dir --default-timeout=1000 -i https://package-mirror.liara.ir/repository/pypi/simple -r requirements.txt # ========================================== # Stage 2: Final Production Image # ========================================== FROM python:3.11-slim ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV PATH="/opt/venv/bin:$PATH" WORKDIR /app # نصب کتابخانه‌های سیستم‌عامل برای زمان اجرا + ابزار ارزشمند supervisor RUN apt-get update && apt-get install -y --no-install-recommends \ libpq5 \ supervisor \ && rm -rf /var/lib/apt/lists/* # کپی کردن لایه پاکیزه پکیج‌ها از استیج اول COPY --from=builder /opt/venv /opt/venv # تمهیدات امنیتی: ساخت کاربر سیستم غیر ریشه RUN useradd -m -u 1000 django # ساخت دایرکتوری‌های مورد نیاز و واگذاری مالکیت به کاربر django RUN mkdir -p /app/staticfiles /app/mediafiles /etc/supervisor && \ chown -R django:django /app /etc/supervisor # کپی کردن کدهای پروژه با مالکیت کاربر محدود شده COPY --chown=django:django . . # اجرایی کردن اسکریپت اینتری‌پوینت RUN chmod +x /app/entrypoint.sh # سوئیچ به کاربر غیر ریشه USER django # اکسپوز پورت وب‌سرور برای وب‌پروکسی Coolify EXPOSE 8000 # نقطه ورود اصلی کانتینر ENTRYPOINT ["/app/entrypoint.sh"]