Files
avz-site/DEPLOY-DOCKER.md
2026-05-30 19:59:39 -03:00

1.7 KiB

Deploy com Docker - Avanzato

O Problema

O Nginx no Docker nao vem configurado para SPA React. Ao acessar /avaliacao diretamente, da 404.

A Solucao

Opcao 1: Configurar Nginx dentro do container (RECOMENDADO)

1. Criar um novo Dockerfile:

FROM nginx:alpine

# Copiar o site
COPY dist/ /usr/share/nginx/html/

# Copiar a configuracao customizada
COPY nginx-docker.conf /etc/nginx/conf.d/default.conf

# Expor porta 80
EXPOSE 80

# Iniciar Nginx
CMD ["nginx", "-g", "daemon off;"]

2. Build e run:

# Build
npm run build
bash scripts/build-static-routes.sh dist
docker build -t avanzato-site .

# Run
docker run -d -p 80:80 --name avanzato avanzato-site

Opcao 2: Usar docker-compose

docker-compose.yml:

version: '3.8'
services:
  avanzato:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./dist:/usr/share/nginx/html:ro
      - ./nginx-docker.conf:/etc/nginx/conf.d/default.conf:ro
    container_name: avanzato-site

Comandos:

npm run build
bash scripts/build-static-routes.sh dist
docker-compose up -d

Opcao 3: Container ja rodando (hotfix)

Se o container ja esta rodando:

# Copiar config para dentro do container
docker cp nginx-docker.conf avanzato-site:/etc/nginx/conf.d/default.conf

# Recarregar Nginx
docker exec avanzato-site nginx -s reload

Verificar se funcionou

# Testar
curl -I http://localhost/avaliacao
# Deve retornar HTTP 200, nao 404

A regra magica

A unica coisa que importa e esta linha no Nginx:

location / {
    try_files $uri $uri/ /index.html;
}

Isso diz ao Nginx: "se nao encontrar o arquivo, manda para index.html" — onde o React pega a rota.