Improve docker config
This commit is contained in:
195
.env.sample
195
.env.sample
@@ -1,59 +1,118 @@
|
||||
# ================================================================
|
||||
# UPDATED .env.example FILE
|
||||
# .env.example
|
||||
# BAKERY FORECASTING PLATFORM - ENVIRONMENT CONFIGURATION
|
||||
# Single source of truth - no duplication with docker-compose.yml
|
||||
# ================================================================
|
||||
|
||||
# ================================================================
|
||||
# ENVIRONMENT CONFIGURATION
|
||||
# ENVIRONMENT & BUILD SETTINGS
|
||||
# ================================================================
|
||||
|
||||
# Environment: development, staging, production, testing
|
||||
ENVIRONMENT=development
|
||||
DEBUG=true
|
||||
LOG_LEVEL=INFO
|
||||
|
||||
# Build configuration
|
||||
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
VCS_REF=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||
IMAGE_TAG=latest
|
||||
DOMAIN=localhost
|
||||
|
||||
# ================================================================
|
||||
# SERVICE PORTS (used by Docker Compose)
|
||||
# ================================================================
|
||||
|
||||
# Core services
|
||||
GATEWAY_PORT=8000
|
||||
AUTH_SERVICE_PORT=8001
|
||||
TRAINING_SERVICE_PORT=8002
|
||||
FORECASTING_SERVICE_PORT=8003
|
||||
DATA_SERVICE_PORT=8004
|
||||
TENANT_SERVICE_PORT=8005
|
||||
NOTIFICATION_SERVICE_PORT=8006
|
||||
|
||||
# Frontend
|
||||
DASHBOARD_PORT=3000
|
||||
MARKETING_PORT=3001
|
||||
|
||||
# Infrastructure
|
||||
REDIS_PORT=6379
|
||||
RABBITMQ_PORT=5672
|
||||
RABBITMQ_MANAGEMENT_PORT=15672
|
||||
|
||||
# Monitoring
|
||||
PROMETHEUS_PORT=9090
|
||||
GRAFANA_PORT=3002
|
||||
|
||||
# Development tools
|
||||
PGADMIN_PORT=5050
|
||||
REDIS_COMMANDER_PORT=8081
|
||||
|
||||
# ================================================================
|
||||
# CORE SERVICE SETTINGS (used by applications)
|
||||
# ================================================================
|
||||
|
||||
# Application metadata
|
||||
SERVICE_VERSION=1.0.0
|
||||
TIMEZONE=Europe/Madrid
|
||||
LOCALE=es_ES.UTF-8
|
||||
CURRENCY=EUR
|
||||
|
||||
# ================================================================
|
||||
# DATABASE CONFIGURATION
|
||||
# Each service has its own dedicated database
|
||||
# ================================================================
|
||||
|
||||
# Auth Service Database
|
||||
# PostgreSQL common settings
|
||||
POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=es_ES.UTF-8 --lc-ctype=es_ES.UTF-8
|
||||
|
||||
# Auth Database
|
||||
AUTH_DB_NAME=auth_db
|
||||
AUTH_DB_USER=auth_user
|
||||
AUTH_DB_PASSWORD=auth_pass123
|
||||
AUTH_DATABASE_URL=postgresql+asyncpg://auth_user:auth_pass123@auth-db:5432/auth_db
|
||||
|
||||
# Training Service Database
|
||||
# Training Database
|
||||
TRAINING_DB_NAME=training_db
|
||||
TRAINING_DB_USER=training_user
|
||||
TRAINING_DB_PASSWORD=training_pass123
|
||||
TRAINING_DATABASE_URL=postgresql+asyncpg://training_user:training_pass123@training-db:5432/training_db
|
||||
|
||||
# Forecasting Service Database
|
||||
# Forecasting Database
|
||||
FORECASTING_DB_NAME=forecasting_db
|
||||
FORECASTING_DB_USER=forecasting_user
|
||||
FORECASTING_DB_PASSWORD=forecasting_pass123
|
||||
FORECASTING_DATABASE_URL=postgresql+asyncpg://forecasting_user:forecasting_pass123@forecasting-db:5432/forecasting_db
|
||||
|
||||
# Data Service Database
|
||||
# Data Database
|
||||
DATA_DB_NAME=data_db
|
||||
DATA_DB_USER=data_user
|
||||
DATA_DB_PASSWORD=data_pass123
|
||||
DATA_DATABASE_URL=postgresql+asyncpg://data_user:data_pass123@data-db:5432/data_db
|
||||
|
||||
# Tenant Service Database
|
||||
# Tenant Database
|
||||
TENANT_DB_NAME=tenant_db
|
||||
TENANT_DB_USER=tenant_user
|
||||
TENANT_DB_PASSWORD=tenant_pass123
|
||||
TENANT_DATABASE_URL=postgresql+asyncpg://tenant_user:tenant_pass123@tenant-db:5432/tenant_db
|
||||
|
||||
# Notification Service Database
|
||||
# Notification Database
|
||||
NOTIFICATION_DB_NAME=notification_db
|
||||
NOTIFICATION_DB_USER=notification_user
|
||||
NOTIFICATION_DB_PASSWORD=notification_pass123
|
||||
NOTIFICATION_DATABASE_URL=postgresql+asyncpg://notification_user:notification_pass123@notification-db:5432/notification_db
|
||||
|
||||
# Database Connection Pool Settings
|
||||
DB_POOL_SIZE=10
|
||||
DB_MAX_OVERFLOW=20
|
||||
DB_POOL_TIMEOUT=30
|
||||
DB_POOL_RECYCLE=3600
|
||||
DB_ECHO=false
|
||||
|
||||
# ================================================================
|
||||
# REDIS CONFIGURATION
|
||||
# Each service uses a different Redis database
|
||||
# ================================================================
|
||||
|
||||
REDIS_URL=redis://redis:6379
|
||||
REDIS_PASSWORD=redis_pass123
|
||||
REDIS_MAX_MEMORY=512mb
|
||||
REDIS_URL=redis://:redis_pass123@redis:6379
|
||||
REDIS_MAX_CONNECTIONS=50
|
||||
|
||||
# Redis Database Assignments:
|
||||
# Redis Database Assignments (used by standardized config)
|
||||
# 0 - Auth Service
|
||||
# 1 - Training Service
|
||||
# 1 - Training Service
|
||||
# 2 - Forecasting Service
|
||||
# 3 - Data Service
|
||||
# 4 - Tenant Service
|
||||
@@ -64,18 +123,20 @@ REDIS_MAX_CONNECTIONS=50
|
||||
# RABBITMQ CONFIGURATION
|
||||
# ================================================================
|
||||
|
||||
RABBITMQ_USER=bakery
|
||||
RABBITMQ_PASSWORD=forecast123
|
||||
RABBITMQ_VHOST=/
|
||||
RABBITMQ_ERLANG_COOKIE=bakery-secret-cookie-change-in-production
|
||||
RABBITMQ_URL=amqp://bakery:forecast123@rabbitmq:5672/
|
||||
RABBITMQ_EXCHANGE=bakery_events
|
||||
RABBITMQ_QUEUE_PREFIX=bakery
|
||||
RABBITMQ_RETRY_ATTEMPTS=3
|
||||
RABBITMQ_RETRY_DELAY=5
|
||||
|
||||
# ================================================================
|
||||
# AUTHENTICATION & SECURITY
|
||||
# ================================================================
|
||||
|
||||
# JWT Configuration (CHANGE IN PRODUCTION!)
|
||||
JWT_SECRET_KEY=your-super-secret-jwt-key-change-in-production-very-long-and-secure
|
||||
JWT_SECRET_KEY=your-super-secret-jwt-key-change-in-production-min-32-characters-long
|
||||
JWT_ALGORITHM=HS256
|
||||
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
|
||||
JWT_REFRESH_TOKEN_EXPIRE_DAYS=7
|
||||
@@ -100,7 +161,7 @@ LOCKOUT_DURATION_MINUTES=30
|
||||
# CORS & API CONFIGURATION
|
||||
# ================================================================
|
||||
|
||||
CORS_ORIGINS=http://localhost:3000,http://localhost:3001,http://127.0.0.1:3000
|
||||
CORS_ORIGINS=http://localhost:3000,http://localhost:3001,http://127.0.0.1:3000,https://panaderia.vercel.app
|
||||
CORS_ALLOW_CREDENTIALS=true
|
||||
|
||||
# Rate Limiting
|
||||
@@ -113,15 +174,15 @@ RATE_LIMIT_BURST=10
|
||||
API_DOCS_ENABLED=true
|
||||
|
||||
# ================================================================
|
||||
# SERVICE URLS
|
||||
# SERVICE DISCOVERY URLS (used by standardized config)
|
||||
# ================================================================
|
||||
|
||||
GATEWAY_URL=http://gateway:8000
|
||||
AUTH_SERVICE_URL=http://auth-service:8000
|
||||
TENANT_SERVICE_URL=http://tenant-service:8000
|
||||
TRAINING_SERVICE_URL=http://training-service:8000
|
||||
FORECASTING_SERVICE_URL=http://forecasting-service:8000
|
||||
DATA_SERVICE_URL=http://data-service:8000
|
||||
TENANT_SERVICE_URL=http://tenant-service:8000
|
||||
NOTIFICATION_SERVICE_URL=http://notification-service:8000
|
||||
|
||||
# HTTP Client Settings
|
||||
@@ -130,29 +191,37 @@ HTTP_RETRIES=3
|
||||
HTTP_RETRY_DELAY=1.0
|
||||
|
||||
# ================================================================
|
||||
# EXTERNAL APIS & INTEGRATIONS
|
||||
# EXTERNAL APIS
|
||||
# ================================================================
|
||||
|
||||
# Spanish Weather Service (AEMET)
|
||||
AEMET_API_KEY=your-aemet-api-key-here
|
||||
AEMET_API_KEY=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1YWxmYXJvQGdtYWlsLmNvbSIsImp0aSI6ImRjZWVmNTEwLTdmYzEtNGMxNy1hODZkLWQ4NzdlZDc5ZDllNyIsImlzcyI6IkFFTUVUIiwiaWF0IjoxNzUyODMwMDg3LCJ1c2VySWQiOiJkY2VlZjUxMC03ZmMxLTRjMTctYTg2ZC1kODc3ZWQ3OWQ5ZTciLCJyb2xlIjoiIn0.C047gaiEhWhH4ItDgkHSwg8HzKTzw87TOPRTRf8j-2w
|
||||
AEMET_BASE_URL=https://opendata.aemet.es/opendata
|
||||
AEMET_TIMEOUT=30
|
||||
AEMET_RETRY_ATTEMPTS=3
|
||||
|
||||
# Madrid Open Data Platform
|
||||
MADRID_OPENDATA_API_KEY=your-madrid-opendata-key-here
|
||||
MADRID_OPENDATA_BASE_URL=https://datos.madrid.es
|
||||
MADRID_OPENDATA_TIMEOUT=30
|
||||
|
||||
# Email Configuration (Gmail example)
|
||||
# ================================================================
|
||||
# EMAIL CONFIGURATION
|
||||
# ================================================================
|
||||
|
||||
SMTP_HOST=smtp.gmail.com
|
||||
SMTP_PORT=587
|
||||
SMTP_USER=your-email@gmail.com
|
||||
SMTP_PASSWORD=your-email-app-password
|
||||
SMTP_PASSWORD=your-app-specific-password
|
||||
SMTP_TLS=true
|
||||
SMTP_SSL=false
|
||||
DEFAULT_FROM_EMAIL=noreply@bakeryforecast.es
|
||||
DEFAULT_FROM_NAME=Bakery Forecast
|
||||
|
||||
# WhatsApp API (Twilio example)
|
||||
# ================================================================
|
||||
# WHATSAPP/TWILIO CONFIGURATION
|
||||
# ================================================================
|
||||
|
||||
WHATSAPP_API_KEY=your-whatsapp-api-key-here
|
||||
WHATSAPP_BASE_URL=https://api.twilio.com
|
||||
WHATSAPP_FROM_NUMBER=whatsapp:+14155238886
|
||||
@@ -173,6 +242,10 @@ MAX_CONCURRENT_TRAINING_JOBS=3
|
||||
MIN_TRAINING_DATA_DAYS=30
|
||||
TRAINING_BATCH_SIZE=1000
|
||||
|
||||
# Resource Limits (used by Docker Compose)
|
||||
TRAINING_MEMORY_LIMIT=2G
|
||||
TRAINING_CPU_LIMIT=1.5
|
||||
|
||||
# Prophet Configuration
|
||||
PROPHET_SEASONALITY_MODE=additive
|
||||
PROPHET_CHANGEPOINT_PRIOR_SCALE=0.05
|
||||
@@ -194,9 +267,6 @@ MIN_HISTORICAL_DAYS=60
|
||||
PREDICTION_CONFIDENCE_THRESHOLD=0.8
|
||||
|
||||
# Spanish Business Context
|
||||
TIMEZONE=Europe/Madrid
|
||||
LOCALE=es_ES.UTF-8
|
||||
CURRENCY=EUR
|
||||
BUSINESS_HOUR_START=7
|
||||
BUSINESS_HOUR_END=20
|
||||
|
||||
@@ -260,23 +330,23 @@ LOG_RETENTION_DAYS=30
|
||||
|
||||
# Metrics & Monitoring
|
||||
PROMETHEUS_ENABLED=true
|
||||
PROMETHEUS_PORT=9090
|
||||
|
||||
# Tracing (disabled by default)
|
||||
JAEGER_ENABLED=false
|
||||
JAEGER_AGENT_HOST=localhost
|
||||
JAEGER_AGENT_PORT=6831
|
||||
PROMETHEUS_RETENTION=200h
|
||||
|
||||
# Health Checks
|
||||
HEALTH_CHECK_TIMEOUT=30
|
||||
HEALTH_CHECK_INTERVAL=30
|
||||
|
||||
# Grafana Configuration
|
||||
GRAFANA_ADMIN_USER=admin
|
||||
GRAFANA_ADMIN_PASSWORD=admin123
|
||||
GRAFANA_SECRET_KEY=grafana-secret-key-change-in-production
|
||||
GRAFANA_ROOT_URL=http://localhost:3002/
|
||||
|
||||
# ================================================================
|
||||
# DATA RETENTION & CLEANUP
|
||||
# ================================================================
|
||||
|
||||
DATA_RETENTION_DAYS=365
|
||||
LOG_RETENTION_DAYS=90
|
||||
METRIC_RETENTION_DAYS=90
|
||||
TEMP_FILE_CLEANUP_HOURS=24
|
||||
|
||||
@@ -347,6 +417,26 @@ DELIVERY_TRACKING_ENABLED=true
|
||||
OPEN_TRACKING_ENABLED=true
|
||||
CLICK_TRACKING_ENABLED=true
|
||||
|
||||
# ================================================================
|
||||
# FRONTEND CONFIGURATION
|
||||
# ================================================================
|
||||
|
||||
# Frontend URLs (used by Docker Compose build args)
|
||||
FRONTEND_API_URL=http://localhost:8000/api/v1
|
||||
FRONTEND_WS_URL=ws://localhost:8000/ws
|
||||
|
||||
# ================================================================
|
||||
# DEVELOPMENT TOOLS CONFIGURATION
|
||||
# ================================================================
|
||||
|
||||
# pgAdmin
|
||||
PGADMIN_EMAIL=admin@bakery.local
|
||||
PGADMIN_PASSWORD=admin123
|
||||
|
||||
# Redis Commander
|
||||
REDIS_COMMANDER_USER=admin
|
||||
REDIS_COMMANDER_PASSWORD=admin123
|
||||
|
||||
# ================================================================
|
||||
# COMPLIANCE & GDPR
|
||||
# ================================================================
|
||||
@@ -419,4 +509,23 @@ TRAINING_WORKER_COUNT=1
|
||||
|
||||
# Support & Contact
|
||||
SUPPORT_EMAIL=soporte@bakeryforecast.es
|
||||
INVOICE_LANGUAGE=es
|
||||
INVOICE_LANGUAGE=es
|
||||
|
||||
# ================================================================
|
||||
# NOTES FOR CONFIGURATION MANAGEMENT
|
||||
# ================================================================
|
||||
|
||||
# This .env file is the SINGLE SOURCE OF TRUTH for all configuration.
|
||||
# Docker Compose uses these variables via ${VARIABLE_NAME} substitution.
|
||||
# Application services load these via env_file: .env in docker-compose.yml
|
||||
# No duplication between .env and docker-compose.yml environment sections.
|
||||
|
||||
# To override for different environments:
|
||||
# 1. Copy this file: cp .env .env.production
|
||||
# 2. Modify values in .env.production
|
||||
# 3. Use: docker-compose --env-file .env.production up -d
|
||||
|
||||
# For sensitive values in production:
|
||||
# 1. Use Docker secrets or external secret management
|
||||
# 2. Override via environment variables: REDIS_PASSWORD=secret docker-compose up
|
||||
# 3. Use .env.local (gitignored) for local overrides
|
||||
Reference in New Issue
Block a user