Antes de lanzar tu VPS a producción, asegúrate de que todo está configurado correctamente. Un error ahora puede costarte horas (o días) después.
Esta checklist cubre los 50 puntos esenciales.
Seguridad (Crítico)
Acceso SSH
- Cambiar puerto SSH (no usar 22)
- Deshabilitar login root por SSH
- Usar solo claves SSH (no contraseñas)
- Eliminar claves SSH no usadas
- Configurar timeout de sesiones inactivas
# Verificar configuración SSH
grep -E "Port|PermitRootLogin|PasswordAuthentication" /etc/ssh/sshd_config
Firewall
- UFW/iptables activo
- Solo puertos necesarios abiertos
- Puerto SSH personalizado permitido
- Fail2ban instalado y configurado
- Rate limiting en puertos críticos
# Verificar UFW
sudo ufw status verbose
Sistema
- Sistema actualizado (apt update && upgrade)
- Actualizaciones automáticas de seguridad
- Usuario no-root para tareas diarias
- Sudo configurado correctamente
- Contraseñas fuertes en todos los servicios
# Verificar actualizaciones pendientes
apt list --upgradable
Aplicación
- Sin credenciales por defecto
- Archivos sensibles protegidos (.env, config)
- Debug desactivado en producción
- Logs no exponen información sensible
- Headers de seguridad configurados
Rendimiento
Servidor web
- Gzip/Brotli habilitado
- Caché de estáticos configurada
- Keep-alive activo
- Worker processes optimizados
- Timeouts configurados
# Verificar compresión
curl -H "Accept-Encoding: gzip" -I https://tudominio.com
PHP (si aplica)
- OPcache habilitado y configurado
- memory_limit adecuado
- max_execution_time razonable
- PHP-FPM workers calculados
- Sesiones en Redis (si hay tráfico)
# Verificar OPcache
php -i | grep opcache.enable
Base de datos
- innodb_buffer_pool_size optimizado
- Slow query log habilitado
- Índices en columnas frecuentes
- Conexiones máximas configuradas
- Query cache (si MySQL 5.7)
# Verificar config MySQL
mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
Caché
- Redis/Memcached instalado (si necesario)
- Object cache configurado
- Page cache (si alto tráfico)
- CDN configurado (opcional pero recomendado)
Backups
Configuración
- Backup automático diario configurado
- Backup de base de datos separado
- Backup de archivos del sitio
- Backup de configuraciones del servidor
- Retención definida (7-30 días)
Verificación
- Backup probado (restauración real)
- Almacenamiento externo (no solo en VPS)
- Notificación si backup falla
- Documentado proceso de restauración
# Verificar último backup
ls -la /backups/
SSL/HTTPS
- Certificado SSL válido instalado
- Renovación automática configurada
- Redirect HTTP → HTTPS activo
- HSTS habilitado
- SSL Labs grado A o superior
# Verificar certificado
echo | openssl s_client -connect tudominio.com:443 2>/dev/null | openssl x509 -noout -dates
DNS
- Registros A apuntando correctamente
- Registro www configurado (CNAME o A)
- TTL apropiado (no muy bajo)
- SPF si envías email
- DMARC si envías email
# Verificar DNS
dig tudominio.com +short
dig www.tudominio.com +short
Monitorización
Básica
- Uptime monitor configurado (UptimeRobot, etc.)
- Alertas de disco (>80%)
- Alertas de memoria (>90%)
- Alertas de CPU (load > cores)
- Email/Telegram para alertas
Logs
- Logs de acceso activos
- Logs de error activos
- Rotación de logs configurada
- Centralización (opcional)
# Verificar rotación
cat /etc/logrotate.d/nginx
Aplicación específica
WordPress
- WP_DEBUG = false
- Claves únicas en wp-config.php
- Prefijo de tablas personalizado
- Plugins de seguridad (Wordfence/Sucuri)
- Actualizaciones automáticas menores
Node.js
- PM2 gestionando la app
- NODE_ENV = production
- Logs configurados
- Startup en arranque
- Cluster mode si múltiples cores
Laravel/Django
- APP_DEBUG = false
- Caché de rutas/config
- Migraciones aplicadas
- Storage con permisos correctos
- Queue workers si usas colas
Documentación
- IP del servidor documentada
- Credenciales en gestor seguro
- Proceso de deploy documentado
- Proceso de rollback documentado
- Contactos de emergencia
Antes del lanzamiento final
Tests
- Sitio funciona desde IP externa
- Formularios funcionan
- Pagos funcionan (si aplica)
- Emails se envían correctamente
- Móvil funciona correctamente
Performance
- PageSpeed > 80 móvil
- TTFB < 600ms
- Sin errores 404 importantes
- Sin errores de consola críticos
# Test básico de velocidad
curl -w "TTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" -o /dev/null -s https://tudominio.com
Script de verificación rápida
#!/bin/bash
# /root/scripts/check-production.sh
echo "=== CHECKLIST VPS PRODUCCIÓN ==="
echo ""
echo "--- SEGURIDAD ---"
echo -n "UFW activo: "
sudo ufw status | grep -q "Status: active" && echo "✓" || echo "✗"
echo -n "Fail2ban activo: "
systemctl is-active fail2ban >/dev/null && echo "✓" || echo "✗"
echo -n "Root SSH deshabilitado: "
grep -q "PermitRootLogin no" /etc/ssh/sshd_config && echo "✓" || echo "✗"
echo ""
echo "--- SERVICIOS ---"
echo -n "Nginx: "
systemctl is-active nginx >/dev/null && echo "✓" || echo "✗"
echo -n "PHP-FPM: "
systemctl is-active php8.2-fpm >/dev/null && echo "✓" || echo "✗"
echo -n "MySQL: "
systemctl is-active mariadb >/dev/null && echo "✓" || echo "✗"
echo ""
echo "--- RECURSOS ---"
echo -n "Disco (<80%): "
DISK=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
[ $DISK -lt 80 ] && echo "✓ ($DISK%)" || echo "✗ ($DISK%)"
echo -n "RAM (<90%): "
RAM=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
[ $RAM -lt 90 ] && echo "✓ ($RAM%)" || echo "✗ ($RAM%)"
echo ""
echo "--- SSL ---"
echo -n "Certificado válido: "
echo | openssl s_client -connect localhost:443 2>/dev/null | openssl x509 -noout -checkend 86400 && echo "✓" || echo "✗"
echo ""
echo "--- BACKUPS ---"
echo -n "Backup reciente (<24h): "
BACKUP=$(find /backups -name "*.gz" -mtime -1 2>/dev/null | head -1)
[ -n "$BACKUP" ] && echo "✓" || echo "✗"
echo ""
echo "=== FIN CHECKLIST ==="
Preguntas frecuentes
¿Cuánto tiempo lleva preparar un VPS para producción?
Con experiencia, 2-4 horas para una configuración completa. Sin experiencia, puede llevar 1-2 días. Usar esta checklist acelera el proceso significativamente.
¿Qué es lo más importante de la checklist?
Seguridad (SSH, firewall, fail2ban) y backups. Un VPS comprometido o sin backups puede significar pérdida total. El rendimiento se puede optimizar después.
¿Debo completar todos los puntos?
Los marcados como críticos sí. Otros dependen de tu caso: si no usas PHP, ignora esos puntos. Adapta la checklist a tu stack.
¿Cada cuánto debo revisar esta checklist?
Completa antes del lanzamiento. Después, revisa mensualmente los puntos de seguridad y backups. Tras cambios importantes, verifica los puntos afectados.
¿Puedo automatizar esta verificación?
Parcialmente. El script incluido verifica lo básico. Herramientas como Ansible pueden automatizar más. Pero algunos puntos requieren verificación manual.
Nuestra recomendación
Prioridad 1 (antes de lanzar):
- Seguridad SSH completa
- Firewall activo
- SSL funcionando
- Backup configurado y probado
Prioridad 2 (primeros días):
- Monitorización activa
- Rendimiento básico
- Logs configurados
Prioridad 3 (optimización):
- Caché avanzado
- CDN
- Fine-tuning
¿No quieres gestionar todo esto? La administración gestionada de Avantys incluye toda esta configuración y mantenimiento continuo.
Conclusión
Esta checklist es tu seguro contra problemas en producción. Tómate el tiempo de verificar cada punto antes de lanzar. Es mucho más fácil prevenir que solucionar.
Guarda esta página y úsala en cada nuevo VPS que configures.
¿Necesitas un VPS listo para producción? Explora los VPS de Avantys con configuración base de seguridad incluida.
¿Quieres que lo hagamos por ti?
En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.