mirror of
https://github.com/thecyberlearn/modern-django-starter.git
synced 2026-08-18 11:12:54 +00:00
- Add build-time static file collection to handle Docker volume permission issues - Create django_project/settings/build.py for minimal build-time settings - Enhance entrypoint.sh with graceful fallback when collectstatic fails - Improve Dockerfile permissions and add Tailwind build during Docker build - Add WARP.md with comprehensive development guidance - Include test-docker-build.sh script for local testing - Update docker-compose.dokploy.yml with build optimizations Fixes permission denied errors during static file collection on Dokploy deployments.
66 lines
1.9 KiB
Docker
66 lines
1.9 KiB
Docker
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
|
|
|
|
# Create django user and group
|
|
RUN groupadd -r django && useradd -r -g django django
|
|
|
|
# Copy application files
|
|
COPY . /app/
|
|
|
|
# Create directories and set proper permissions
|
|
RUN mkdir -p /app/staticfiles /app/media && \
|
|
chown -R django:django /app && \
|
|
chmod -R 755 /app && \
|
|
chmod -R 775 /app/staticfiles /app/media
|
|
|
|
# Build Tailwind CSS and collect static files during build (before switching to django user)
|
|
# This ensures static files are available even if collectstatic fails at runtime
|
|
# Use minimal build settings that don't require database or external dependencies
|
|
RUN DJANGO_SETTINGS_MODULE=django_project.settings.build \
|
|
python manage.py tailwind install && \
|
|
python manage.py tailwind build && \
|
|
python manage.py collectstatic --noinput --clear || echo "Static collection failed during build, will retry at runtime"
|
|
|
|
# Fix permissions after collecting static files
|
|
RUN chown -R django:django /app/staticfiles && \
|
|
chmod -R 755 /app/staticfiles
|
|
|
|
USER django
|
|
|
|
EXPOSE 8000
|
|
|
|
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "3", "django_project.wsgi:application"] |