This content originally appeared on DEV Community and was authored by Pranav Bakare
To set up a Django application for production with the following requirements, you can follow the steps outlined below:
- 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’
- 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’,
}
}
- 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’
- 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
- 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.
This content originally appeared on DEV Community and was authored by Pranav Bakare