# Setup do Ambiente CI/CD - Avanzato ## Arquitetura ``` +------------------------------------------------------------------+ | SEU SERVIDOR | | | | +-------------------+ +-------------------+ +-----------+ | | | Git Bare Repo | | Pipeline | | Site | | | | /var/git/site |--->| /var/ci/ |--->| Nginx | | | | | | | | | | | | - hooks/post-receive | - build.sh | | /var/www | | | | - hooks/pre-receive | - deploy.sh | | | | | +-------------------+ +-------------------+ +-----------+ | | ^ | | | | v | | +-------------------+ +-------------------+ | | | Seu Computador | | Mautic | | | | | | mkt.avanzato | | | | git push | | | | | +-------------------+ +-------------------+ | +------------------------------------------------------------------+ ``` ## 1. Instalar dependencias no servidor ```bash # Atualizar sistema apt update && apt upgrade -y # Instalar Git apt install -y git curl # Instalar Node.js 20 curl -fsSL https://deb.nodesource.com/setup_20.x | bash - apt install -y nodejs # Verificar node -v # v20.x.x npm -v # 10.x.x # Instalar Nginx apt install -y nginx # Instalar PM2 (opcional, para gerenciar processos) npm install -g pm2 ``` ## 2. Criar usuario de deploy ```bash # Criar usuario dedicado useradd -m -s /bin/bash deploy # Adicionar ao grupo www-data usermod -aG www-data deploy # Criar chave SSH (como usuario deploy) su - deploy ssh-keygen -t ed25519 -C "deploy" -f ~/.ssh/id_ed25519 -N "" # Ver chave publica (para autorizar pushes) cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys ``` ## 3. Criar repositorio Git bare ```bash # Criar pasta mkdir -p /var/git/site.git cd /var/git/site.git git init --bare # Permissoes chown -R deploy:deploy /var/git/site.git chmod -R 755 /var/git/site.git ``` ## 4. Configurar hooks Git ```bash # Copiar hooks sudo su - deploy cp /var/ci/hooks/post-receive /var/git/site.git/hooks/post-receive chmod +x /var/git/site.git/hooks/post-receive ``` ## 5. Configurar Nginx ```bash # Criar config nano /etc/nginx/sites-available/avanzato # Ver link: CI/CD > nginx-config.conf # Ativar ln -s /etc/nginx/sites-available/avanzato /etc/nginx/sites-enabled/ nginx -t systemctl reload nginx # SSL com Let's Encrypt certbot --nginx -d avanzato.com.br -d www.avanzato.com.br ``` ## 6. Criar estrutura de pastas ```bash mkdir -p /var/www/avanzato # Site em producao mkdir -p /var/www/avanzato-staging # Site em staging (opcional) mkdir -p /var/ci # Pipeline scripts mkdir -p /var/ci/logs # Logs de build/deploy mkdir -p /var/ci/backups # Backups automaticos mkdir -p /var/ci/assets # Assets preservados chown -R deploy:www-data /var/www chmod -R 755 /var/www ``` ## 7. Configurar pipeline ```bash # Copiar scripts do pipeline cp /var/ci/scripts/* /var/ci/ chmod +x /var/ci/*.sh # Configurar variaveis nano /var/ci/config.env # Conteudo: DEPLOY_PATH=/var/www/avanzato STAGING_PATH=/var/www/avanzato-staging BACKUP_PATH=/var/ci/backups LOG_PATH=/var/ci/logs MAUTIC_URL=https://mkt.avanzato.com.br ``` ## 8. Configurar seu computador local ```bash # Adicionar remote no seu projeto local cd /caminho/do/projeto/avanzato-site git remote add servidor ssh://deploy@SEU_SERVIDOR/var/git/site.git # Testar conexao ssh deploy@SEU_SERVIDOR "echo 'Conectado!'" # Push inicial git push servidor main ``` ## Comandos de uso diario | Comando | Resultado | |---------|-----------| | `git push servidor main` | Deploy automatico para producao | | `git push servidor staging` | Deploy para staging | | `ssh deploy@SERVIDOR "cat /var/ci/logs/last-deploy.log"` | Ver ultimo log | | `ssh deploy@SERVIDOR "ls /var/ci/backups"` | Listar backups | ## Estrutura final no servidor ``` /var/ git/ site.git/ # Repo bare (recebe pushes) hooks/ post-receive # Hook de deploy automatico ci/ scripts/ build.sh # Compila o site deploy.sh # Envia para producao preserve-assets.sh # Preserva logo/imagens backup.sh # Cria backup hooks/ post-receive # Template do hook logs/ # Logs de execucao backups/ # Backups automaticos assets/ # Assets preservados config.env # Variaveis de ambiente www/ avanzato/ # Site em producao index.html assets/ backups/ # Backups antigos ```