Si llevas tiempo trasteando en tu Homelab, seguro que has pasado por la fase de editar el archivo hosts de tu PC cada vez que creas un proyecto nuevo. Spoiler: es una mala práctica. Si quieres profesionalizarte y dejar de jugar, necesitas replicar una infraestructura real.
En Millaredos nos hemos propuesto construir un entorno de desarrollo definitivo, y esta es la primera entrega de una serie donde transformaremos un servidor Linux básico en una bestia de productividad.
La hoja de ruta de esta serie será:
- La Base (Estás aquí): Servidor Web Apache seguro con HTTPS y DNS centralizado.
- El Código: Sistema de versionado con Gitea (nuestro GitHub privado) y CI/CD.
- Los Datos: Servidor de Base de Datos (MariaDB) accesible en red.
- El Flujo: Entorno de desarrollo remoto conectado a VS Code.
Hoy, nos ponemos el casco de obra para cimentar la base: Apache, SSL y DNS.
🛠️ El Escenario: Tu Laboratorio Virtual
Para seguir esta guía, partimos de una infraestructura de red con dominio propio (Active Directory). En nuestro caso, hemos usado millaredos.local.
No importa si virtualizas sobre Hyper-V (con Windows Server 2022 o 2012 R2 como base 1111) o si eres del equipo Proxmox. Lo esencial es que tengas:
- Un Controlador de Dominio (DC): Windows Server gestionando el DNS.
- Un Servidor Web: Una VM con Debian (recomendado por su robustez frente a Windows para servir web 2222).
- Clientes: Equipos unidos al dominio para las pruebas.
💡 ¿Aún no tienes tu laboratorio listo?
Si empiezas de cero, echa un vistazo a nuestra guía sobre cómo crear un entorno de pruebas en Proxmox y configura tus clientes con Windows 11 en laboratorio. Son el punto de partida ideal.
Paso 1: DNS Centralizado (El Maestro de la Orquesta)
Olvídate de editar archivos locales. Si tienes un Controlador de Dominio, úsalo. La forma correcta de que tus equipos encuentren tus webs es mediante registros DNS tipo A 3.
1.1. Obtener la IP del Servidor Web
En tu terminal Debian, averigua su IP con:
Bash
hostname -I
(Supongamos que es 192.168.1.50 4).
1.2. Crear Registros en el DC
Vete a tu Windows Server, abre el Administrador de DNS (dnsmgmt.msc) y, en tu zona de búsqueda directa (millaredos.local), crea estos registros apuntando a la IP de tu Debian 5:
| Nombre (Host) | Dirección IP | Función |
| web | 192.168.1.50 | Servidor principal (Dashboard) |
| gitea | 192.168.1.50 | Ojo: Lo usaremos para el repositorio en el siguiente post. |
| w12 | 192.168.1.50 | Proyecto 1 |
| w13 | 192.168.1.50 | Proyecto 2 |
Una vez hecho, lanza un ipconfig /flushdns en tus clientes6. Si haces ping a w12.millaredos.local y responde la IP del Debian, ya tienes la mitad del trabajo hecho7.
Paso 2: Apache y Estructura de Carpetas
En Debian, como usuario root, instalamos el stack básico. Nada de sudo si ya eres root8888:
Bash
apt update && apt install apache2 php libapache2-mod-php -y
El orden es vital. Vamos a crear una estructura limpia para alojar los proyectos separados 9:
Bash
mkdir -p /var/www/w12
mkdir -p /var/www/w13
mkdir -p /var/www/html # Para el Dashboard general
Paso 3: SSL Wildcard Autofirmado (Adiós alertas rojas)
Aquí es donde subimos el nivel. En un entorno local, usar HTTP es «cutre». Vamos a forzar HTTPS con un certificado Wildcard (*.millaredos.local) para cifrar todo el tráfico.
3.1. Instalación en el Servidor
Movemos los certificados (.pem y .key) a las rutas seguras de Debian y ajustamos permisos estrictos para la clave privada 10:
Bash
mv certificate.pem /etc/ssl/certs/millaredos.local.pem
mv private.key /etc/ssl/private/millaredos.local.key
chmod 600 /etc/ssl/private/millaredos.local.key
a2enmod ssl # Activamos el módulo SSL
🗣️ ¿Quieres crear tu propia Autoridad Certificadora (CA)?
Generar estos certificados correctamente da para un artículo entero. Si os interesa que explique cómo crear una CA Raíz y firmar vuestros propios wildcards para que duren años, dejádmelo en los comentarios y prepararé un tutorial detallado.
3.2. El «Truco» de la Confianza en Clientes
Como el certificado es propio, los navegadores de tu red no confiarán en él por defecto. La solución profesional es instalar el certificado público (.pem) en el almacén de «Entidades de certificación raíz de confianza» de tus equipos Windows11.
El detalle de Firefox: Ojo, porque Firefox va por libre e ignora el almacén de Windows. Tendrás que importar el certificado manualmente en sus ajustes y marcar la casilla «Confiar en esta CA para identificar sitios web» 12. Si no lo haces, seguirás viendo la alerta de seguridad.
Paso 4: VirtualHosts Profesionales (La Configuración Final)
Vamos a configurar Apache con una lógica de «Plan A y Plan B».
El «Plan B»: Dashboard Catch-all
Si alguien pone la IP a pelo o un nombre que no existe, queremos que caiga en un Dashboard seguro, no en un error. Crea el archivo /etc/apache2/sites-available/000-dashboard.conf (el 000 asegura que cargue primero) 13:
Apache
<VirtualHost *:80>
ServerName web.millaredos.local
ServerAlias localhost 192.168.1.50
DocumentRoot /var/www/html
# Permisos básicos
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:443>
# Configuración HTTPS idéntica apuntando al Dashboard
ServerName web.millaredos.local
SSLEngine On
SSLCertificateFile /etc/ssl/certs/millaredos.local.pem
SSLCertificateKeyFile /etc/ssl/private/millaredos.local.key
DocumentRoot /var/www/html
# ... (mismo bloque Directory)
</VirtualHost>
El «Plan A»: Tus Proyectos Reales
Ahora definimos los proyectos. Fíjate en el detalle: redirigimos forzosamente HTTP a HTTPS. Crea /etc/apache2/sites-available/999-talay-final.conf14141414:
Apache
# PROYECTO W12
<VirtualHost *:80>
ServerName w12.millaredos.local
Redirect permanent / https://w12.millaredos.local/
</VirtualHost>
<VirtualHost *:443>
ServerName w12.millaredos.local
DocumentRoot /var/www/w12
# SSL Obligatorio
SSLEngine On
SSLCertificateFile /etc/ssl/certs/millaredos.local.pem
SSLCertificateKeyFile /etc/ssl/private/millaredos.local.key
<Directory /var/www/w12>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
# ... Repetir bloque para w13, w14, etc.
Paso 5: Despliegue y Verificación
Para terminar, activamos los módulos necesarios (proxy para el futuro Gitea), habilitamos los sitios nuevos y limpiamos el default 15:
Bash
a2enmod proxy proxy_http headers rewrite
a2ensite 000-dashboard.conf 999-talay-final.conf
a2dissite 000-default.conf
Antes de reiniciar, siempre, siempre verifica la sintaxis16:
Bash
apache2ctl configtest
Si recibes un Syntax OK, reinicia el servicio17:
Bash
systemctl restart apache2
¿El Resultado?
Ahora tienes un servidor web que responde por HTTPS, con un DNS centralizado y listo para escalar. Si entras a http://w12.millaredos.local, saltarás automáticamente a la versión segura.
🔜 En el próximo artículo: Aprovecharemos esa entrada DNS gitea que creamos hoy. Vamos a instalar Gitea en modo «Bare Metal» (sin Docker, para máximo rendimiento) y configuraremos un Proxy Inverso en Apache para ocultar el puerto 3000. ¡Suscríbete para no perdértelo!


