DEV Community

Pranav Bakare
Pranav Bakare

Posted on

Django application for production ready

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'

  1. 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',
}
}

  1. 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'

  1. 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

  1. 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.

Top comments (0)