Skip to main content
Complete this checklist before deploying FootyCollect to production. This ensures all security settings are configured and the application is production-ready.

Pre-Deployment Checklist

Use this comprehensive checklist to verify your production deployment.

Django Configuration

1

DEBUG Disabled

Critical Security: DEBUG=True exposes sensitive information including settings, environment variables, and stack traces.
.env
Verify:
This is validated by config/checks.py:20.
2

Secure SECRET_KEY

Generate a unique, random SECRET_KEY:
Requirements:
  • Minimum 50 characters (config/checks.py:17)
  • Unique per environment
  • Never use default value
  • Never commit to version control
.env
3

ALLOWED_HOSTS Configured

Set specific domain names (no wildcards):
.env
Do NOT use:
Validated by config/checks.py:300.
4

Admin URL Changed

Change from default /admin/ to prevent automated attacks:
.env
Access admin at: https://yourdomain.com/secret-admin-path/

SSL/TLS Security

1

SSL Certificate Installed

Verify SSL certificate is active:
Should show valid certificate from Let’s Encrypt or your CA.
2

HTTPS Redirect Enabled

Force all traffic to HTTPS:
.env
Test:
3

HSTS Configured

Enable HTTP Strict Transport Security:
.env
Verify header:
4

Secure Cookies

Configure cookie security:
.env
Validated by config/checks.py:334.

Database Security

1

Strong Database Password

Use a strong password for PostgreSQL:
Requirements:
  • Minimum 16 characters
  • Mix of letters, numbers, symbols
  • Unique per environment
.env
2

Database Connectivity

Test database connection:
Validated automatically by config/checks.py:127.
3

Database Backups Configured

Verify backups are working:Bare metal:
Docker:

Redis Configuration

1

Redis Connectivity

Test Redis connection:
Validated by config/checks.py:151.
2

Redis Password (Optional but Recommended)

For additional security, set Redis password:
Update connection string:
.env

Storage Configuration

1

Storage Credentials Configured

Verify S3/R2 credentials are set:
Validated by config/checks.py:268.
2

Static Files Collected

Test collectstatic uploads to S3/R2:
3

CORS Configured (R2 Only)

If using Cloudflare R2 with custom domain, configure CORS:
Test fonts/static assets load without CORS errors in browser console.

Email Configuration

1

SendGrid API Key Configured

.env
2

Sender Domain Verified

Verify domain in SendGrid:
  1. SendGrid > Settings > Sender Authentication
  2. Verify domain is authenticated
  3. DNS records are configured
3

Test Email Delivery

Check inbox for test email.

Error Tracking

1

Sentry DSN Configured

.env
2

Test Sentry Integration

Trigger a test error:
Verify event appears in Sentry dashboard.

Security Headers

1

Content Security Policy

Configure CSP to allow required sources:
.env
Test for CSP violations in browser console.
2

Verify Security Headers

Check all security headers are present:
Should include:
  • Strict-Transport-Security
  • X-Frame-Options: DENY
  • X-Content-Type-Options: nosniff
  • Referrer-Policy: strict-origin-when-cross-origin
  • Content-Security-Policy
3

Test with Security Headers Analyzer

Use online tools to verify headers:Aim for A or A+ grade.

Firewall and Network

1

Firewall Configured

Bare metal:
Docker:
2

Fail2ban Enabled (Bare Metal)

3

SSH Security

Harden SSH access:
/etc/ssh/sshd_config

Service Health

1

All Services Running

Bare metal:
Docker:
2

Health Endpoints

Test application health:
3

Admin Access

Verify admin panel access:
Log in with superuser credentials.

Django Deployment Checks

1

Run Django Checks

Run comprehensive deployment checks:
This validates (config/checks.py):
  • ✓ DEBUG disabled (checks.py:20)
  • ✓ SECRET_KEY secure (checks.py:40)
  • ✓ Required environment variables (checks.py:83)
  • ✓ Database connectivity (checks.py:127)
  • ✓ Redis connectivity (checks.py:151)
  • ✓ Storage credentials (checks.py:268)
  • ✓ ALLOWED_HOSTS configured (checks.py:300)
  • ✓ SSL/HTTPS settings (checks.py:334)
All checks must pass before production deployment.
2

Address Warnings

Fix any warnings reported by checks:
Common warnings:
  • Missing SENTRY_DSN (recommended)
  • ALLOWED_HOSTS contains wildcard
  • Missing storage credentials

Production Deployment Checklist

Print and complete this checklist:

Django Configuration

  • DEBUG=False set
  • Unique SECRET_KEY generated (50+ characters)
  • ALLOWED_HOSTS configured (no wildcards)
  • Admin URL changed from default
  • python manage.py check --deploy passes

Security

  • SSL certificate installed and valid
  • HTTPS redirect enabled (SECURE_SSL_REDIRECT=True)
  • HSTS configured
  • Secure cookies configured
  • Content Security Policy enabled
  • Security headers verified
  • Firewall configured (UFW or cloud firewall)
  • Fail2ban enabled (bare metal)
  • SSH hardened (no root, key-based auth)

Database

  • Strong database password set
  • Database connectivity verified
  • Database backups configured
  • Backup restoration tested

Redis

  • Redis connectivity verified
  • Redis password set (recommended)

Storage

  • Storage backend configured (S3/R2)
  • Storage credentials validated
  • collectstatic runs successfully
  • Static files accessible via CDN/bucket URL
  • CORS configured (R2 only)

Email

  • SendGrid API key configured
  • Sender domain verified in SendGrid
  • Test email sent successfully

Monitoring

  • Sentry DSN configured
  • Sentry integration tested
  • Error alerts configured in Sentry

Services

  • All services running and enabled
  • Health endpoints responding
  • Admin panel accessible
  • Logs are being written
  • Log rotation configured

Performance

  • Gunicorn workers configured appropriately
  • Redis caching enabled
  • Compression enabled
  • Static files served from CDN

Documentation

  • Environment variables documented
  • Deployment process documented
  • Recovery procedures documented
  • Team has access to credentials (securely)

Post-Deployment Monitoring

After deployment, monitor for:

First 24 Hours

Monitor Sentry for errors:
  • Check error frequency
  • Review stack traces
  • Verify no critical errors
Ensure backups are running:

First Week

  • Monitor disk space usage
  • Review user registration and activity
  • Check email delivery success rate
  • Verify SSL certificate auto-renewal is configured
  • Review Sentry performance metrics
  • Test database restore procedure

Ongoing

  • Weekly log reviews
  • Monthly security updates
  • Quarterly credential rotation
  • Regular backup restoration tests
  • Performance monitoring and optimization

Troubleshooting Checklist Failures

Final Verification

Before announcing your deployment:
1

Complete User Journey

Test the complete user experience:
  1. Visit homepage via HTTPS
  2. Register new account
  3. Verify email received
  4. Log in
  5. Create an item
  6. Upload a photo
  7. View collection
  8. Test search/filter
  9. Log out
2

Security Scan

Run security scanners:
3

Load Test (Optional)

Basic load testing:
Review response times and error rates.
Congratulations! If all checklist items are complete and verified, your FootyCollect deployment is production-ready.

Quick Reference Commands

Next Steps

After completing the checklist:

Monitoring Setup

Configure ongoing monitoring with Sentry, log aggregation, and uptime monitoring

Backup Strategy

Implement automated backup rotation and test restoration procedures

Performance Tuning

Optimize Gunicorn workers, database queries, and caching strategies

Scaling

Plan for horizontal scaling with load balancers and multiple application servers