Pular para o conteúdo principal

Instalação Docker

Este guia explica como instalar o Docker e implantar o PCH-SIG com Docker Compose.

Instalação do Docker

No Ubuntu/Debian

# Atualização do sistema
sudo apt update && sudo apt upgrade -y

# Instalação das dependências
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

# Adicionar a chave GPG do Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Adicionar o repositório Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Instalação do Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Adicionar o usuário ao grupo docker
sudo usermod -aG docker $USER

No Windows com Docker Desktop

  1. Baixe o Docker Desktop em https://www.docker.com/products/docker-desktop
  2. Execute o instalador
  3. Ative o WSL 2 se solicitado
  4. Reinicie o computador

No Windows com Docker Toolbox (sem Hyper-V)

Para servidores Windows sem Hyper-V:

  1. Instale o VirtualBox
  2. Instale o Docker Toolbox
  3. Inicie o Docker Quickstart Terminal
  4. A VM Docker estará acessível em 192.168.99.100

Verificação da instalação

# Versão do Docker
docker --version

# Versão do Docker Compose
docker compose version

# Teste do Docker
docker run hello-world

Estrutura do projeto

pch-sig/
├── backend/ # API Symfony
├── frontend/ # Aplicação React
├── deploy/
│ ├── docker-compose.yml # Configuração Docker
│ ├── docker-compose.toolbox.yml # Config Docker Toolbox
│ └── nginx-conf/ # Configuração Nginx
├── monitoring/ # Grafana, Prometheus
└── documentation/ # Docusaurus

Implantação com Docker Compose

Arquivo docker-compose.yml

O arquivo principal define todos os serviços:

version: '3.8'

services:
# Banco de dados PostgreSQL com PostGIS
postgres:
image: postgis/postgis:15-3.4-alpine
container_name: pch_postgres
environment:
POSTGRES_DB: pch_sig
POSTGRES_USER: pch_admin
POSTGRES_PASSWORD: pch_secure_2025
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: always

# Cache Redis
redis:
image: redis:7-alpine
container_name: pch_redis
command: redis-server --requirepass redis_secure_2025
volumes:
- redis_data:/data
ports:
- "6379:6379"
restart: always

# Backend PHP-FPM
backend:
image: webdevops/php:8.3-alpine
container_name: pch_backend
working_dir: /app
volumes:
- ../backend:/app
depends_on:
- postgres
- redis
restart: always

# Nginx Backend Proxy
nginx_backend:
image: nginx:alpine
container_name: pch_nginx_backend
volumes:
- ../backend:/app
- ./nginx-conf/backend.conf:/etc/nginx/conf.d/default.conf
ports:
- "8000:80"
depends_on:
- backend
restart: always

# Frontend Nginx
frontend:
image: nginx:alpine
container_name: pch_frontend
volumes:
- ../frontend/build:/usr/share/nginx/html
- ./nginx-conf/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
restart: always

# Mailpit (SMTP de teste)
mailpit:
image: axllent/mailpit:latest
container_name: pch_mailpit
ports:
- "1025:1025"
- "8025:8025"
restart: always

volumes:
postgres_data:
redis_data:

Iniciar os contêineres

Inicialização inicial

cd deploy

# Construir e iniciar todos os serviços
docker compose up -d

# Verificar o status
docker compose ps

Comandos úteis

# Ver os logs
docker compose logs -f

# Logs de um serviço específico
docker compose logs -f backend

# Parar os serviços
docker compose down

# Parar e remover os volumes
docker compose down -v

# Reiniciar um serviço
docker compose restart backend

Configuração inicial

Criar o banco de dados

# Acessar o contêiner backend
docker exec -it pch_backend bash

# No contêiner, executar as migrações
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate --no-interaction

# Carregar os dados iniciais
php bin/console doctrine:fixtures:load --no-interaction

Gerar as chaves JWT

# No contêiner backend
php bin/console lexik:jwt:generate-keypair

Limpar o cache

docker exec -it pch_backend php bin/console cache:clear

Build do Frontend

Localmente

cd frontend
npm install
npm run build

O build é servido pelo Nginx

Os arquivos de frontend/build/ são servidos pelo contêiner pch_frontend.


Docker Toolbox (Windows Server)

Configuração específica

Para o servidor serveur-production usando Docker Toolbox:

# docker-compose.toolbox.yml
version: '3.8'

services:
# Os serviços são os mesmos mas acessíveis
# via o IP da VM Docker: 192.168.99.100

Proxy de Porta Windows

Configurar o proxy de portas para acessar da rede:

# Frontend (porta 3000 -> VM:80)
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.99.100

# Backend (porta 8000 -> VM:8000)
netsh interface portproxy add v4tov4 listenport=8000 listenaddress=0.0.0.0 connectport=8000 connectaddress=192.168.99.100

Verificação da implantação

Testar os serviços

ServiçoURL de testeResultado esperado
Frontendhttp://localhost:3000Página de login
APIhttp://localhost:8000/apiDocumentação da API
Mailpithttp://localhost:8025Interface de email

Verificar os contêineres

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

Próximos passos