FROM python:3.11-slim as base ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 RUN apt-get update \ && apt-get install -y --no-install-recommends \ postgresql-client \ build-essential \ libpq-dev \ gettext \ curl \ && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements/base.txt /app/requirements/ RUN pip install --no-cache-dir -r requirements/base.txt FROM base as development COPY requirements/development.txt /app/requirements/ RUN pip install --no-cache-dir -r requirements/development.txt COPY . /app/ EXPOSE 8000 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] FROM base as production COPY requirements/production.txt /app/requirements/ RUN pip install --no-cache-dir -r requirements/production.txt RUN groupadd -r django && useradd -r -g django django COPY . /app/ # Create directories and set ownership - industry best practice RUN mkdir -p /app/staticfiles /app/media && \ chown -R django:django /app USER django EXPOSE 8000 CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "3", "django_project.wsgi:application"]