¿Quieres montar tu propio servidor web en Debian 12 con Nginx, PHP y MariaDB? En esta guía te explico cómo hacerlo paso a paso, de manera sencilla y práctica. Está pensada para quienes están empezando con servidores Linux y buscan un entorno básico para probar ideas o experimentar, antes de dar el salto a algo más serio como un servidor en producción. Además, te dejo algunos consejos para mejorar el rendimiento y la seguridad. ¡Manos a la obra!
Conceptos Clave
- Servidor Web (Nginx): Escucha lo que piden los navegadores y les envía páginas web, ya sean archivos simples o dinámicos.
- Base de Datos (MariaDB): Guarda y organiza datos, como los usuarios de una app o los posts de un blog.
- PHP-FPM (PHP 8.2): El motor que permite a Nginx ejecutar código PHP. Usaremos la versión 8.2, que viene con Debian 12, para crear páginas que se adapten a lo que necesitas.
- HTTP y HTTPS: HTTP mueve la información en la web. HTTPS hace lo mismo, pero cifrado, para que nadie espíe tus datos.
Con esto en mente, ¡estás listo para avanzar!
Paso 1: Mantén tu Sistema al Día
Primero, asegura que tu Debian 12 esté actualizado. Abre la terminal y escribe:
sudo apt update
sudo apt upgrade -y
update
refresca la lista de paquetes disponibles, y upgrade
instala las últimas versiones de lo que ya tienes. El -y
dice «sí» a todo automáticamente, para que sea más rápido.
Paso 2: Instala Nginx, tu Servidor Web
Nginx es ligero, rápido y perfecto para empezar. Instálalo con:
sudo apt install nginx -y
Cuando acabe, comprueba que funciona: abre tu navegador y escribe la IP de tu servidor (la de tu VPS o máquina). Si ves «Welcome to Nginx!», ¡vas por buen camino!
Paso 3: Añade MariaDB para tus Datos
MariaDB es ideal para almacenar la información de tus proyectos. Instálala así:
sudo apt install mariadb-server -y
Después, asegura su instalación con:
sudo mysql_secure_installation
Te pedirá cosas como poner una contraseña para el usuario root, eliminar cuentas anónimas, desactivar accesos remotos innecesarios y borrar una base de datos de prueba. Responde «sí» a casi todo; es un paso rápido y esencial.
Crea una Base de Datos y un Usuario
Prepara una base de datos para tus aplicaciones. Entra a MariaDB con:
sudo mariadb
Y ejecuta estos comandos (personaliza nombres y contraseñas):
CREATE DATABASE mi_base_de_datos;
CREATE USER 'mi_usuario'@'localhost' IDENTIFIED BY 'mi_contraseña';
GRANT ALL PRIVILEGES ON mi_base_de_datos.* TO 'mi_usuario'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Esto crea una base de datos (mi_base_de_datos
) y un usuario (mi_usuario
) con acceso solo a ella. ¡Lista para usar!
Paso 4: Conecta Nginx con PHP 8.2
Para manejar páginas dinámicas, instala PHP-FPM 8.2 y el módulo para MariaDB:
sudo apt install php8.2-fpm php8.2-mysql -y
Ahora, configura Nginx para procesar archivos PHP. Abre el archivo por defecto:
sudo nano /etc/nginx/sites-available/default
Busca (o añade) la sección location ~ \.php$
y asegúrate de que quede así, usando el socket de PHP 8.2:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# Asegúrate que esta línea apunta al socket de tu versión de PHP
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
# Añade estas líneas si no existen dentro del bloque location
# include fastcgi_params;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Nota: A veces, las líneas include fastcgi_params;
y fastcgi_param SCRIPT_FILENAME...
son necesarias si no están incluidas por defecto en snippets/fastcgi-php.conf
Guarda (Ctrl+O, Enter, Ctrl+X en Nano) y reinicia los servicios:
sudo systemctl restart nginx
sudo systemctl restart php8.2-fpm
Esto hace que Nginx pase los archivos PHP a PHP-FPM 8.2 por un «socket», un canal interno que los conecta.
Paso 5: Prueba que Todo Funciona
Vamos a verificar que todo está bien. Crea un archivo de prueba:
sudo nano /var/www/html/info.php
Pega esto:
<?php
phpinfo();
?>
Guarda y cierra. En tu navegador, visita http:///info.php. Si aparece una página con detalles de PHP (busca «PHP Version 8.2.x»), ¡funciona perfecto!
Cuidado: Este archivo muestra info sensible. Bórralo con sudo rm /var/www/html/info.php
cuando termines, sobre todo si esto pasa de ser un experimento.
Paso 6: Cuida la Seguridad
Tu servidor ya está listo, pero protégelo con estos consejos:
- Firewall: Usa
ufw
para limitar el tráfico. Por ejemplo, permite solo SSH (puerto 22), HTTP (80) y HTTPS (443):
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
- Actualizaciones: Ejecuta
sudo apt update && sudo apt upgrade -y
cada cierto tiempo para mantener todo al día. - Contraseñas: Usa contraseñas fuertes y únicas para root, usuarios y bases de datos.
- HTTPS: Añadir cifrado es clave (te lo explico más abajo).
- Fail2ban: Instálalo con
sudo apt install fail2ban -y
para bloquear ataques de fuerza bruta. Su configuración básica ya es útil.
Virtual Hosts en Nginx
¿Quieres varios sitios web (como un blog y una tienda)? Usa virtual hosts para separarlos. Crea un archivo en /etc/nginx/sites-available/
(por ejemplo, misitio.conf
), configura tu sitio (incluye el bloque PHP si lo usas) y haz un enlace simbólico:
sudo ln -s /etc/nginx/sites-available/misitio.conf /etc/nginx/sites-enabled/
Comprueba que todo esté bien con sudo nginx -t y
reinicia Nginx:
sudo systemctl restart nginx
Sugerencias Extra para Mejorar tu Servidor
Dale un Impulso a PHP-FPM
Ajusta PHP-FPM para que rinda mejor. Edita /etc/php/8.2/fpm/pool.d/www.conf
y prueba con:
pm = dynamic
(ostatic
para un número fijo, oondemand
para ahorrar recursos).pm.max_children = 5
(Nota: Este valor es bajo, ideal para pruebas con poca RAM. Auméntalo según tu servidor si esperas más tráfico.)pm.start_servers = 2
(solo condynamic
)pm.min_spare_servers = 1
(solo condynamic
)pm.max_spare_servers = 3
(solo condynamic
)
Reinicia PHP-FPM para aplicar los cambios:
sudo systemctl restart php8.2-fpm
Añade HTTPS con Let’s Encrypt
Para que tu sitio use HTTPS, instala Certbot:
sudo apt install certbot python3-certbot-nginx -y
Requisito: Necesitas un dominio registrado (como tusitio.com) apuntando a la IP pública de tu servidor vía DNS.
Pide un certificado (reemplaza tu_dominio
con tu nombre de dominio real):
sudo certbot --nginx -d tu_dominio
Sigue las instrucciones (elige redirigir HTTP a HTTPS si quieres). Verifica la renovación automática:
sudo certbot renew --dry-run
Si todo va bien, tu sitio estará cifrado y seguro.
¡Y Listo!
Montar un servidor con Nginx, PHP 8.2 y MariaDB en Debian 12 es más fácil de lo que parece. Con estos pasos tienes un entorno funcional para probar aplicaciones PHP o aprender cómo funciona todo. Añade las mejoras y medidas de seguridad que necesites, y tendrás una base sólida para tus experimentos o futuros proyectos.
Deja una respuesta