Instalação Docker
Procedimento para um servidor Ubuntu novo. Os servidores existentes (51.75.79.112 e 51.75.77.220) já estão instalados; esta página serve para reconstruir um servidor ou preparar um novo.
1. Instalar o Docker Engine e o Compose v2
sudo apt update && sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker ubuntu # depois voltar a ligar-se
docker compose version # deve mostrar v2.x
Não instale o docker-compose (v1): falha com o Docker Engine 28.
2. Reforçar o servidor
sudo apt install -y fail2ban unattended-upgrades
# SSH: só por chave
sudo sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart ssh
As portas dos serviços internos estão ligadas a 127.0.0.1 nos ficheiros compose: só 22, 80 e 443 devem estar acessíveis a partir da Internet.
3. Colocar o projeto
O código não é clonado no servidor: é enviado a partir do posto de administração (ver Implantação). Estrutura esperada em ~/pch-sig:
~/pch-sig/
├── docker-compose.prod.yml # ou docker-compose.preprod.yml
├── .env.prod # segredos lidos pelo Compose (chmod 600)
├── backend/ # fontes + backend/.env (copiado para a imagem)
│ └── config/jwt/ # chaves JWT próprias do servidor (nunca sobrescrever)
├── frontend/build/ # build React (montado)
├── documentation/build/ # build Docusaurus (montado)
├── nginx/frontend.conf # Nginx do frontend (CSP)
└── monitoring/ # configuração Loki / Promtail
4. Preencher os segredos
Criar ~/pch-sig/.env.prod (chmod 600) com os valores do gestor de segredos: ver Configuração. Nunca copiar um .env de um servidor para outro sem rever cada valor.
5. Construir e arrancar
cd ~/pch-sig
docker compose -f docker-compose.prod.yml build backend
docker compose -f docker-compose.prod.yml up -d
docker compose -f docker-compose.prod.yml ps
-fSem -f, o Compose lê compose.yaml (esqueleto Symfony) e arranca uma base com a palavra-passe por defeito.
O entrypoint do backend cria as chaves JWT se faltarem (pré-produção; em produção, criá-las primeiro no anfitrião, ver Autenticação JWT), espera pelo PostgreSQL, executa as migrações e prepara a cache. Acompanhar o seu desenrolar:
docker compose -f docker-compose.prod.yml logs -f backend
6. Verificar
docker exec pch_backend curl -s http://127.0.0.1:8000/api/health
curl -s -o /dev/null -w "%{http_code}\n" https://bemba.ucp-pch.org/
Ambos devem responder 200 (o primeiro certificado pode demorar um minuto). Continuar com o primeiro arranque.