Environment Variables
This document provides a comprehensive overview of all environment variables used in the Messages application. These variables are organized by service and functionality.
Core Application Configuration
Django Settings
| Variable |
Default |
Description |
Required |
DJANGO_CONFIGURATION |
Development |
Django configuration class to use (Development, Production, Test, etc.) |
Required |
DJANGO_SECRET_KEY |
None |
Secret key for cryptographic signing |
Required |
DJANGO_ALLOWED_HOSTS |
[] |
List of allowed hostnames |
Required |
DJANGO_SETTINGS_MODULE |
messages.settings |
Django settings module |
Required |
DJANGO_SUPERUSER_PASSWORD |
admin |
Default superuser password for development |
Dev |
DJANGO_DATA_DIR |
/data |
Base directory for data storage |
Optional |
Database Configuration
PostgreSQL (Main Database)
| Variable |
Default |
Description |
Required |
DATABASE_URL |
None |
Complete database URL (overrides individual DB_* vars) |
Optional |
DB_ENGINE |
django.db.backends.postgresql_psycopg2 |
Database engine |
Optional |
DB_HOST |
localhost |
Database hostname |
Optional |
DB_NAME |
messages |
Database name |
Optional |
DB_USER |
dbuser |
Database username |
Optional |
DB_PASSWORD |
dbpass |
Database password |
Optional |
DB_PORT |
5432 |
Database port |
Optional |
PostgreSQL (Keycloak)
| Variable |
Default |
Description |
Required |
POSTGRES_DB |
keycloak |
Keycloak database name |
Dev |
POSTGRES_USER |
user |
Keycloak database user |
Dev |
POSTGRES_PASSWORD |
pass |
Keycloak database password |
Dev |
Redis Configuration
| Variable |
Default |
Description |
Required |
REDIS_URL |
redis://redis:6379 |
Redis connection URL |
Optional |
CELERY_BROKER_URL |
redis://redis:6379 |
Celery message broker URL |
Optional |
CACHES_DEFAULT_TIMEOUT |
30 |
Default cache timeout in seconds |
Optional |
Elasticsearch Configuration
| Variable |
Default |
Description |
Required |
ELASTICSEARCH_URL |
["http://elasticsearch:9200"] |
Elasticsearch hosts list |
Optional |
ELASTICSEARCH_TIMEOUT |
20 |
Elasticsearch query timeout |
Optional |
ELASTICSEARCH_INDEX_THREADS |
True |
Enable thread indexing |
Optional |
Mail Processing Configuration
MTA Settings
| Variable |
Default |
Description |
Required |
MTA_OUT_HOST |
None |
Outbound SMTP server host |
Required |
MTA_OUT_SMTP_USERNAME |
None |
Outbound SMTP username |
Optional |
MTA_OUT_SMTP_PASSWORD |
None |
Outbound SMTP password |
Optional |
MTA_OUT_SMTP_USE_TLS |
True |
Use TLS for outbound SMTP |
Optional |
MDA_API_SECRET |
default-mda-api-secret |
Shared secret for MDA API |
Required |
MDA_API_BASE_URL |
None |
Base URL for MDA API |
Dev |
MTA-Out Specific
| Variable |
Default |
Description |
Required |
SMTP_RELAY_HOST |
None |
SMTP relay server |
Dev |
SMTP_USERNAME |
None |
SMTP authentication username |
Dev |
SMTP_PASSWORD |
None |
SMTP authentication password |
Dev |
Email Domain Configuration
| Variable |
Default |
Description |
Required |
MESSAGES_TESTDOMAIN |
localhost |
Test domain for development |
Dev |
MESSAGES_TESTDOMAIN_MAPPING_BASEDOMAIN |
gouv.fr |
Base domain mapping |
Dev |
MESSAGES_ACCEPT_ALL_EMAILS |
False |
Accept emails to any domain |
Optional |
DKIM Configuration
| Variable |
Default |
Description |
Required |
MESSAGES_DKIM_SELECTOR |
default |
DKIM selector |
Optional |
MESSAGES_DKIM_DOMAINS |
[] |
List of domains for DKIM signing |
Optional |
MESSAGES_DKIM_PRIVATE_KEY_B64 |
None |
Base64 encoded DKIM private key |
Optional |
MESSAGES_DKIM_PRIVATE_KEY_FILE |
None |
Path to DKIM private key file |
Optional |
Storage Configuration
S3-Compatible Storage
| Variable |
Default |
Description |
Required |
AWS_S3_ENDPOINT_URL |
None |
S3 endpoint URL |
Optional |
AWS_S3_ACCESS_KEY_ID |
None |
S3 access key |
Optional |
AWS_S3_SECRET_ACCESS_KEY |
None |
S3 secret key |
Optional |
AWS_S3_REGION_NAME |
None |
S3 region |
Optional |
AWS_STORAGE_BUCKET_NAME |
st-messages-media-storage |
S3 bucket name |
Optional |
AWS_S3_UPLOAD_POLICY_EXPIRATION |
86400 |
Upload policy expiration (24h) |
Optional |
MEDIA_BASE_URL |
None |
Base URL for media files |
Optional |
ITEM_FILE_MAX_SIZE |
5368709120 |
Max file size (5GB) |
Optional |
Static Files
| Variable |
Default |
Description |
Required |
STORAGES_STATICFILES_BACKEND |
whitenoise.storage.CompressedManifestStaticFilesStorage |
Static files storage backend |
Optional |
Authentication & Authorization
OIDC Configuration
| Variable |
Default |
Description |
Required |
OIDC_CREATE_USER |
False |
Automatically create users from OIDC |
Optional |
OIDC_RP_CLIENT_ID |
st_messages |
OIDC client ID |
Required |
OIDC_RP_CLIENT_SECRET |
None |
OIDC client secret |
Required |
OIDC_RP_SIGN_ALGO |
RS256 |
OIDC signing algorithm |
Optional |
OIDC_RP_SCOPES |
openid email |
OIDC scopes |
Optional |
OIDC_OP_JWKS_ENDPOINT |
None |
OIDC JWKS endpoint |
Required |
OIDC_OP_AUTHORIZATION_ENDPOINT |
None |
OIDC authorization endpoint |
Required |
OIDC_OP_TOKEN_ENDPOINT |
None |
OIDC token endpoint |
Required |
OIDC_OP_USER_ENDPOINT |
None |
OIDC user info endpoint |
Required |
OIDC_OP_LOGOUT_ENDPOINT |
None |
OIDC logout endpoint |
Optional |
OIDC Advanced Settings
| Variable |
Default |
Description |
Required |
OIDC_USE_NONCE |
True |
Use nonce in OIDC flow |
Optional |
OIDC_REDIRECT_REQUIRE_HTTPS |
False |
Require HTTPS for redirects |
Optional |
OIDC_REDIRECT_ALLOWED_HOSTS |
[] |
Allowed redirect hosts |
Optional |
OIDC_STORE_ID_TOKEN |
True |
Store ID token |
Optional |
OIDC_FALLBACK_TO_EMAIL_FOR_IDENTIFICATION |
True |
Use email as fallback identifier |
Optional |
OIDC_ALLOW_DUPLICATE_EMAILS |
False |
Allow duplicate emails (⚠️ Security risk) |
Optional |
OIDC_AUTH_REQUEST_EXTRA_PARAMS |
{} |
Extra parameters for auth requests |
Optional |
Authentication URLs
| Variable |
Default |
Description |
Required |
LOGIN_REDIRECT_URL |
None |
Post-login redirect URL |
Optional |
LOGIN_REDIRECT_URL_FAILURE |
None |
Login failure redirect URL |
Optional |
LOGOUT_REDIRECT_URL |
None |
Post-logout redirect URL |
Optional |
ALLOW_LOGOUT_GET_METHOD |
True |
Allow GET method for logout |
Optional |
User Mapping
| Variable |
Default |
Description |
Required |
USER_OIDC_ESSENTIAL_CLAIMS |
[] |
Essential OIDC claims |
Optional |
USER_OIDC_FIELDS_TO_FULLNAME |
["first_name", "last_name"] |
Fields for full name |
Optional |
USER_OIDC_FIELD_TO_SHORTNAME |
first_name |
Field for short name |
Optional |
Security & CORS
| Variable |
Default |
Description |
Required |
CORS_ALLOW_ALL_ORIGINS |
False |
Allow all CORS origins |
Optional |
CORS_ALLOWED_ORIGINS |
[] |
Specific allowed CORS origins |
Optional |
CORS_ALLOWED_ORIGIN_REGEXES |
[] |
Regex patterns for allowed origins |
Optional |
CSRF_TRUSTED_ORIGINS |
[] |
Trusted origins for CSRF |
Optional |
SERVER_TO_SERVER_API_TOKENS |
[] |
API tokens for server-to-server auth |
Optional |
Monitoring & Observability
Sentry
| Variable |
Default |
Description |
Required |
SENTRY_DSN |
None |
Sentry DSN for error tracking |
Optional |
PostHog
| Variable |
Default |
Description |
Required |
POSTHOG_KEY |
None |
PostHog analytics key |
Optional |
Logging
| Variable |
Default |
Description |
Required |
LOGGING_LEVEL_LOGGERS_ROOT |
INFO |
Root logger level |
Optional |
LOGGING_LEVEL_LOGGERS_APP |
INFO |
Application logger level |
Optional |
LOGGING_LEVEL_HANDLERS_CONSOLE |
INFO |
Console handler level |
Optional |
API Configuration
| Variable |
Default |
Description |
Required |
API_USERS_LIST_LIMIT |
5 |
Default limit for user list API |
Optional |
API_USERS_LIST_THROTTLE_RATE_SUSTAINED |
180/hour |
Sustained throttle rate |
Optional |
API_USERS_LIST_THROTTLE_RATE_BURST |
30/minute |
Burst throttle rate |
Optional |
OpenAPI Schema
| Variable |
Default |
Description |
Required |
SPECTACULAR_SETTINGS_ENABLE_DJANGO_DEPLOY_CHECK |
False |
Enable deploy check in OpenAPI |
Optional |
Frontend Configuration
| Variable |
Default |
Description |
Required |
FRONTEND_THEME |
None |
Frontend theme identifier |
Optional |
NEXT_PUBLIC_API_ORIGIN |
None |
Frontend API origin |
Dev |
NEXT_PUBLIC_S3_DOMAIN_REPLACE |
None |
S3 domain replacement for frontend |
Dev |
Development Tools
Crowdin (Translations)
| Variable |
Default |
Description |
Required |
CROWDIN_PERSONAL_TOKEN |
None |
Crowdin API token |
Dev |
CROWDIN_PROJECT_ID |
None |
Crowdin project ID |
Dev |
CROWDIN_BASE_PATH |
/app/src |
Base path for translations |
Dev |
Application Settings
Business Logic
| Variable |
Default |
Description |
Required |
TRASHBIN_CUTOFF_DAYS |
30 |
Days before permanent deletion |
Optional |
INVITATION_VALIDITY_DURATION |
604800 |
Invitation validity (7 days) |
Optional |
Internationalization
| Variable |
Default |
Description |
Required |
LANGUAGE_CODE |
en-us |
Default language code |
Optional |
Legend
- Required: Must be set for the application to function
- Dev: Required for development/testing environments
- Optional: Has sensible defaults, can be customized
Environment Files
The application uses environment files located in env.d/development/ for different services:
backend.dist - Main Django application settings
common.dist - Shared settings across services
postgresql.dist - PostgreSQL database configuration
kc_postgresql.dist - Keycloak database configuration
mta-in.dist - Inbound mail server settings
mta-out.dist - Outbound mail server settings
crowdin.dist - Translation service configuration
Security Notes
⚠️ Important Security Considerations:
- Never commit actual secrets - Use
.dist files as templates
- OIDC_ALLOW_DUPLICATE_EMAILS - Should remain
False in production
- CORS_ALLOW_ALL_ORIGINS - Should be
False in production
- DJANGO_SECRET_KEY - Must be unique and secret in production
- Database passwords - Use strong, unique passwords
- API tokens - Rotate regularly and keep secure
Production Deployment
For production deployments, ensure:
- All Required variables are properly configured
- Secrets are managed through secure secret management systems
- HTTPS is enforced for all external communications
- Database connections use SSL/TLS
- File storage uses appropriate access controls