Configuração
Dois ficheiros, duas funções
| Ficheiro (no servidor) | Lido por | Efeito de uma alteração |
|---|---|---|
~/pch-sig/.env.prod | Docker Compose, injetado no ambiente dos contentores | docker compose -f … up -d --no-deps backend |
~/pch-sig/backend/.env | copiado para a imagem (/app/.env), valores por defeito do Symfony | reconstrução da imagem obrigatória |
Regra de precedência: uma variável presente no ambiente do contentor prevalece sobre /app/.env, mesmo que esteja vazia. Verificar o valor realmente usado:
docker exec pch_backend php bin/console debug:dotenv
Nenhum destes ficheiros está no repositório Git. Os segredos estão no gestor de segredos; a sua rotação está descrita em docs/ROTATION_SECRETS.md.
Variáveis principais
| Variável | Onde | Função |
|---|---|---|
APP_ENV, APP_DEBUG | compose | prod, 0 |
APP_SECRET | .env.prod | segredo Symfony |
POSTGRES_USER, POSTGRES_PASSWORD | .env.prod | base pch_sig |
JWT_PASSPHRASE | .env.prod | frase-passe das chaves JWT (backend/config/jwt/, próprias do servidor) |
MAILER_USER, MAILER_PASSWORD | .env.prod | conta SMTP OVH noreply@ucp-pch.org; o DSN usado é smtp://…@ssl0.ovh.net:587 |
MAILER_SENDER | compose | noreply@ucp-pch.org |
MESSENGER_TRANSPORT_DSN | compose | doctrine://default: fila dos e-mails e tarefas assíncronas |
REDIS_URL | compose | redis://redis:6379 |
FRONTEND_URL, DEFAULT_URI | compose | https://bemba.ucp-pch.org (ligações dos e-mails, com /#/) |
CORS_ALLOW_ORIGIN | compose | domínios autorizados |
ANTHROPIC_API_KEY, CLAUDE_MODEL | backend/.env | assistente Bemba (modelo por defeito definido em services.yaml) |
COHERE_API_KEY | backend/.env | pesquisa semântica do assistente, agrupamento das reclamações |
DOCUMENTATION_BUILD_DIR, DOCUMENTATION_URL | compose | base documental do assistente (build Docusaurus montado só de leitura) |
KOBO_API_URL, KOBO_API_TOKEN | compose / .env.prod | KoboToolbox (as contas por projeto também são configuráveis na aplicação) |
SENTRY_DSN | .env.prod | notificação de erros |
As variáveis SUSO_* não são usadas: a ligação ao Survey Solutions é lida na tabela survey_solutions_config, modificável a partir da aplicação.
Frontend
| Ficheiro | Usado por | Conteúdo |
|---|---|---|
frontend/.env.development.local | npm start | REACT_APP_API_URL=http://localhost:8000/api, distintivo « LOCAL » |
frontend/.env.production | npm run build | REACT_APP_API_URL=/api, REACT_APP_DOCS_URL=https://docubemba.ucp-pch.org |
As variáveis REACT_APP_* ficam fixadas no momento do build: mudar um valor obriga a reconstruir e reimplantar o frontend.
Nginx do frontend
~/pch-sig/nginx/frontend.conf está montado em pch_frontend. Serve o build React (HashRouter, todas as rotas devolvem index.html), coloca em cache os recursos versionados e aplica a política de segurança de conteúdo (CSP): connect-src limitado ao domínio, ao KoboToolbox e ao Sentry. Acrescentar um serviço de terceiros chamado a partir do navegador obriga a acrescentá-lo à CSP.
Configuração na aplicação
Grande parte da parametrização faz-se em Definições, sem reimplantação: perfis e permissões, instituições e vínculos, projetos e programas, métodos PMT, nomenclatura dos identificadores, fluxos e prazos das reclamações (Workflow & SLA), equipas, contas Kobo e Survey Solutions por projeto, conteúdos do site público.
E-mails
Todos os e-mails partem de forma assíncrona (Messenger): um pedido nunca contacta o servidor SMTP. As mensagens que falham vão para a fila failed:
docker exec pch_backend php bin/console messenger:failed:show
docker exec pch_backend php bin/console messenger:failed:retry # só em produção
Em pré-produção, o envio falha de propósito (SMTP inacessível): não relançar a fila failed.
Registos
O Monolog escreve na saída de erro do contentor; o Promtail recolhe esses registos e envia-os ao Loki (retenção de um ano). Ver Registos.