Variáveis de Ambiente
Referência completa de todas as variáveis de configuração do Sinapse
Este documento lista todas as variáveis de ambiente disponíveis para configurar o Sinapse, organizadas por categoria.
| Variável | Tipo | Padrão | Descrição |
|---|
APP_NAME | string | Sinapse | Nome da aplicação |
APP_VERSION | string | 1.0.0 | Versão da aplicação |
ENVIRONMENT | string | development | Ambiente: development, staging, production |
DEBUG | boolean | false | Ativa modo debug (NUNCA em produção) |
LOG_LEVEL | string | INFO | Nível de log: DEBUG, INFO, WARNING, ERROR |
PORT | integer | 8000 | Porta da aplicação |
HOST | string | 0.0.0.0 | Host de bind |
WORKERS | integer | 4 | Número de workers Uvicorn |
| Variável | Tipo | Padrão | Descrição |
|---|
BASE_URL | string | http://localhost:8000 | URL base da aplicação |
FRONTEND_URL | string | http://localhost:3000 | URL do frontend |
ALLOWED_HOSTS | list | ["localhost"] | Hosts permitidos |
TRUSTED_HOSTS | list | ["localhost"] | Hosts confiáveis |
| Variável | Tipo | Padrão | Descrição |
|---|
SECRET_KEY | string | OBRIGATÓRIO | Chave secreta principal (32+ chars) |
MASTER_KEY | string | - | Chave para criar primeiro admin |
JWT_SECRET_KEY | string | OBRIGATÓRIO | Chave para tokens JWT |
JWT_ALGORITHM | string | HS256 | Algoritmo JWT: HS256, RS256 |
JWT_ACCESS_TOKEN_EXPIRE_MINUTES | integer | 60 | Duração do access token |
JWT_REFRESH_TOKEN_EXPIRE_DAYS | integer | 7 | Duração do refresh token |
| Variável | Tipo | Padrão | Descrição |
|---|
CORS_ORIGINS | list | ["http://localhost:3000"] | Origens permitidas |
CORS_ALLOW_CREDENTIALS | boolean | true | Permitir cookies/auth |
CORS_ALLOW_METHODS | list | ["*"] | Métodos HTTP permitidos |
CORS_ALLOW_HEADERS | list | ["*"] | Headers permitidos |
CORS_MAX_AGE | integer | 3600 | Cache preflight (segundos) |
| Variável | Tipo | Padrão | Descrição |
|---|
RATE_LIMIT_ENABLED | boolean | true | Ativar rate limiting |
RATE_LIMIT_PER_MINUTE | integer | 60 | Requisições por minuto |
RATE_LIMIT_PER_HOUR | integer | 1000 | Requisições por hora |
RATE_LIMIT_BURST | integer | 10 | Burst permitido |
| Variável | Tipo | Padrão | Descrição |
|---|
SECURITY_MAX_LOGIN_ATTEMPTS | integer | 5 | Tentativas antes de bloquear |
SECURITY_LOCKOUT_DURATION | integer | 900 | Duração do bloqueio (segundos) |
SECURITY_PROGRESSIVE_DELAY | boolean | true | Delay progressivo em falhas |
SECURITY_MAX_IP_ATTEMPTS_HOUR | integer | 20 | Tentativas por IP/hora |
SECURITY_IP_BLOCK_DURATION | integer | 3600 | Bloqueio de IP (segundos) |
| Variável | Tipo | Padrão | Descrição |
|---|
DATABASE_URL | string | OBRIGATÓRIO | URL completa de conexão |
DB_HOST | string | localhost | Host do PostgreSQL |
DB_PORT | integer | 5432 | Porta do PostgreSQL |
DB_NAME | string | sinapse_db | Nome do banco |
DB_USER | string | sinapse | Usuário do banco |
DB_PASSWORD | string | OBRIGATÓRIO | Senha do banco |
DB_POOL_SIZE | integer | 20 | Tamanho do pool |
DB_MAX_OVERFLOW | integer | 40 | Overflow máximo |
DB_POOL_TIMEOUT | integer | 30 | Timeout do pool (segundos) |
DB_ECHO | boolean | false | Log de queries SQL |
| Variável | Tipo | Padrão | Descrição |
|---|
REDIS_URL | string | redis://localhost:6379/0 | URL do Redis |
REDIS_HOST | string | localhost | Host do Redis |
REDIS_PORT | integer | 6379 | Porta do Redis |
REDIS_DB | integer | 0 | Database do Redis |
REDIS_PASSWORD | string | - | Senha do Redis |
REDIS_POOL_SIZE | integer | 10 | Tamanho do pool |
REDIS_DECODE_RESPONSES | boolean | true | Decodificar respostas |
| Variável | Tipo | Padrão | Descrição |
|---|
EMAIL_ENABLED | boolean | false | Ativar envio de emails |
SMTP_HOST | string | localhost | Servidor SMTP |
SMTP_PORT | integer | 587 | Porta SMTP |
SMTP_USER | string | - | Usuário SMTP |
SMTP_PASSWORD | string | - | Senha SMTP |
SMTP_TLS | boolean | true | Usar TLS |
SMTP_SSL | boolean | false | Usar SSL |
EMAIL_FROM | string | [email protected] | Email remetente |
EMAIL_FROM_NAME | string | Sinapse | Nome remetente |
| Variável | Tipo | Padrão | Descrição |
|---|
SMS_ENABLED | boolean | false | Ativar envio de SMS |
SMS_PROVIDER | string | twilio | Provedor: twilio, aws_sns |
SMS_ACCOUNT_SID | string | - | Twilio Account SID |
SMS_AUTH_TOKEN | string | - | Twilio Auth Token |
SMS_FROM_NUMBER | string | - | Número remetente |
| Variável | Tipo | Padrão | Descrição |
|---|
INIT_ADMIN_EMAIL | string | - | Email do admin inicial |
INIT_ADMIN_PASSWORD | string | - | Senha do admin inicial |
INIT_ADMIN_NAME | string | Administrador | Nome do admin inicial |
INIT_TOKEN_EXPIRATION | integer | 3600 | Duração token init (segundos) |
| Variável | Tipo | Padrão | Descrição |
|---|
ENABLED_MODULES | string | all | Módulos ativos: all ou lista separada por vírgula |
MODULE_AUTH_ENABLED | boolean | true | Módulo de autenticação |
MODULE_USUARIOS_ENABLED | boolean | true | Módulo de usuários |
MODULE_AGRAVOS_ENABLED | boolean | true | Módulo de agravos |
MODULE_NOTICIAS_ENABLED | boolean | true | Módulo de notícias |
| Variável | Tipo | Padrão | Descrição |
|---|
AGRAVOS_CACHE_TTL | integer | 3600 | TTL do cache (segundos) |
AGRAVOS_MAX_BULK_SIZE | integer | 1000 | Máximo importação bulk |
AGRAVOS_ANONIMIZAR_PRODUCAO | boolean | true | Anonimizar em produção |
AGRAVOS_ENABLE_GEOLOCATION | boolean | true | Ativar geolocalização |
| Variável | Tipo | Padrão | Descrição |
|---|
CELERY_BROKER_URL | string | redis://localhost:6379/1 | URL do broker |
CELERY_RESULT_BACKEND | string | redis://localhost:6379/2 | Backend de resultados |
CELERY_TASK_SERIALIZER | string | json | Serializador |
CELERY_RESULT_SERIALIZER | string | json | Serializador de resultados |
CELERY_ACCEPT_CONTENT | list | ["json"] | Formatos aceitos |
CELERY_TIMEZONE | string | America/Sao_Paulo | Timezone |
CELERY_ENABLE_UTC | boolean | true | Usar UTC |
| Variável | Tipo | Padrão | Descrição |
|---|
PROMETHEUS_ENABLED | boolean | true | Ativar métricas |
PROMETHEUS_PORT | integer | 9090 | Porta das métricas |
PROMETHEUS_PATH | string | /metrics | Path das métricas |
| Variável | Tipo | Padrão | Descrição |
|---|
SENTRY_ENABLED | boolean | false | Ativar Sentry |
SENTRY_DSN | string | - | DSN do Sentry |
SENTRY_ENVIRONMENT | string | production | Ambiente no Sentry |
SENTRY_TRACES_SAMPLE_RATE | float | 0.1 | Taxa de amostragem |
| Variável | Tipo | Padrão | Descrição |
|---|
OTEL_ENABLED | boolean | false | Ativar OpenTelemetry |
OTEL_EXPORTER_OTLP_ENDPOINT | string | http://localhost:4317 | Endpoint OTLP |
OTEL_SERVICE_NAME | string | sinapse-api | Nome do serviço |
OTEL_TRACES_EXPORTER | string | otlp | Exportador de traces |
| Variável | Tipo | Padrão | Descrição |
|---|
SINAN_API_URL | string | - | URL da API SINAN |
SINAN_API_KEY | string | - | Chave API SINAN |
ESUS_API_URL | string | - | URL da API e-SUS |
ESUS_API_TOKEN | string | - | Token e-SUS |
IBGE_API_URL | string | https://servicodados.ibge.gov.br/api/v1 | API IBGE |
| Variável | Tipo | Padrão | Descrição |
|---|
STORAGE_TYPE | string | local | Tipo: local, s3, azure |
STORAGE_LOCAL_PATH | string | ./uploads | Path local |
AWS_ACCESS_KEY_ID | string | - | AWS Access Key |
AWS_SECRET_ACCESS_KEY | string | - | AWS Secret Key |
AWS_S3_BUCKET | string | - | Bucket S3 |
AWS_S3_REGION | string | us-east-1 | Região S3 |
| Variável | Tipo | Padrão | Descrição |
|---|
TESTING | boolean | false | Modo de teste |
TEST_DATABASE_URL | string | - | URL banco de testes |
MOCK_EXTERNAL_APIS | boolean | false | Mock APIs externas |
SQLALCHEMY_WARN_20 | boolean | true | Avisos SQLAlchemy 2.0 |
PYTHONPATH | string | . | Path Python |
# Aplicação
APP_NAME=Sinapse
ENVIRONMENT=development
DEBUG=true
LOG_LEVEL=DEBUG
# Segurança
SECRET_KEY=dev_secret_key_apenas_para_desenvolvimento_32chars
JWT_SECRET_KEY=outra_chave_secreta_para_jwt_desenvolvimento
MASTER_KEY=master_key_desenvolvimento
# Banco de Dados
DATABASE_URL=postgresql+asyncpg://sinapse:sinapse123@localhost:5432/sinapse_dev
DB_ECHO=true
# Redis
REDIS_URL=redis://localhost:6379/0
# CORS
CORS_ORIGINS=["http://localhost:3000","http://localhost:8000"]
# Inicialização
INIT_ADMIN_EMAIL=[email protected]
INIT_ADMIN_PASSWORD=Admin123!
INIT_ADMIN_NAME=Administrador Dev
# Módulos
ENABLED_MODULES=all
# Aplicação
APP_NAME=Sinapse
ENVIRONMENT=production
DEBUG=false
LOG_LEVEL=WARNING
WORKERS=8
# Segurança (usar secrets manager em produção real)
SECRET_KEY=${SECRET_KEY}
JWT_SECRET_KEY=${JWT_SECRET_KEY}
JWT_ALGORITHM=RS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
# Banco de Dados
DATABASE_URL=${DATABASE_URL}
DB_POOL_SIZE=50
DB_MAX_OVERFLOW=100
# Redis
REDIS_URL=${REDIS_URL}
REDIS_PASSWORD=${REDIS_PASSWORD}
# CORS
CORS_ORIGINS=["https://app.sinapse.saude.gov.br"]
# Rate Limiting
RATE_LIMIT_ENABLED=true
RATE_LIMIT_PER_HOUR=10000
# Monitoramento
PROMETHEUS_ENABLED=true
SENTRY_ENABLED=true
SENTRY_DSN=${SENTRY_DSN}
# Email
EMAIL_ENABLED=true
SMTP_HOST=smtp.sendgrid.net
SMTP_PORT=587
SMTP_USER=apikey
SMTP_PASSWORD=${SENDGRID_API_KEY}
EMAIL_FROM=[email protected]
# Storage
STORAGE_TYPE=s3
AWS_S3_BUCKET=sinapse-prod-uploads
AWS_S3_REGION=sa-east-1
O Sinapse valida todas as variáveis obrigatórias na inicialização:
# core/config.py
from pydantic_settings import BaseSettings
from pydantic import Field, validator
class Settings(BaseSettings):
# Aplicação
app_name: str = Field(default="Sinapse")
environment: str = Field(default="development")
debug: bool = Field(default=False)
# Segurança (obrigatórias)
secret_key: str = Field(..., min_length=32)
jwt_secret_key: str = Field(..., min_length=32)
# Banco (obrigatório)
database_url: str = Field(...)
@validator('environment')
def validate_environment(cls, v):
allowed = ['development', 'staging', 'production']
if v not in allowed:
raise ValueError(f'environment deve ser um de: {allowed}')
return v
@validator('debug')
def validate_debug(cls, v, values):
if v and values.get('environment') == 'production':
raise ValueError('DEBUG não pode ser True em produção')
return v
class Config:
env_file = ".env"
case_sensitive = False
Desenvolvimento: Use arquivo .env local com valores de desenvolvimento. Nunca commite este arquivo!
Staging/Produção: Use gerenciadores de secrets como AWS Secrets Manager, Azure Key Vault ou HashiCorp Vault.
Segurança: NUNCA exponha variáveis sensíveis em logs, erros ou respostas de API.
#!/bin/bash
# validate-env.sh
required_vars=(
"SECRET_KEY"
"JWT_SECRET_KEY"
"DATABASE_URL"
)
missing_vars=()
for var in "${required_vars[@]}"; do
if [ -z "${!var}" ]; then
missing_vars+=("$var")
fi
done
if [ ${#missing_vars[@]} -ne 0 ]; then
echo "Variáveis obrigatórias faltando:"
printf '%s\n' "${missing_vars[@]}"
exit 1
fi
echo "Todas variáveis obrigatórias configuradas!"
Mantenha este documento atualizado ao adicionar novas variáveis de configuração ao sistema.