CarneiroTech/DEPLOY_README.md

7.9 KiB

CarneiroTech - Deployment Guide

🚀 Deploy para Produção (OCI)

O site CarneiroTech está hospedado no servidor OCI (Oracle Cloud Infrastructure) com IP final 218.

Arquitetura

Internet
    ↓
Nginx (Port 80/443)
    ↓
Docker Container (Port 5008)
    ↓
ASP.NET Core MVC App

📋 Informações do Servidor

  • Servidor: ubuntu@129.146.116.218
  • Diretório: /home/ubuntu/apps/carneirotech
  • Container: carneirotech-web
  • Porta Interna: 5008
  • Domínio: carneirotech.com
  • SSL: Let's Encrypt (auto-renovação configurada)

🔧 Como Fazer Deploy

Opção 1: Deploy Automático (Recomendado)

Execute o script de deploy da sua máquina local:

cd /mnt/c/Users/ricar/Nextcloud/CarneiroTech/Site/aspnet/CarneiroTech
./deploy-to-oci.sh

O script irá:

  1. Criar pacote compactado excluindo bin/obj
  2. Transferir para servidor via SCP
  3. Extrair arquivos
  4. Fazer backup da imagem anterior
  5. Fazer build da nova imagem
  6. Parar container antigo
  7. Subir container novo
  8. Verificar health check
  9. Limpar imagens antigas (mantém últimas 3)

Rollback automático: Se o health check falhar, o script restaura automaticamente a versão anterior.


Opção 2: Deploy Manual

  1. Conectar no servidor:
ssh ubuntu@129.146.116.218
cd ~/apps/carneirotech
  1. Transferir arquivos alterados (da sua máquina):
scp arquivo.cs ubuntu@129.146.116.218:~/apps/carneirotech/Controllers/
  1. No servidor, fazer rebuild e restart:
./deploy.sh

🔍 Comandos Úteis

Ver logs do container

ssh ubuntu@129.146.116.218 "docker logs carneirotech-web --tail=50 -f"

Verificar status

ssh ubuntu@129.146.116.218 "docker ps --filter name=carneirotech"

Entrar no container

ssh ubuntu@129.146.116.218 "docker exec -it carneirotech-web bash"

Reiniciar container

ssh ubuntu@129.146.116.218 "cd ~/apps/carneirotech && docker compose restart"

Ver logs do Nginx

ssh ubuntu@129.146.116.218 "sudo tail -f /var/log/nginx/access.log"
ssh ubuntu@129.146.116.218 "sudo tail -f /var/log/nginx/error.log"

Testar Nginx config

ssh ubuntu@129.146.116.218 "sudo nginx -t"

Recarregar Nginx

ssh ubuntu@129.146.116.218 "sudo systemctl reload nginx"

📁 Estrutura de Arquivos no Servidor

/home/ubuntu/apps/carneirotech/
├── Content/              # Markdown files dos cases
├── Controllers/          # MVC Controllers
├── Models/              # Models
├── Services/            # Services (CaseService)
├── Views/               # Razor Views
├── wwwroot/             # Static files (CSS, JS, images)
├── Dockerfile           # Docker build instructions (ARM64)
├── docker-compose.yml   # Docker Compose config
├── deploy.sh           # Deploy script (no servidor)
└── CarneiroTech.csproj # Project file

/etc/nginx/sites-available/
└── carneirotech.com.conf   # Nginx proxy config

/etc/letsencrypt/live/carneirotech.com/
├── fullchain.pem       # SSL certificate
└── privkey.pem         # SSL private key

🔐 SSL / HTTPS

O certificado SSL é gerenciado automaticamente pelo Let's Encrypt via Certbot.

Renovação Automática

O Certbot está configurado para renovar automaticamente. Verifique o status:

ssh ubuntu@129.146.116.218 "sudo certbot certificates"

Renovar Manualmente (se necessário)

ssh ubuntu@129.146.116.218 "sudo certbot renew"

Adicionar www.carneirotech.com

Quando você adicionar o registro DNS para www.carneirotech.com:

  1. Adicionar ao Namecheap (A record apontando para 129.146.116.218)
  2. Atualizar certificado SSL:
ssh ubuntu@129.146.116.218 "sudo certbot certonly --nginx -d carneirotech.com -d www.carneirotech.com --expand"
  1. Atualizar nginx config:
ssh ubuntu@129.146.116.218 "sudo nano /etc/nginx/sites-available/carneirotech.com.conf"

Adicionar www.carneirotech.com no server_name de ambos os blocos server.

  1. Recarregar nginx:
ssh ubuntu@129.146.116.218 "sudo nginx -t && sudo systemctl reload nginx"

🧹 Manutenção

Limpar imagens Docker antigas

ssh ubuntu@129.146.116.218 "docker image prune -a"

Limpar containers parados

ssh ubuntu@129.146.116.218 "docker container prune"

Ver uso de disco

ssh ubuntu@129.146.116.218 "df -h"

Ver uso de Docker

ssh ubuntu@129.146.218 "docker system df"

🐛 Troubleshooting

Site não carrega (502 Bad Gateway)

  1. Verificar se container está rodando:
ssh ubuntu@129.146.116.218 "docker ps --filter name=carneirotech"
  1. Ver logs do container:
ssh ubuntu@129.146.116.218 "docker logs carneirotech-web --tail=100"
  1. Reiniciar container:
ssh ubuntu@129.146.116.218 "cd ~/apps/carneirotech && docker compose restart"

Container não sobe (unhealthy)

  1. Ver logs detalhados:
ssh ubuntu@129.146.116.218 "docker logs carneirotech-web"
  1. Verificar health check manualmente:
ssh ubuntu@129.146.116.218 "curl http://localhost:5008/"
  1. Entrar no container para debug:
ssh ubuntu@129.146.116.218 "docker exec -it carneirotech-web bash"

Build falha

  1. Verificar se há espaço em disco:
ssh ubuntu@129.146.116.218 "df -h"
  1. Limpar cache do Docker:
ssh ubuntu@129.146.116.218 "docker builder prune -a"
  1. Fazer build com logs detalhados:
ssh ubuntu@129.146.116.218 "cd ~/apps/carneirotech && docker compose build --no-cache --progress=plain"

SSL expirado

Renovar manualmente:

ssh ubuntu@129.146.116.218 "sudo certbot renew --force-renewal"

📊 Monitoramento

Health Check Endpoint

O container tem health check automático configurado:

  • URL: http://localhost:5008/
  • Intervalo: 30s
  • Timeout: 3s
  • Start Period: 40s

Ver status de saúde

ssh ubuntu@129.146.116.218 "docker inspect carneirotech-web | grep -A 10 Health"

🔄 Workflow de Desenvolvimento

  1. Desenvolver localmente (Windows)

    cd C:\Users\ricar\Nextcloud\CarneiroTech\Site\aspnet\CarneiroTech
    dotnet run
    
  2. Testar mudanças (http://localhost:5000)

  3. Fazer deploy para produção

    ./deploy-to-oci.sh
    
  4. Verificar em produção (https://carneirotech.com)


📝 Notas Importantes

  • ⚠️ O servidor usa ARM64 (Ampere). O Dockerfile está otimizado para isso.
  • ⚠️ Não use docker-compose sem deploy.sh - pode causar downtime sem rollback.
  • ⚠️ Sempre teste localmente antes de fazer deploy.
  • ⚠️ O script de deploy faz backup automático - use sem medo!
  • ⚠️ Arquivos Markdown (Content/Cases/*.md) são incluídos no build.

Checklist de Deploy

Antes de fazer deploy, verifique:

  • Código compilou localmente sem erros
  • Testou localmente (dotnet run)
  • Commitou mudanças no Git (quando configurar)
  • Executou ./deploy-to-oci.sh
  • Verificou logs: docker logs carneirotech-web
  • Testou site: https://carneirotech.com
  • Verificou que cases Markdown aparecem corretamente

🆘 Suporte

Em caso de problemas críticos:

  1. Ver logs em tempo real:

    ssh ubuntu@129.146.116.218 "docker logs carneirotech-web -f"
    
  2. Rollback para versão anterior (automático no deploy.sh)

  3. Se precisar voltar manualmente:

    ssh ubuntu@129.146.116.218
    cd ~/backups/carneirotech
    # Ver backups disponíveis
    docker images | grep carneirotech-web
    # Usar backup específico
    docker tag <BACKUP_IMAGE_ID> carneirotech-carneirotech-web
    cd ~/apps/carneirotech
    docker compose up -d
    

Deployment criado em: 21 de Dezembro de 2024 Última atualização: 21 de Dezembro de 2024 Servidor: OCI (Oracle Cloud) - ARM64 (Ampere) Status: Produção