GitHub Actions en Next.js: CI/CD completo con tests, build y deploy a tu propio servidor
5 min readPrerrequisitos: proyecto Next.js en GitHub, Node.js 18+, acceso SSH a un VPS o servidor propio. No necesitas experiencia previa con GitHub Actions.
Vercel es cómodo, pero no siempre es la opción — por precio, por control, o porque el cliente tiene su propio servidor. GitHub Actions te permite tener CI/CD profesional en Next.js sin depender de ninguna plataforma: tests automáticos en cada PR, build verificado y deploy por SSH a tu VPS en cada push a main.
Deberías ver en la pestaña Actions: un job verde con los pasos 'Instalar dependencias', 'Ejecutar tests' y 'Verificar build'. Si ves 'npm ci failed', verifica que tienes package-lock.json commiteado.
`npm ci` en lugar de `npm install` es más rápido en CI porque instala exactamente lo que está en package-lock.json sin resoluciones. Siempre usa `npm ci` en pipelines.
El usuario SSH no debe ser root. Crea un usuario `deploy` con permisos solo en /var/www/mi-app. Las credenciales van como Secrets en GitHub: Settings → Secrets and variables → Actions — nunca en el YAML.
Deberías ver en el servidor: el proceso pm2 activo con status 'online'. Ejecuta `pm2 list` en el servidor para verificar. Si ves 'errored', revisa los logs con `pm2 logs mi-app`.
Para generar y añadir la clave al servidor: `ssh-keygen -t ed25519 -f ~/.ssh/deploy_key` y luego `ssh-copy-id -i ~/.ssh/deploy_key.pub deploy@tu-servidor`. El secret en GitHub es el contenido de deploy_key (sin .pub).
Lo que aprendiste: • CI corre en todos los branches — deploy solo en main • `npm ci` es más rápido y fiable que `npm install` en pipelines • El deploy por SSH ejecuta los mismos comandos que harías manualmente • Las credenciales van siempre como Secrets, nunca en el YAML • pm2 gestiona el proceso Node.js y lo mantiene vivo
Siguiente paso natural: añadir caché de dependencias con `actions/cache` para reducir el tiempo del pipeline de 3-4 minutos a menos de 1 minuto, y configurar notificaciones a Slack cuando el deploy falle.
Tutoriales cada dos semanas
Sin spam. Solo artículos técnicos cuando salen.
