Logo

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.

Configuração Básica

Aplicação

VariávelTipoPadrãoDescrição
APP_NAMEstringSinapseNome da aplicação
APP_VERSIONstring1.0.0Versão da aplicação
ENVIRONMENTstringdevelopmentAmbiente: development, staging, production
DEBUGbooleanfalseAtiva modo debug (NUNCA em produção)
LOG_LEVELstringINFONível de log: DEBUG, INFO, WARNING, ERROR
PORTinteger8000Porta da aplicação
HOSTstring0.0.0.0Host de bind
WORKERSinteger4Número de workers Uvicorn

URLs e Domínios

VariávelTipoPadrãoDescrição
BASE_URLstringhttp://localhost:8000URL base da aplicação
FRONTEND_URLstringhttp://localhost:3000URL do frontend
ALLOWED_HOSTSlist["localhost"]Hosts permitidos
TRUSTED_HOSTSlist["localhost"]Hosts confiáveis

Segurança

Chaves e Tokens

VariávelTipoPadrãoDescrição
SECRET_KEYstringOBRIGATÓRIOChave secreta principal (32+ chars)
MASTER_KEYstring-Chave para criar primeiro admin
JWT_SECRET_KEYstringOBRIGATÓRIOChave para tokens JWT
JWT_ALGORITHMstringHS256Algoritmo JWT: HS256, RS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTESinteger60Duração do access token
JWT_REFRESH_TOKEN_EXPIRE_DAYSinteger7Duração do refresh token

CORS

VariávelTipoPadrãoDescrição
CORS_ORIGINSlist["http://localhost:3000"]Origens permitidas
CORS_ALLOW_CREDENTIALSbooleantruePermitir cookies/auth
CORS_ALLOW_METHODSlist["*"]Métodos HTTP permitidos
CORS_ALLOW_HEADERSlist["*"]Headers permitidos
CORS_MAX_AGEinteger3600Cache preflight (segundos)

Rate Limiting

VariávelTipoPadrãoDescrição
RATE_LIMIT_ENABLEDbooleantrueAtivar rate limiting
RATE_LIMIT_PER_MINUTEinteger60Requisições por minuto
RATE_LIMIT_PER_HOURinteger1000Requisições por hora
RATE_LIMIT_BURSTinteger10Burst permitido

Segurança de Login

VariávelTipoPadrãoDescrição
SECURITY_MAX_LOGIN_ATTEMPTSinteger5Tentativas antes de bloquear
SECURITY_LOCKOUT_DURATIONinteger900Duração do bloqueio (segundos)
SECURITY_PROGRESSIVE_DELAYbooleantrueDelay progressivo em falhas
SECURITY_MAX_IP_ATTEMPTS_HOURinteger20Tentativas por IP/hora
SECURITY_IP_BLOCK_DURATIONinteger3600Bloqueio de IP (segundos)

Banco de Dados

PostgreSQL Principal

VariávelTipoPadrãoDescrição
DATABASE_URLstringOBRIGATÓRIOURL completa de conexão
DB_HOSTstringlocalhostHost do PostgreSQL
DB_PORTinteger5432Porta do PostgreSQL
DB_NAMEstringsinapse_dbNome do banco
DB_USERstringsinapseUsuário do banco
DB_PASSWORDstringOBRIGATÓRIOSenha do banco
DB_POOL_SIZEinteger20Tamanho do pool
DB_MAX_OVERFLOWinteger40Overflow máximo
DB_POOL_TIMEOUTinteger30Timeout do pool (segundos)
DB_ECHObooleanfalseLog de queries SQL

Redis Cache

VariávelTipoPadrãoDescrição
REDIS_URLstringredis://localhost:6379/0URL do Redis
REDIS_HOSTstringlocalhostHost do Redis
REDIS_PORTinteger6379Porta do Redis
REDIS_DBinteger0Database do Redis
REDIS_PASSWORDstring-Senha do Redis
REDIS_POOL_SIZEinteger10Tamanho do pool
REDIS_DECODE_RESPONSESbooleantrueDecodificar respostas

Comunicação

Email (SMTP)

VariávelTipoPadrãoDescrição
EMAIL_ENABLEDbooleanfalseAtivar envio de emails
SMTP_HOSTstringlocalhostServidor SMTP
SMTP_PORTinteger587Porta SMTP
SMTP_USERstring-Usuário SMTP
SMTP_PASSWORDstring-Senha SMTP
SMTP_TLSbooleantrueUsar TLS
SMTP_SSLbooleanfalseUsar SSL
EMAIL_FROMstring[email protected]Email remetente
EMAIL_FROM_NAMEstringSinapseNome remetente

SMS

VariávelTipoPadrãoDescrição
SMS_ENABLEDbooleanfalseAtivar envio de SMS
SMS_PROVIDERstringtwilioProvedor: twilio, aws_sns
SMS_ACCOUNT_SIDstring-Twilio Account SID
SMS_AUTH_TOKENstring-Twilio Auth Token
SMS_FROM_NUMBERstring-Número remetente

Inicialização do Sistema

Criação do Primeiro Admin

VariávelTipoPadrãoDescrição
INIT_ADMIN_EMAILstring-Email do admin inicial
INIT_ADMIN_PASSWORDstring-Senha do admin inicial
INIT_ADMIN_NAMEstringAdministradorNome do admin inicial
INIT_TOKEN_EXPIRATIONinteger3600Duração token init (segundos)

Módulos

Habilitação de Módulos

VariávelTipoPadrãoDescrição
ENABLED_MODULESstringallMódulos ativos: all ou lista separada por vírgula
MODULE_AUTH_ENABLEDbooleantrueMódulo de autenticação
MODULE_USUARIOS_ENABLEDbooleantrueMódulo de usuários
MODULE_AGRAVOS_ENABLEDbooleantrueMódulo de agravos
MODULE_NOTICIAS_ENABLEDbooleantrueMódulo de notícias

Configurações do Módulo de Agravos

VariávelTipoPadrãoDescrição
AGRAVOS_CACHE_TTLinteger3600TTL do cache (segundos)
AGRAVOS_MAX_BULK_SIZEinteger1000Máximo importação bulk
AGRAVOS_ANONIMIZAR_PRODUCAObooleantrueAnonimizar em produção
AGRAVOS_ENABLE_GEOLOCATIONbooleantrueAtivar geolocalização

Filas e Workers

Celery

VariávelTipoPadrãoDescrição
CELERY_BROKER_URLstringredis://localhost:6379/1URL do broker
CELERY_RESULT_BACKENDstringredis://localhost:6379/2Backend de resultados
CELERY_TASK_SERIALIZERstringjsonSerializador
CELERY_RESULT_SERIALIZERstringjsonSerializador de resultados
CELERY_ACCEPT_CONTENTlist["json"]Formatos aceitos
CELERY_TIMEZONEstringAmerica/Sao_PauloTimezone
CELERY_ENABLE_UTCbooleantrueUsar UTC

Monitoramento

Prometheus

VariávelTipoPadrãoDescrição
PROMETHEUS_ENABLEDbooleantrueAtivar métricas
PROMETHEUS_PORTinteger9090Porta das métricas
PROMETHEUS_PATHstring/metricsPath das métricas

Sentry

VariávelTipoPadrãoDescrição
SENTRY_ENABLEDbooleanfalseAtivar Sentry
SENTRY_DSNstring-DSN do Sentry
SENTRY_ENVIRONMENTstringproductionAmbiente no Sentry
SENTRY_TRACES_SAMPLE_RATEfloat0.1Taxa de amostragem

OpenTelemetry

VariávelTipoPadrãoDescrição
OTEL_ENABLEDbooleanfalseAtivar OpenTelemetry
OTEL_EXPORTER_OTLP_ENDPOINTstringhttp://localhost:4317Endpoint OTLP
OTEL_SERVICE_NAMEstringsinapse-apiNome do serviço
OTEL_TRACES_EXPORTERstringotlpExportador de traces

Integrações Externas

APIs de Saúde

VariávelTipoPadrãoDescrição
SINAN_API_URLstring-URL da API SINAN
SINAN_API_KEYstring-Chave API SINAN
ESUS_API_URLstring-URL da API e-SUS
ESUS_API_TOKENstring-Token e-SUS
IBGE_API_URLstringhttps://servicodados.ibge.gov.br/api/v1API IBGE

Storage

VariávelTipoPadrãoDescrição
STORAGE_TYPEstringlocalTipo: local, s3, azure
STORAGE_LOCAL_PATHstring./uploadsPath local
AWS_ACCESS_KEY_IDstring-AWS Access Key
AWS_SECRET_ACCESS_KEYstring-AWS Secret Key
AWS_S3_BUCKETstring-Bucket S3
AWS_S3_REGIONstringus-east-1Região S3

Desenvolvimento

Debug e Testing

VariávelTipoPadrãoDescrição
TESTINGbooleanfalseModo de teste
TEST_DATABASE_URLstring-URL banco de testes
MOCK_EXTERNAL_APISbooleanfalseMock APIs externas
SQLALCHEMY_WARN_20booleantrueAvisos SQLAlchemy 2.0
PYTHONPATHstring.Path Python

Exemplo de Arquivo .env

Desenvolvimento

# 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

Produção

# 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

Validação de Configuração

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

Dicas e Boas Práticas

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.

Script de Validação

#!/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!"

Próximos Passos


Mantenha este documento atualizado ao adicionar novas variáveis de configuração ao sistema.

On this page