Pular para o conteúdo principal

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.

ComponenteMecanismo no servidorComando-chave
Backendcódigo copiado para a imagem: é preciso reconstruirdocker compose -f … build backend e depois up -d --no-deps backend
Frontendbuild montado (frontend/build)substituir os ficheiros e recriar frontend
Documentaçãobuild 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 -f com docker compose.
  • Nunca cache:clear via docker exec como root (usar -u www-data ou 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 chamam docker-compose sem -f).