modern-django-starter/entrypoint.sh
Django Template 04223730d3 Refactor Docker configuration to follow 2025 industry best practices
## Major Refactoring Based on Research:

###  **Removed Over-Engineered Approach**:
- Removed `gosu` dependency (unnecessary complexity)
- Removed complex user switching in entrypoint
- Removed root operations during runtime
- Simplified permission management

###  **Implemented 2025 Best Practices**:

#### 1. **Simplified Dockerfile Pattern**:
- Create directories with proper ownership in build stage
- Set `USER django` once and keep it throughout
- No complex user switching or runtime permission changes
- Clean, standard Docker layering

#### 2. **Industry-Standard Entrypoint**:
- Simple script that runs as non-root user
- Standard `exec "$@"` pattern
- No permission operations during runtime
- Follows container orchestration best practices

#### 3. **Proper Architecture Documentation**:
- Django/Gunicorn for dynamic content only
- Nginx serves static files (6000+ req/sec vs Django's much lower)
- Non-root user throughout for security
- Clean service separation

## Benefits of This Approach:
-  **Security**: Non-root user throughout application lifecycle
-  **Simplicity**: Standard Docker patterns, no complex scripts
-  **Performance**: Nginx handles static files efficiently
-  **Maintainability**: Follows industry conventions
-  **Reliability**: Proven patterns used by major companies

## Research Sources:
Based on 2025 best practices from:
- TestDriven.io Django Docker patterns
- Better Stack community guides
- Official Django deployment documentation
- Docker security best practices

This follows the KISS principle while maintaining production-grade security and performance.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-11 16:32:02 +05:30

21 lines
387 B
Bash
Executable File

#!/bin/bash
set -e
echo "Waiting for PostgreSQL..."
sleep 5
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 "Starting application..."
exec "$@"