To set up a Django application for production with the following requirements, you can follow the steps outlined below:
1. Configure the AWS S3 Bucket for Media Files:
- Install boto3 and django-storages to integrate AWS S3 with your Django app:
pip install boto3 django-storages
- Update the Django settings (settings.py) to configure AWS S3:
# settings.py
# AWS S3 Configurations
AWS_ACCESS_KEY_ID = 'your-access-key'
AWS_SECRET_ACCESS_KEY = 'your-secret-key'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'
AWS_S3_REGION_NAME = 'your-region' # e.g., 'us-east-1'
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
# Media files configuration
MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/media/'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
2. Configure PostgreSQL Database on Render:
- Set up your database on Render and note down the connection details.
- Install psycopg2 to connect Django with PostgreSQL:
pip install psycopg2-binary
Update your settings.py:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your-db-name',
'USER': 'your-db-user',
'PASSWORD': 'your-db-password',
'HOST': 'your-db-host',
'PORT': 'your-db-port',
}
}
3. Serve Static Files Using WhiteNoise:
- Install WhiteNoise to serve static files:
pip install whitenoise
Update MIDDLEWARE and STATICFILES_STORAGE in your settings.py:
# settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # Add this after SecurityMiddleware
# Other middlewares
]
# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
# WhiteNoise configuration
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
4. Additional Production Settings:
Security Settings:
# settings.py
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', 'your-render-subdomain.onrender.com']
# Security settings
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
- Collect Static Files: Run the following command to collect all static files:
python manage.py collectstatic
5. Deploy on Render:
Set up your project on Render by connecting to your GitHub repository.
Define environment variables on the Render platform for your Django settings (e.g., AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, DJANGO_SECRET_KEY, etc.).
Configure the build and start commands:
# Build Command
pip install -r requirements.txt
# Start Command
gunicorn your_project_name.wsgi:application
Following these steps will ensure your Django application is production-ready, with media files hosted on AWS S3, a PostgreSQL database on Render, and static files served efficiently using WhiteNoise.