GitLab CI/CD
SETUP COMPLETO PASO A PASOPlan de implementación completo para conectar el repositorio GitHub de AMR CRM a GitLab CI/CD. Incluye configuración de variables, deploy automático a staging y producción, y monitoreo de pipelines.
Arquitectura del Pipeline
Mirror strategy: El código vive en GitHub. GitLab actúa como CI runner — hace mirror del repo y ejecuta el pipeline. No necesitas migrar el código.
Crear cuenta GitLab & proyecto
Configuración inicial de la plataforma CI/CD
https://gitlab.com y crea una cuenta gratuita (o inicia sesión si ya tienes).Nombre:
amrstreaming-crm · Visibility: Private · NO inicializar con README.Agrega el mirror de GitHub:
URL: https://github.com/anderman1981/amrstreaming.git
Direction: Pull (GitLab pulls from GitHub)
Mirror branches: All
Necesitarás un GitHub Personal Access Token con permisos repo. Créalo en github.com → Settings → Developer settings → Personal access tokens → Tokens (classic).
Alternativa más simple: Puedes empujar directamente a GitLab agregando un segundo remote:
git remote add gitlab https://gitlab.com/TU_USER/amrstreaming-crm.git
Luego cada push: git push github && git push gitlab
Generar clave SSH para el deploy
El runner de GitLab necesita conectarse a Hostinger via SSH
ssh-keygen -t ed25519 -C "gitlab-ci-amrcrm" -f ~/.ssh/gitlab_ci_amrcrm -N ""
Esto crea ~/.ssh/gitlab_ci_amrcrm (privada) y ~/.ssh/gitlab_ci_amrcrm.pub (pública).
# Primero muestra la clave pública:
cat ~/.ssh/gitlab_ci_amrcrm.pub
# Luego conéctate al servidor y agrégala:
ssh -p 65002 u305025526@151.106.96.98
echo "PEGA_AQUI_LA_CLAVE_PUBLICA" >> ~/.ssh/authorized_keys
ssh-keyscan -p 65002 -H 151.106.96.98
Copia el output completo — lo necesitas en el siguiente paso.
Configurar Variables CI/CD en GitLab
Settings → CI/CD → Variables
Ve a tu proyecto GitLab → Settings → CI/CD → Variables → Expand → Add variable para cada una:
| Variable | Tipo | Valor | Notas |
|---|---|---|---|
| SSH_PRIVATE_KEY | File | Contenido de ~/.ssh/gitlab_ci_amrcrm |
Incluye las líneas -----BEGIN/END----- |
| SSH_HOST_KEY | Variable | Output del ssh-keyscan del paso 2.3 |
Previene MITM attacks |
| WEBHOOK_DEPLOY_TOKEN | Variable | Token de tu .env en producción |
Para notificación post-deploy |
IMPORTANTE: Para SSH_PRIVATE_KEY usa tipo File, no Variable. El runner la monta como archivo en el runner job. Marca "Protect variable" para que solo se use en ramas protegidas.
El archivo .gitlab-ci.yml ya está listo
Ya fue commiteado en el repo — .gitlab-ci.yml
El pipeline ya existe en el repo (commit f5705f7). Resumen de lo que hace:
Valida sintaxis PHP de todos los archivos src/ y public/. Falla el pipeline antes de cualquier deploy si hay error de PHP.
rsync a /whatsapp-crm/staging/. Excluye .env, .git, node_modules, *.log.
Smoke test: verifica que webhook responde HTTP 401 o 503 (comportamiento correcto sin token). Bloquea el pipeline si responde 200 o 500.
rsync a /whatsapp-crm/main/. Requiere click manual en GitLab UI para disparar. Nunca se auto-deploya a producción.
# Resumen del pipeline (ya en .gitlab-ci.yml):
stages:
- validate # php -l en todos los archivos
- deploy-staging # rsync a staging (rama dev)
- test-staging # smoke test webhook
- deploy-production # rsync a prod (rama main, manual)
- notify # webhook post-deploy
Hacer el primer push a GitLab
Conectar el repositorio local con GitLab y lanzar el primer pipeline
# Reemplaza TU_USER con tu usuario de GitLab
git remote add gitlab https://gitlab.com/TU_USER/amrstreaming-crm.git
# Verifica los remotes:
git remote -v
git push gitlab --all
git push gitlab --tags
php-lint debe pasar en verde.# Alias para push a ambos remotes (agrega a ~/.zshrc):
alias gpush='git push origin && git push gitlab'
# O un script en el repo:
# scripts/push-all.sh
#!/bin/bash
git push origin "$@"
git push gitlab "$@"
Workflow de trabajo con CI/CD activo
Cómo trabajar con el pipeline en el día a día
Desarrollo normal
# 1. Crea branch de feature
git checkout -b feature/mi-mejora
# 2. Haz cambios, commitea
git add .
git commit -m "feat: descripcion"
# 3. Push a dev para CI
git push origin feature/mi-mejora
git push gitlab feature/mi-mejora
# 4. Merge a dev → staging auto-deploy
git checkout dev
git merge feature/mi-mejora
gpush # push a ambos remotes
Deploy a producción
# 1. Merge dev → main
git checkout main
git merge dev
gpush # push a ambos remotes
# 2. GitLab corre php-lint
# 3. Ve a GitLab → Pipelines
# Busca el pipeline de main
# Clic "▶ Play" en deploy-production
# 4. Verifica en producción:
curl https://streamingapps.online/\
whatsapp-crm/main/public/webhook.php
# Debe responder 401 o 503
Instalar Backups y Monitoreo en Hostinger
Comandos a ejecutar UNA vez desde tu servidor
Pendiente crítico: Estos scripts ya fueron subidos al servidor pero los crons aún no están instalados. Ejecuta los siguientes comandos en Hostinger para activarlos.
7.1 Conectar al servidor:
ssh -p 65002 -i ~/.ssh/id_ed25519_amrosai u305025526@151.106.96.98
7.2 Instalar crons de backup + monitoreo:
bash ~/scripts/monitor-setup.sh
Esto instala: backup DB a las 3:00 AM diario + health check cada 5 minutos.
7.3 Verificar crons instalados:
crontab -l
Debes ver las líneas de backup-hostinger y health-check.
7.4 Limpiar archivos basura del servidor:
ls ~/domains/streamingapps.online/public_html/
# Eliminar solo si ves estos archivos:
rm ~/domains/streamingapps.online/public_html/tmp_batch.php
rm ~/domains/streamingapps.online/public_html/tmp_update_sales.php
rm ~/domains/streamingapps.online/public_html/fix_payment_security_20260923.php
CRÍTICO: Actualizar .env de Producción
El CRM retorna 503 hasta que estos valores estén configurados
Bloqueante MVP: auth.php ahora requiere CRM_PASSWORD en producción. Hasta que lo configures, el admin CRM devuelve HTTP 503 a todos los usuarios.
Editar .env en el servidor:
# Conectar al servidor:
ssh -p 65002 -i ~/.ssh/id_ed25519_amrosai u305025526@151.106.96.98
# Editar .env de producción:
nano ~/domains/streamingapps.online/public_html/whatsapp-crm/main/.env
# Agregar / actualizar estas líneas:
CRM_PASSWORD=pon_una_contrasena_segura_aqui
INSTALL_SECRET=secreto_para_install_php_32chars
Genera contraseñas seguras:
openssl rand -base64 32 — ejecuta en tu terminal local para generar valores seguros.
Ejecutar Migración SQL en Producción
migration_002_mvp_fixes.sql — agrega columnas faltantes
La migración agrega: web_leads table, columnas manual_takeover, columnas ai_profiles, índices de performance. Sin esto el CRM puede crashear en el primer nuevo contacto.
# En el servidor, cargar variables del .env:
source <(grep -E '^(DB_HOST|DB_NAME|DB_USER|DB_PASS)=' \
~/domains/streamingapps.online/public_html/whatsapp-crm/main/.env \
| sed 's/^/export /')
# Ejecutar migración:
mysql -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" \
< ~/domains/streamingapps.online/public_html/whatsapp-crm/main/db/migration_002_mvp_fixes.sql
# Verificar:
echo "SELECT table_name FROM information_schema.tables WHERE table_name='web_leads';" \
| mysql -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME"
Checklist Completo — MVP Launch
Semana 1 Post-Launch
- • Monitorear logs del servidor
- • Verificar backups creándose
- • Probar flujo completo WhatsApp
- • CSRF tokens en formularios
- • Índice messages.wamid
- • Rate limiting en login
- • Fix mobile layout CRM
- • Barra de búsqueda funcional
- • Primer cliente real en CRM