Pular para o conteúdo principal

Resolução de Problemas

Cada caso abaixo já foi encontrado em produção ou em pré-produção.

Diagnóstico rápido​

cd ~/pch-sig
F=docker-compose.prod.yml # ou docker-compose.preprod.yml
docker compose -f $F ps
docker exec pch_backend curl -s http://127.0.0.1:8000/api/health
docker logs pch_backend --since 15m 2>&1 | grep -iE "error|exception" | tail -20
df -h / && free -m

Todos os pedidos respondem 500​

Depois de um cache:clear lançado com docker exec (root). A cache é recriada com root como proprietário e o php-fpm (www-data) deixa de poder escrever os proxies Doctrine:

Your proxy directory "/app/var/cache/prod/doctrine/orm/Proxies" must be writable

O comando tinha mostrado [OK], e qualquer verificação feita como root funciona: é enganador.

docker compose -f $F up -d --no-deps backend # o entrypoint limpa a cache e repõe os direitos
# ou
docker exec pch_backend sh -c 'chown -R www-data:www-data /app/var'

Regra: qualquer comando de consola executa-se com docker exec -u www-data, e qualquer verificação faz-se com o utilizador real.

500 no início de sessão (« Unable to create a signed JWT »): a chave JWT privada não é legível por www-data, ou a frase-passe de .env.prod não a abre. As chaves estão montadas só de leitura a partir de ~/pch-sig/backend/config/jwt: corrigir os direitos no anfitrião (proprietário 82:82, ou seja www-data da imagem, e modo 600 para a chave privada), não no contentor. Ver Autenticação JWT.

A correção implantada não está ativa​

Um build Docker falhado deixa o contentor antigo em funcionamento, saudável. Verificar no contentor uma cadeia própria do código novo (docker exec pch_backend grep -c "…" /app/src/…) e ler ~/build-backend.log. O build lança-se destacado (nohup) para que uma quebra de SSH não o interrompa.

Contentores inesperados (pch-sig-database-1, pch-sig-mailer-1)​

O docker compose foi lançado sem -f: arrancou o esqueleto Symfony (compose.yaml). Pará-los com docker compose -f compose.yaml down e depois relançar a aplicação com o -f certo.

Backend em reinício permanente​

docker logs pch_backend --tail 50
  • exec /usr/local/bin/docker-entrypoint.sh: no such file or directory: fins de linha Windows no script. sed -i 's/\r$//' backend/docker/*.sh, depois reconstruir.
  • Unable to read the "/app/.env" environment file: backend/.env ausente no momento do build.
  • Migração falhada: a mensagem SQL está no registo; corrigir a migração e reimplantar.

KeyError: 'ContainerConfig'​

Compose v1 (docker-compose) com Docker Engine 28. Instalar o plugin v2 (docker-compose-plugin) e usar docker compose.

Certificado inválido (« TRAEFIK DEFAULT CERT »)​

O DNS do nome não existia quando o Traefik pediu o certificado. Verificar nslookup <nome>, depois docker restart pch_traefik para relançar o pedido. Ler docker logs pch_traefik | grep -i acme.

E-mails não recebidos​

  1. docker exec pch_backend php bin/console messenger:failed:show: mensagens falhadas e motivo.
  2. Em pré-produção, é normal: o SMTP está inacessível de propósito.
  3. 535 Authentication failed: palavra-passe da conta noreply@ucp-pch.org alterada na OVH sem atualizar .env.prod.

KoboToolbox (pré-produção): os seus e-mails passam pelo relé da produção. docker logs smtp_relay na produção indica status=sent ou o motivo. Se o relé arrancou uma vez com uma palavra-passe errada, mantém-na em duplicado: docker compose -f docker-compose.yml down -v && … up -d em ~/smtp-relay.

Ecrã vazio ou versão antiga depois da implantação​

  • Forçar o recarregamento (Ctrl+Shift+R); o service worker atualiza-se no recarregamento seguinte.
  • Verificar que os ficheiros servidos contêm a alteração (procurar em todos os chunks de frontend/build/static/js).
  • Consola do navegador: um recurso bloqueado pela CSP aparece como « Refused to connect »; acrescentar o domínio a nginx/frontend.conf se a chamada for legítima.

Um utilizador não vê nenhum dado​

Quase nunca é um erro: a conta não está vinculada a nenhuma instituição ou a nenhum projeto (compartimentação). Verificar em Definições → Utilizadores. Uma conta pode estar autorizada (permissões) sem estar vinculada.

O assistente Bemba não cita a documentação​

docker exec -u www-data pch_backend php bin/console app:assistant:indexer --etat

Índice vazio: o build da documentação não está montado (/app/documentation-build) ou a indexação não correu. Relançar app:assistant:indexer.

O Survey Solutions deixou de sincronizar​

A ligação é lida na tabela survey_solutions_config (não nas variáveis de ambiente). Verificar a palavra-passe guardada e depois Testar a ligação a partir do ecrã de sincronização.

Disco cheio​

docker system df
docker image prune -f && docker builder prune -af
du -sh ~/backups

Informações a juntar a um pedido de suporte​

Hora exata, utilizador em causa, ecrã, mensagem mostrada e o excerto correspondente de docker logs pch_backend (sem palavra-passe nem token).