Configurar proyectos web en local suele empezar con la típica dirección <code>localhost/mi-proyectocode>. Aunque funciona, es poco profesional y mezcla todas las configuraciones en un mismo saco. La solución técnica es el host virtual (virtual host), que permite que tu ordenador asocie un nombre de dominio falso (como <code>tienda.localcode>) a una carpeta específica de tu disco duro.
La anatomía de un sitio bien configurado
En Ubuntu y otras distribuciones basadas en Debian, Apache organiza los sitios en dos carpetas clave dentro de <code>/etc/apache2/code>:
-
sites-available: donde guardas los borradores de tus configuraciones.
-
sites-enabled: donde Apache busca los sitios que realmente deben estar encendidos.
Para que un sitio funcione, necesitas tres cosas: un archivo <code>.confcode> con las reglas, un enlace simbólico que lo active y una entrada en tu "agenda" del sistema (el archivo <code>/etc/hostscode>). Esta estructura permite que el archivo principal de Apache simplemente contenga la línea <code>IncludeOptional sites-enabled/*.confcode>, cargando automáticamente todo lo que hayas activado.
Automatizando el proceso con un script
Escribir estos archivos a mano es repetitivo y propenso a errores. Por eso, hemos diseñado un pequeño programa que hace el trabajo sucio por ti: crea la carpeta, genera el archivo de configuración, añade el dominio a tus hosts locales y reinicia el servidor.
El código del script (<code>crear-sitio.shcode>):
<code class="code-container formatted ng-tns-c1743905215-197">#!/bin/bash
# Comprobamos que tengas permisos de administrador
if [ "$EUID" -ne 0 ]; then
echo "Por favor, usa: sudo ./crear-sitio.sh"
exit
fi
# Recogemos la información necesaria
read -p "Dominio deseado (ej: miproyecto.local): " DOMAIN
read -p "Ruta de la carpeta (ej: /var/www/html/miproyecto): " DIR
# 1. Crear la carpeta si no existe y dar permisos al servidor
if [ ! -d "$DIR" ]; then
mkdir -p "$DIR"
chown -R www-data:www-data "$DIR"
echo "Carpeta creada en $DIR"
fi
# 2. Crear la configuración de Apache
echo "<VirtualHost *:80>
ServerName $DOMAIN
DocumentRoot $DIR
<Directory $DIR>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
</VirtualHost>" > "/etc/apache2/sites-available/$DOMAIN.conf"
# 3. Engañar al sistema para que reconozca el dominio local
if ! grep -q "$DOMAIN" /etc/hosts; then
echo "127.0.0.1 $DOMAIN" >> /etc/hosts
echo "Dominio añadido a /etc/hosts"
fi
# 4. Activar el sitio y refrescar el servidor
a2ensite "$DOMAIN.conf" > /dev/null
systemctl reload apache2
echo "-----------------------------------------------"
echo "¡Hecho! Entra en: http://$DOMAIN"
echo "-----------------------------------------------"
code>
Explicación paso a paso de lo que ocurre
Cuando ejecutas este script, suceden cuatro eventos críticos:Gestión de archivos: El script verifica si la carpeta existe. Si no, la crea y le asigna el usuario <code>www-datacode> (el "usuario" de Apache), asegurando que el servidor pueda leer los archivos.
-
Creación del host: Se genera el archivo en <code>sites-availablecode>. La directiva <code>AllowOverride Allcode> es vital para que funcionen los archivos <code>.htaccesscode> (comunes en WordPress o Laravel).
-
Resolución de nombres: Se añade el dominio al archivo <code>/etc/hostscode>. Esto hace que tu ordenador resuelva <code>miproyecto.localcode> hacia tu propia IP (<code>127.0.0.1code>) en lugar de buscarlo en internet.
-
Activación: El comando <code>a2ensitecode> crea el enlace simbólico hacia <code>sites-enabledcode>. Es una herramienta escrita en Perl que evita errores de rutas manuales.
Matices y verificación
Una vez terminado, puedes usar <code>sudo apache2ctl -Scode> para ver el listado de todos tus dominios activos.
Ten en cuenta que en Debian puro, es posible que debas entrar como root con <code>su -code> si tu usuario no está en el grupo de sudoers. Además, si instalas aplicaciones como phpMyAdmin manualmente, asegúrate de indicar la ruta exacta (como <code>/usr/share/phpmyadmincode>) cuando el script te lo pida.
Este método es universal para el ecosistema Debian. Al usarlo, garantizas que tu configuración sigue las mejores prácticas, facilitando la migración de tus proyectos a servidores de producción en el futuro.