From 76bf2715b2b5cbce241859168ea5d0f5faf3b120 Mon Sep 17 00:00:00 2001 From: javad Date: Mon, 15 Jun 2026 12:38:36 +0330 Subject: [PATCH] first commit --- Dockerfile | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ entrypoint.sh | 14 ++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 Dockerfile create mode 100644 entrypoint.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..629b39a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,63 @@ +# ========================================== +# 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 + + +# ========================================== +# 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"] \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..cf0d86d --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# متوقف کردن اسکریپت در صورت بروز هرگونه خطا در مراحل آماده‌سازی +set -e + +echo "==> Running Database Migrations..." +python manage.py migrate --noinput + +echo "==> Collecting Static Files..." +python manage.py collectstatic --noinput + +echo "==> Starting Supervisor..." +# اجرای سوپروایزر به عنوان پروسه اصلی (PID 1) کانتینر +exec supervisord -c /etc/supervisor/supervisord.conf \ No newline at end of file