Pular para o conteúdo principal

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
Sempre -f

Sem -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.