Django application for production ready

Pranav Bakare - Oct 18 - - Dev Community

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

Enter fullscreen mode Exit fullscreen mode
  • 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'

Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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',
    }
}
Enter fullscreen mode Exit fullscreen mode

3. Serve Static Files Using WhiteNoise:

  • Install WhiteNoise to serve static files:
pip install whitenoise
Enter fullscreen mode Exit fullscreen mode

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'


Enter fullscreen mode Exit fullscreen mode

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

Enter fullscreen mode Exit fullscreen mode
  • Collect Static Files: Run the following command to collect all static files:
python manage.py collectstatic

Enter fullscreen mode Exit fullscreen mode

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

Enter fullscreen mode Exit fullscreen mode

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.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .