Vamos paso a paso para que quede todo bien hecho. Usaremos Nginx + PHP-FPM + MariaDB (LEMP stack), que es más ligero y rápido que Apache para la mayoría de casos.
1. Actualiza todo y asegúrate de tener los paquetes necesarios
sudo apt update && sudo apt upgrade -y
sudo apt install nginx mariadb-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php-imagick unzip wget -y2. Configura MariaDB (base de datos para WordPress)
sudo mysql_secure_installation- Responde sí a todo (cambia contraseña root si no lo hiciste, elimina usuarios anónimos, etc.).
Crea la base de datos y usuario para WordPress:
sudo mysql -u root -pDentro de MySQL:
CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'TU_CONTRASEÑA_FUERTE_AQUÍ';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;3. Descarga e instala WordPress
Ve al directorio web estándar:
cd /var/www/
sudo mkdir html
cd html
sudo wget https://wordpress.org/latest.zip
sudo unzip latest.zip
sudo mv wordpress/* .
sudo rm -rf wordpress latest.zipDa permisos correctos (muy importante para seguridad):
sudo chown -R www-data:www-data /var/www/html/
sudo chmod -R 755 /var/www/html/4. Configura Nginx para WordPress
Crea un archivo de configuración específico:
sudo nano /etc/nginx/sites-available/wordpressPega este contenido (ajusta server_name si ya tienes dominio; por ahora usa _ para cualquier host):
server {
listen 80;
listen [::]:80;
server_name _; # Cambia por tu dominio cuando lo tengas (ej. ejemplo.com)
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # Cambia a php8.3-fpm.sock si es 24.04
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg|eot)$ {
expires 365d;
access_log off;
}
}Activa el sitio y elimina el default:
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t # Comprueba sintaxis
sudo systemctl reload nginx5. Configura WordPress (parte final en el navegador)
Abre tu navegador y ve a:
http://192.168.1.240- El instalador de WordPress aparecerá.
- Configura:
- Nombre de la base de datos: wordpress_db
- Usuario: wordpress_user
- Contraseña: la que pusiste
- Host: localhost
- Prefijo de tablas: wp_ (o cámbialo por seguridad, ej. mysite_)
- Sigue los pasos: título del sitio, usuario admin (no uses «admin»), contraseña fuerte, email.
¡Listo! Ya tendrás WordPress funcionando en local.
6. Medidas de seguridad recomendadas ANTES de abrir puertos 80/443
No abras aún los puertos en el router/firewall. Haz esto primero:
Instala plugin de seguridad (dentro de WordPress):
Wordfence (gratuito y muy bueno)
Sucuri Security
iThemes Security
Cambia prefijo de tablas (si no lo hiciste): Edita wp-config.php y cambia $table_prefix = ‘wp_’; a algo como $table_prefix = ‘xyz_’;
Desactiva edición de archivos desde el panel: Añade al final de wp-config.php:
define('DISALLOW_FILE_EDIT', true);Actualizaciones automáticas: En wp-config.php:
define('WP_AUTO_UPDATE_CORE', true);Permisos correctos (ya lo hicimos, pero verifica):
sudo find /var/www/html/ -type d -exec chmod 755 {} \;
sudo find /var/www/html/ -type f -exec chmod 644 {} \;
sudo chmod 640 /var/www/html/wp-config.php7. Próximos pasos (cuando estés listo para exponer)
Instala Certbot para HTTPS:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tudominio.comAbre puertos: sudo ufw allow ‘Nginx Full’
Forwardea 80/443 en tu router hacia 192.168.1.240
Usa Cloudflare (gratis) para DNS + protección DDoS + WAF (muy recomendado)
Pasos para configurar HTTPS y redirección en Nginx
1. Instala Certbot (si no lo tienes aún)
sudo apt update
sudo apt install certbot python3-certbot-nginx -y2. Abre los puertos 80 y 443 en el firewall (UFW)
sudo ufw allow 'Nginx Full' # Permite tanto 80 como 443
sudo ufw reload
sudo ufw status3. Ejecuta Certbot para obtener el certificado y configurar Nginx automáticamente
Certbot va a:
- Obtener el certificado Let’s Encrypt.
- Modificar tu configuración de Nginx.
- Configurar la redirección automática de HTTP → HTTPS.
Ejecuta este comando (usa tu usuario con sudo):
sudo certbot --nginx -d tudominio.esDurante el proceso te preguntará:
- Email → Pon uno real (para avisos de renovación).
- Aceptar términos → Sí.
- Compartir email con EFF → Opcional (puedes decir no).
- ¿Redirigir HTTP a HTTPS? → Elige 2 (Redirect) para que todas las peticiones HTTP vayan a HTTPS automáticamente.
Certbot modificará tu archivo de configuración de Nginx (probablemente /etc/nginx/sites-available/wordpress o default) y añadirá los bloques necesarios para HTTPS.
4. Verifica la configuración resultante (opcional pero recomendable)
Después de que Certbot termine, revisa el archivo modificado:
sudo nano /etc/nginx/sites-available/wordpress # o el que usesDeberías ver algo parecido a esto (Certbot lo crea automáticamente):
server {
listen 80;
listen [::]:80;
server_name tudominio.es;
# Redirección automática de HTTP a HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name tudominio.es;
ssl_certificate /etc/letsencrypt/live/tudominio.es/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tudominio.es/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # o php8.3-fpm.sock
}
# Resto de tu configuración anterior...
}5. Prueba y recarga Nginx
sudo nginx -t # Comprueba que no hay errores
sudo systemctl reload nginx6. Prueba final
- Abre en tu navegador: http://tudominio.es → Debe redirigir automáticamente a https://tudominio.es → Debe cargar WordPress con candado verde (seguro).
- Si usas WordPress, actualiza la URL del sitio:
- Entra en el panel de WordPress → Ajustes → Generales
- Cambia Dirección de WordPress (URL) y Dirección del sitio (URL) a: https://tudominio.es
Notas importantes para DuckDNS
Renovación automática del certificado: Certbot crea un cron job que renueva cada 90 días automáticamente. Puedes verificarlo con:
sudo systemctl status certbot.timerIP dinámica: DuckDNS actualiza tu IP cada pocos minutos. Certbot funciona bien con IPs dinámicas porque valida vía HTTP-01 challenge (puerto 80 debe estar accesible desde internet).
Si tienes problemas con la validación:
Asegúrate de que el puerto 80 está forwardeado en tu router hacia 192.168.1.240.
Temporalmente desactiva UFW si falla: sudo ufw disable (y vuelve a activar después).
¡Con esto ya tendrás tu WordPress accesible de forma segura por HTTPS con redirección automática!






