mirror of
https://github.com/thecyberlearn/modern-django-starter.git
synced 2026-08-18 09:52:56 +00:00
## Problem Analysis: - Static files collection failing with permission errors in Docker containers - Non-root user cannot create directories in container filesystem - Previous fix didn't handle runtime permission management properly ## Comprehensive Solution: ### 1. Enhanced Dockerfile: - Added `gosu` package for secure user switching - Removed premature USER directive - run setup as root first - Improved directory permissions with proper chmod/chown ### 2. Robust Entrypoint Script: - Runs initial setup (migrations, static collection) as root - Explicitly sets directory permissions for static/media files - Uses `gosu` to securely switch to django user for main application - Ensures proper ownership before application starts ### 3. Updated Docker Compose Volume: - Changed volume mapping to use ../files/staticfiles (more descriptive) - Ensures persistent storage for static files across deployments ## Security & Best Practices: - ✅ Maintains security with non-root application runtime - ✅ Handles setup operations with necessary root permissions - ✅ Uses gosu for secure user switching (better than su/sudo) - ✅ Explicit permission management for container directories ## Benefits: - Resolves all static files permission errors - Works reliably in containerized environments - Maintains security best practices - Compatible with Dokploy and other orchestration platforms This should completely resolve the collectstatic permission issues. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
28 lines
704 B
Bash
Executable File
28 lines
704 B
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
echo "Waiting for PostgreSQL..."
|
|
sleep 5
|
|
|
|
echo "Setting up directories and permissions..."
|
|
# Create directories and set proper permissions
|
|
mkdir -p /app/staticfiles /app/media
|
|
chown -R django:django /app/staticfiles /app/media
|
|
chmod -R 755 /app/staticfiles /app/media
|
|
|
|
echo "Running migrations..."
|
|
python manage.py migrate --noinput
|
|
|
|
echo "Creating default groups..."
|
|
python manage.py create_groups
|
|
|
|
echo "Setting up social applications..."
|
|
python manage.py setup_social_apps
|
|
|
|
echo "Collecting static files..."
|
|
python manage.py collectstatic --noinput
|
|
|
|
echo "Switching to django user and starting application..."
|
|
# Switch to django user for the main application
|
|
exec gosu django "$@" |