Configurar VPS Ubuntu desde Cero: Guía Paso a Paso
Tienes el VPS contratado y la IP en la mano. Ahora toca convertirlo en un servidor web funcional y seguro. Esta guía cubre todo lo que necesitas: acceso SSH, hardening, Nginx, PHP, MySQL y SSL. Comandos reales, listos para ejecutar.
Antes de empezar: qué necesitas
Esta guía asume que tienes un VPS con Ubuntu 22.04 LTS recién aprovisionado. Es la distribución más usada en producción y la que tiene mejor soporte de paquetes a largo plazo. Ubuntu 24.04 también vale, los comandos son idénticos.
- →Acceso SSH como root: Tu proveedor te lo da al activar el VPS, normalmente por email o en el panel de control.
- →Tu terminal local: En macOS y Linux usas el terminal nativo. En Windows, descárgate PuTTY o activa WSL (Windows Subsystem for Linux).
- →La IP del servidor: La que aparece en el panel de tu proveedor. La necesitarás en cada paso.
Si todavía no tienes un VPS, mira la comparativa de mejores VPS en España antes de seguir.
Primer acceso y configuración básica
Lo primero es entrar, actualizar el sistema y crear un usuario con el que trabajar. Nunca uses root para el día a día.
1. Conectarse por SSH
ssh root@TU_IP_DEL_VPS La primera vez te pedirá confirmar la huella del servidor (escribe yes) y luego la contraseña root que te dio el proveedor.
2. Actualizar el sistema
apt update && apt upgrade -y Esto puede tardar un par de minutos. Deja que termine antes de seguir.
3. Configurar la zona horaria
timedatectl set-timezone Europe/Madrid Los logs del servidor tendrán la hora correcta. Parece un detalle menor hasta que intentas debuggear un error a las 3 AM.
4. Crear un usuario no-root
adduser deploy
usermod -aG sudo deploy adduser pedirá una contraseña y algunos datos opcionales. El nombre deploy es convención, usa el que quieras. El segundo comando lo añade al grupo sudo para que pueda ejecutar comandos administrativos cuando haga falta.
Hardening de seguridad (no te lo saltes)
Un VPS nuevo sin hardening lleva literalmente menos de un minuto expuesto antes de que bots automatizados empiecen a probar contraseñas en el puerto 22. No es exageración: es lo que pasa en internet hoy. Estos pasos son obligatorios, no opcionales.
Configurar claves SSH (adiós contraseñas)
Esto se hace en tu máquina local, no en el servidor:
# Generar par de claves (ed25519 es más seguro y compacto que RSA)
ssh-keygen -t ed25519 -C "tu@email.com"
# Copiar la clave pública al servidor
ssh-copy-id deploy@TU_IP_DEL_VPS Después de esto, podrás entrar con ssh deploy@TU_IP sin contraseña. La clave privada queda en tu máquina.
Endurecer la configuración de SSH
Entra al servidor como deploy y edita la configuración de SSH:
sudo nano /etc/ssh/sshd_config Busca y cambia (o añade) estas líneas:
PermitRootLogin no
PasswordAuthentication no
Port 2222 Guarda y reinicia el servicio SSH:
sudo systemctl restart sshd Importante: No cierres la sesión actual antes de abrir una segunda terminal y verificar que puedes entrar con el nuevo puerto (ssh -p 2222 deploy@TU_IP). Si cierras sin verificar y hay un error, te quedas sin acceso.
Firewall con UFW
sudo ufw allow 2222/tcp # Puerto SSH (ajusta si no lo cambiaste)
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
sudo ufw status UFW bloqueará todo el resto del tráfico entrante. Simple y efectivo.
fail2ban: banear IPs que insisten
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban fail2ban monitoriza los logs de SSH y banea automáticamente las IPs que fallan demasiados intentos de login. Con la configuración por defecto ya funciona bien para la mayoría de casos.
Instalar Nginx como servidor web
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx Si visitas la IP del servidor en el navegador deberías ver la página de bienvenida de Nginx. Buen síntoma.
Crea un virtual host para tu dominio. Crea el archivo de configuración:
sudo nano /etc/nginx/sites-available/tudominio.com Contenido básico del virtual host:
server {
listen 80;
server_name tudominio.com www.tudominio.com;
root /var/www/tudominio.com/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
} sudo ln -s /etc/nginx/sites-available/tudominio.com /etc/nginx/sites-enabled/
sudo nginx -t # Verificar configuración
sudo systemctl reload nginx PHP-FPM para WordPress y aplicaciones PHP
sudo apt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd -y
sudo systemctl enable php8.2-fpm Actualiza el virtual host de Nginx para que pase las peticiones PHP a FPM. Añade este bloque dentro del servidor:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
} Recarga Nginx después de cualquier cambio en la configuración: sudo systemctl reload nginx.
MySQL / MariaDB para la base de datos
sudo apt install mariadb-server -y
sudo mysql_secure_installation mysql_secure_installation te guía por un asistente interactivo. Di sí a todo: eliminar usuarios anónimos, desactivar login root remoto, eliminar base de datos de test. Una vez terminado, crea tu base de datos y usuario:
sudo mysql -u root -p
-- Dentro del prompt MySQL:
CREATE DATABASE mi_web;
CREATE USER 'web_user'@'localhost' IDENTIFIED BY 'contraseña_muy_segura';
GRANT ALL PRIVILEGES ON mi_web.* TO 'web_user'@'localhost';
FLUSH PRIVILEGES;
EXIT; Usa una contraseña larga y aleatoria. Guárdala en un gestor de contraseñas, no en un post-it.
SSL con Let's Encrypt (gratis)
Antes de ejecutar esto, asegúrate de que el DNS de tu dominio apunta ya a la IP del VPS y que han pasado al menos unos minutos para que propague.
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tudominio.com -d www.tudominio.com Certbot detecta el virtual host de Nginx, obtiene el certificado y edita la configuración automáticamente para servir HTTPS. La renovación automática ya está configurada vía systemd timer.
Para verificar que la renovación funciona:
sudo certbot renew --dry-run Si sale "Congratulations, all simulated renewals succeeded" estás bien.
Monitorización básica
Con el servidor ya funcionando, necesitas saber qué está pasando. Estos tres comandos te dan toda la información que necesitas en el día a día:
htop # Procesos en tiempo real, CPU y RAM
df -h # Espacio en disco por partición
free -m # Memoria RAM disponible Para alertas de uptime sin coste, crea una cuenta en UptimeRobot (gratuito hasta 50 monitores) y añade la URL de tu sitio. Te avisará por email si el servidor cae.
Si prefieres no lidiar con toda esta configuración, echa un vistazo a los paneles de control para VPS — CyberPanel es gratuito y automatiza la mayor parte de estos pasos.
¿No estás seguro de necesitar un VPS?
Responde 7 preguntas sobre tu proyecto y te decimos si necesitas un VPS, hosting compartido o algo intermedio.
Encontrar mi hosting ideal →Preguntas frecuentes sobre configuración VPS Ubuntu
¿Ubuntu 22.04 o Ubuntu 24.04 para un VPS? +
Para producción en 2026, Ubuntu 22.04 LTS sigue siendo la opción más segura. Tiene soporte hasta abril 2027 (y hasta 2032 con ESM) y todos los tutoriales y documentación cubren esta versión. Ubuntu 24.04 está perfectamente bien pero aún es relativamente nuevo y algunos paquetes de terceros todavía no lo soportan oficialmente. Si arrancas hoy, cualquiera de las dos vale.
¿Nginx o Apache para un VPS Ubuntu? +
Nginx para proyectos nuevos, sin duda. Consume menos RAM, maneja mejor la concurrencia y es más rápido sirviendo archivos estáticos. Apache sigue siendo buena opción si tienes archivos .htaccess existentes de un hosting compartido o necesitas módulos que solo existen para Apache. Para WordPress en VPS, Nginx con PHP-FPM es la combinación estándar y la que da mejores resultados en benchmarks.
¿Cuánta RAM mínima para Nginx + PHP-FPM + MySQL? +
El sistema base Ubuntu + Nginx consume unos 200–300 MB. PHP-FPM con 2–4 workers añade otros 100–200 MB. MySQL/MariaDB con configuración por defecto consume 400–600 MB. En total, necesitas al menos 1 GB de RAM para arrancar cómodamente, pero 2 GB es el mínimo real para un WordPress con tráfico. Con 4 GB tienes margen para caché, picos de tráfico y otros servicios.
¿Puedo instalar WordPress en un VPS Ubuntu con esta guía? +
Sí. Con Nginx, PHP-FPM y MySQL instalados siguiendo esta guía, la instalación de WordPress se reduce a: descargar WordPress en el directorio web, crear la base de datos, ejecutar el wizard de instalación desde el navegador. El proceso completo no lleva más de 15 minutos si ya tienes el servidor configurado. Alternativamente, si quieres una interfaz gráfica para gestionar múltiples sitios, mira CyberPanel, que incluye un WordPress manager.
¿Qué hago si me quedo sin acceso SSH al servidor? +
Todos los proveedores de VPS tienen una consola de emergencia o VNC en el panel de control que funciona aunque SSH esté caído. Desde ahí puedes acceder al servidor y corregir la configuración de SSH. En Hostinger, IONOS y la mayoría de proveedores se llama "Console" o "VNC". Si bloqueaste el firewall por error, también puedes desactivarlo temporalmente desde esa consola con ufw disable.