Some checks failed
CI/CD Pipeline / 🧪 Tests (push) Has been cancelled
CI/CD Pipeline / 🏗️ Build (push) Has been cancelled
CI/CD Pipeline / 🚀 Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / 🚀 Deploy to Production (push) Has been cancelled
CI/CD Pipeline / 🏷️ Create Release (push) Has been cancelled
CI/CD Pipeline / 🧹 Cleanup (push) Has been cancelled
Implementados 4 módulos con agent swarm: 1. TESTING FUNCIONAL (Jest) - Configuración Jest + ts-jest - Tests unitarios: auth, booking, court (55 tests) - Tests integración: routes (56 tests) - Factories y utilidades de testing - Coverage configurado (70% servicios) - Scripts: test, test:watch, test:coverage 2. TESTING DE USUARIO (Beta) - Sistema de beta testers - Feedback con categorías y severidad - Beta issues tracking - 8 testers de prueba creados - API completa para gestión de feedback 3. DOCUMENTACIÓN COMPLETA - API.md - 150+ endpoints documentados - SETUP.md - Guía de instalación - DEPLOY.md - Deploy en VPS - ARCHITECTURE.md - Arquitectura del sistema - APP_STORE.md - Material para stores - Postman Collection completa - PM2 ecosystem config - Nginx config con SSL 4. GO LIVE Y PRODUCCIÓN - Sistema de monitoreo (logs, health checks) - Servicio de alertas multi-canal - Pre-deploy check script - Docker + docker-compose producción - Backup automatizado - CI/CD GitHub Actions - Launch checklist completo ESTADÍSTICAS FINALES: - Fases completadas: 7/7 - Archivos creados: 250+ - Líneas de código: 60,000+ - Endpoints API: 150+ - Tests: 110+ - Documentación: 5,000+ líneas PROYECTO COMPLETO Y LISTO PARA PRODUCCIÓN
11 KiB
11 KiB
🚀 Guía de Deploy - App Canchas de Pádel
Guía completa para deployar la aplicación en un servidor de producción (VPS).
📋 Índice
- Preparación
- Deploy en VPS
- Configuración PM2
- Configuración Nginx
- SSL con Let's Encrypt
- Backup de Base de Datos
Preparación
Checklist Pre-Deploy
- Código actualizado en repositorio
- Variables de entorno configuradas
- Base de datos creada
- Dominio configurado (DNS apuntando al servidor)
- Acceso SSH al servidor
Servidor Requerido
| Especificación | Mínimo | Recomendado |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 2 GB | 4 GB |
| Disco | 20 GB SSD | 50 GB SSD |
| OS | Ubuntu 22.04 | Ubuntu 24.04 LTS |
Deploy en VPS
1. Configurar Servidor
Conectar al servidor:
ssh usuario@tu-servidor.com
Actualizar sistema:
sudo apt update && sudo apt upgrade -y
Instalar dependencias:
# Node.js 20.x
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# PostgreSQL
sudo apt install postgresql postgresql-contrib -y
# Git
sudo apt install git -y
# Nginx
sudo apt install nginx -y
# PM2 global
sudo npm install -g pm2
2. Configurar PostgreSQL
# Iniciar servicio
sudo systemctl start postgresql
sudo systemctl enable postgresql
# Crear usuario y base de datos
sudo -u postgres psql <<EOF
CREATE USER app_padel WITH PASSWORD 'tu_password_seguro';
CREATE DATABASE app_padel OWNER app_padel;
GRANT ALL PRIVILEGES ON DATABASE app_padel TO app_padel;
\q
EOF
3. Crear Usuario de Deploy
# Crear usuario
sudo adduser app-padel
sudo usermod -aG sudo app-padel
# Cambiar al usuario
su - app-padel
4. Clonar y Configurar Aplicación
# Clonar repositorio
cd ~
git clone https://github.com/tu-usuario/app-padel.git
cd app-padel/backend
# Instalar dependencias
npm ci --only=production
# Configurar variables de entorno
cp .env.example .env
nano .env
Configuración de .env para producción:
NODE_ENV=production
PORT=3000
API_URL=https://api.tudominio.com
FRONTEND_URL=https://tudominio.com
DATABASE_URL="postgresql://app_padel:tu_password_seguro@localhost:5432/app_padel?schema=public"
JWT_SECRET=genera_un_secreto_largo_y_aleatorio_aqui_32caracteresmin
JWT_REFRESH_SECRET=otro_secreto_diferente_32caracteresminimo
# Email
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=notificaciones@tudominio.com
SMTP_PASS=tu_app_password
# MercadoPago Producción
MERCADOPAGO_ACCESS_TOKEN=APP_USR-...
MERCADOPAGO_PUBLIC_KEY=APP_USR-...
5. Ejecutar Migraciones
npx prisma migrate deploy
npx prisma generate
6. Construir Aplicación
npm run build
Configuración PM2
Crear archivo ecosystem.config.js:
cat > ecosystem.config.js << 'EOF'
module.exports = {
apps: [{
name: 'app-padel-api',
script: './dist/index.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'production',
PORT: 3000
},
log_file: './logs/combined.log',
out_file: './logs/out.log',
error_file: './logs/error.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
merge_logs: true,
max_memory_restart: '1G',
restart_delay: 3000,
max_restarts: 5,
min_uptime: '10s',
watch: false,
env_production: {
NODE_ENV: 'production'
}
}]
};
EOF
Iniciar con PM2:
pm2 start ecosystem.config.js
pm2 save
pm2 startup
Comandos útiles:
pm2 status # Ver estado
pm2 logs app-padel-api # Ver logs
pm2 restart app-padel-api # Reiniciar
pm2 stop app-padel-api # Detener
pm2 delete app-padel-api # Eliminar
Configuración Nginx
1. Crear Configuración
sudo nano /etc/nginx/sites-available/app-padel
Contenido:
# Upstream para la API
upstream app_padel_api {
least_conn;
server 127.0.0.1:3000 max_fails=3 fail_timeout=30s;
}
# Rate limiting zone
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
listen 80;
server_name api.tudominio.com;
# Logs
access_log /var/log/nginx/app-padel-access.log;
error_log /var/log/nginx/app-padel-error.log;
# Headers de seguridad
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Tamaño máximo de body
client_max_body_size 10M;
# Gzip
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
# Webhooks de MercadoPago (sin rate limit)
location ~ ^/api/v1/(payments|subscriptions)/webhook {
proxy_pass http://app_padel_api;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400;
}
# API con rate limiting
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://app_padel_api;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 300s;
}
# Health check
location /health {
proxy_pass http://app_padel_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
access_log off;
}
# Root
location / {
return 200 '{"status":"API App Padel","version":"1.0.0"}';
add_header Content-Type application/json;
}
}
2. Habilitar Sitio
# Crear enlace simbólico
sudo ln -s /etc/nginx/sites-available/app-padel /etc/nginx/sites-enabled/
# Verificar configuración
sudo nginx -t
# Reiniciar Nginx
sudo systemctl restart nginx
SSL con Let's Encrypt
1. Instalar Certbot
sudo apt install certbot python3-certbot-nginx -y
2. Obtener Certificado
sudo certbot --nginx -d api.tudominio.com
Sigue las instrucciones interactivas.
3. Configuración Auto-Renovación
# Verificar renovación automática
sudo certbot renew --dry-run
# El cronjob se instala automáticamente
# Verificar: /etc/cron.d/certbot
4. Configuración Nginx con SSL (Auto-generada)
Certbot modificará la configuración automáticamente. Verificar:
sudo nano /etc/nginx/sites-available/app-padel
Debería incluir:
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/api.tudominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.tudominio.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
Backup de Base de Datos
1. Script de Backup Automático
Crear script:
sudo mkdir -p /opt/backups
sudo nano /opt/backups/backup-db.sh
Contenido:
#!/bin/bash
# Configuración
DB_NAME="app_padel"
DB_USER="app_padel"
BACKUP_DIR="/opt/backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/app_padel_${DATE}.sql"
RETENTION_DAYS=30
# Crear backup
pg_dump -U ${DB_USER} -d ${DB_NAME} -F p -f ${BACKUP_FILE}
# Comprimir
gzip ${BACKUP_FILE}
# Eliminar backups antiguos
find ${BACKUP_DIR} -name "app_padel_*.sql.gz" -mtime +${RETENTION_DAYS} -delete
# Log
echo "[$(date)] Backup completado: ${BACKUP_FILE}.gz" >> ${BACKUP_DIR}/backup.log
2. Configurar Permisos
sudo chmod +x /opt/backups/backup-db.sh
sudo chown postgres:postgres /opt/backups/backup-db.sh
3. Configurar Cron
sudo crontab -e
Añadir (backup diario a las 2 AM):
0 2 * * * /opt/backups/backup-db.sh
4. Backup Manual
# Backup manual
pg_dump -U app_padel app_padel > backup_$(date +%Y%m%d).sql
# Restaurar backup
psql -U app_padel app_padel < backup_20260131.sql
5. Backup en Cloud (Opcional)
Configurar sincronización con S3 o similar:
# Instalar AWS CLI
sudo apt install awscli -y
# Configurar credenciales
aws configure
# Añadir al script de backup
aws s3 cp ${BACKUP_FILE}.gz s3://tu-bucket/backups/
🔄 Script de Deploy Automatizado
Crear script deploy.sh:
#!/bin/bash
set -e
APP_DIR="/home/app-padel/app-padel/backend"
PM2_APP_NAME="app-padel-api"
echo "🚀 Iniciando deploy..."
cd $APP_DIR
echo "📥 Pull de código..."
git pull origin main
echo "📦 Instalando dependencias..."
npm ci --only=production
echo "🏗️ Compilando..."
npm run build
echo "🔄 Ejecutando migraciones..."
npx prisma migrate deploy
echo "🔄 Reiniciando aplicación..."
pm2 reload $PM2_APP_NAME
echo "✅ Deploy completado!"
# Health check
echo "🏥 Verificando salud..."
sleep 3
if curl -s http://localhost:3000/api/v1/health | grep -q '"success":true'; then
echo "✅ API funcionando correctamente"
else
echo "❌ Error: API no responde"
exit 1
fi
Hacer ejecutable:
chmod +x deploy.sh
📊 Monitoreo
1. PM2 Monit
pm2 monit
2. Logs
# Logs de aplicación
pm2 logs app-padel-api
# Logs de Nginx
sudo tail -f /var/log/nginx/app-padel-error.log
# Logs del sistema
sudo journalctl -u app-padel-api -f
3. Health Check
curl https://api.tudominio.com/api/v1/health
🛡️ Seguridad Adicional
Firewall (UFW)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
Fail2Ban
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
✅ Post-Deploy Checklist
- API responde correctamente
- HTTPS funcionando
- Webhooks de MercadoPago reciben notificaciones
- Emails enviándose correctamente
- Backups configurados
- Monitoreo activo
- Documentación actualizada
Última actualización: Enero 2026