Implantação no Servidor
A implantação faz-se a partir do posto de administração, por SSH. Ordem imutável: pré-produção primeiro, produção depois, a partir dos ramos staging e depois main.
| Componente | Mecanismo no servidor | Comando-chave |
|---|---|---|
| Backend | código copiado para a imagem: é preciso reconstruir | docker compose -f … build backend e depois up -d --no-deps backend |
| Frontend | build montado (frontend/build) | substituir os ficheiros e recriar frontend |
| Documentação | build montado (documentation/build) | substituir os ficheiros e reindexar o assistente |
Nos exemplos, F=docker-compose.prod.yml em produção e F=docker-compose.preprod.yml em pré-produção.
Backend
# Posto de administração: arquivo do ramo a implantar
git archive --format=tar.gz -o backend.tar.gz main backend
scp backend.tar.gz pch-prod:~/
# Servidor
cd ~/pch-sig
rm -rf backend/src # o git archive não apaga os ficheiros removidos
tar -xzf ~/backend.tar.gz && rm ~/backend.tar.gz
sed -i 's/\r$//' backend/docker/*.sh # fins de linha Windows -> Unix
nohup sh -c "docker compose -f $F build backend && docker compose -f $F up -d --no-deps backend" > ~/build-backend.log 2>&1 &
backend/config/não é apagado: contém as chaves JWT do servidor.- O build corre destacado (
nohup): uma quebra de SSH durante os minutos de compilação não o interrompe. Acompanhar~/build-backend.log. - As migrações são executadas automaticamente quando o contentor reinicia.
Verificar que o código novo está realmente a correr: um build falhado deixa o contentor antigo em funcionamento, saudável, sem a correção.
docker exec pch_backend grep -c "<cadeia presente só no código novo>" /app/src/<ficheiro>.php
docker exec pch_backend curl -s http://127.0.0.1:8000/api/health
docker exec -u www-data pch_backend php bin/console doctrine:migrations:status
Frontend
# Posto de administração
cd frontend && npm run build && cd ..
tar -czf fe.tar.gz -C frontend/build .
scp fe.tar.gz pch-prod:~/
# Servidor
cd ~/pch-sig/frontend/build && rm -rf ./* && tar -xzf ~/fe.tar.gz && rm ~/fe.tar.gz
cd ~/pch-sig && docker compose -f $F up -d --no-deps --force-recreate frontend
Verificar uma cadeia própria da alteração nos ficheiros servidos: o código está dividido em chunks, é preciso procurar em todo o frontend/build/static/js, não só em main.js.
Documentação
# Posto de administração
cd documentation && npm run build && cd ..
tar -czf doc.tar.gz -C documentation/build .
scp doc.tar.gz pch-prod:~/
# Servidor
cd ~/pch-sig/documentation/build && rm -rf ./* && tar -xzf ~/doc.tar.gz && rm ~/doc.tar.gz
docker exec -u www-data pch_backend php bin/console app:assistant:indexer --max-appels=5
A reindexação atualiza a base documental do assistente Bemba (fragmentos acrescentados, modificados ou removidos). Antes do envio, verificar as três línguas do site (/, /pt/, /en/).
Depois de uma implantação
- Saúde:
https://<domínio>/api/health→ 200. - Registos do backend sem exceção:
docker logs pch_backend --since 5m | grep -i exception. - Os utilizadores recebem a nova versão ao recarregar (o service worker atualiza os recursos).
Regras
- Sempre
-fcomdocker compose. - Nunca
cache:clearviadocker execcomo root (usar-u www-dataou recriar o contentor). - Os scripts da raiz do repositório (
deploy.sh,deploy-*.bat,*.ps1) datam do alojamento antigo: não os usar sem os rever (alguns chamamdocker-composesem-f).