crear un dominio local en linux
Wed Oct 01 2025 15:09:53 GMT+0000 (Coordinated Universal Time)
1. Instalar Apache2 (si no está instalado)
bash
# Ubuntu/Debian
sudo apt update
sudo apt install apache2
# CentOS/RHEL/Fedora
sudo dnf install httpd
2. Estructura de archivos importantes
Configuración principal: /etc/apache2/apache2.conf
Sites disponibles: /etc/apache2/sites-available/
Sites activos: /etc/apache2/sites-enabled/
Document root por defecto: /var/www/html/
3. Crear un Virtual Host
Paso 1: Crear el directorio del sitio
bash
sudo mkdir -p /var/www/misitio.local/public_html
sudo mkdir -p /var/www/misitio.local/logs
Paso 2: Crear archivo de prueba
bash
sudo nano /var/www/misitio.local/public_html/index.html
Contenido del archivo:
html
<!DOCTYPE html>
<html>
<head>
<title>Mi Sitio Local</title>
</head>
<body>
<h1>¡Bienvenido a misitio.local!</h1>
<p>Este es un virtual host de prueba.</p>
</body>
</html>
Paso 3: Configurar permisos
bash
sudo chown -R $USER:$USER /var/www/misitio.local/public_html
sudo chmod -R 755 /var/www
4. Crear archivo de Virtual Host
bash
sudo nano /etc/apache2/sites-available/misitio.local.conf
Contenido del archivo:
apache
<VirtualHost *:80>
# Dirección de email del administrador (opcional)
ServerAdmin webmaster@misitio.local
# Directorio raíz del sitio
DocumentRoot /var/www/misitio.local/public_html
# Dominio del sitio
ServerName misitio.local
ServerAlias www.misitio.local
# Archivos de log
ErrorLog /var/www/misitio.local/logs/error.log
CustomLog /var/www/misitio.local/logs/access.log combined
# Configuraciones adicionales
<Directory /var/www/misitio.local/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
5. Activar el Virtual Host
bash
# Activar el sitio
sudo a2ensite misitio.local.conf
# Desactivar sitio por defecto (opcional)
sudo a2dissite 000-default.conf
# Recargar Apache
sudo systemctl reload apache2
6. Configurar el archivo hosts
bash
sudo nano /etc/hosts
Agregar esta línea:
text
127.0.0.1 misitio.local www.misitio.local
7. Verificar la configuración
bash
# Verificar sintaxis de Apache
sudo apache2ctl configtest
# Reiniciar Apache
sudo systemctl restart apache2
8. Probar el sitio
Abre tu navegador y visita: http://misitio.local
Configuración adicional útil
Para HTTPS (opcional)
bash
# Habilitar módulo SSL
sudo a2enmod ssl
# Crear certificado auto-firmado
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/misitio.local.key \
-out /etc/ssl/certs/misitio.local.crt
Virtual Host con HTTPS
apache
<VirtualHost *:443>
ServerName misitio.local
DocumentRoot /var/www/misitio.local/public_html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/misitio.local.crt
SSLCertificateKeyFile /etc/ssl/private/misitio.local.key
</VirtualHost>
Comandos útiles
bash
# Ver sitios activos
sudo apache2ctl -S
# Ver módulos activos
sudo apache2ctl -M
# Reiniciar Apache
sudo systemctl restart apache2
# Ver estado de Apache
sudo systemctl status apache2
¡Listo! Ahora tienes un dominio local funcionando con Apache2. Puedes repetir estos pasos para crear tantos virtual hosts como necesites.
para laravel
Te explico cómo configurar un Virtual Host para Laravel en Apache2:
1. Estructura de directorios de Laravel
En Laravel, el document root debe apuntar a la carpeta public:
text
/var/www/tu-proyecto-laravel/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/ ← Esta es la carpeta raíz para Apache
├── resources/
├── routes/
├── storage/
└── vendor/
2. Crear el Virtual Host para Laravel
bash
sudo nano /etc/apache2/sites-available/laravel.local.conf
Contenido del archivo:
apache
<VirtualHost *:80>
ServerName laravel.local
ServerAlias www.laravel.local
DocumentRoot /var/www/tu-proyecto-laravel/public
ServerAdmin admin@laravel.local
<Directory /var/www/tu-proyecto-laravel/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
FallbackResource /index.php
</Directory>
# Configuración específica para Laravel
<Directory /var/www/tu-proyecto-laravel>
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
# Logs
ErrorLog /var/log/apache2/laravel_error.log
CustomLog /var/log/apache2/laravel_access.log combined
# Headers para mejor seguridad y performance
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-XSS-Protection "1; mode=block"
</VirtualHost>
3. Configuración alternativa más específica para Laravel
apache
<VirtualHost *:80>
ServerName laravel.local
DocumentRoot /var/www/tu-proyecto-laravel/public
<Directory /var/www/tu-proyecto-laravel/public>
# Habilitar rewrite module
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Configuraciones de seguridad y permisos
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Configuración para carpeta storage (importante para Laravel)
Alias /storage /var/www/tu-proyecto-laravel/storage/app/public
<Directory /var/www/tu-proyecto-laravel/storage/app/public>
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/laravel_error.log
CustomLog ${APACHE_LOG_DIR}/laravel_access.log combined
</VirtualHost>
4. Configurar permisos de Laravel
bash
# Navegar al directorio del proyecto
cd /var/www/tu-proyecto-laravel
# Permisos para storage y cache
sudo chown -R $USER:www-data /var/www/tu-proyecto-laravel
sudo find /var/www/tu-proyecto-laravel -type f -exec chmod 664 {} \;
sudo find /var/www/tu-proyecto-laravel -type d -exec chmod 775 {} \;
# Permisos específicos para storage y bootstrap/cache
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
# Permisos para el usuario www-data (Apache)
sudo chown -R www-data:www-data storage bootstrap/cache
5. Activar el sitio y módulos necesarios
bash
# Activar módulos necesarios
sudo a2enmod rewrite
sudo a2enmod headers
# Activar el sitio de Laravel
sudo a2ensite laravel.local.conf
# Desactivar sitio por defecto (opcional)
sudo a2dissite 000-default.conf
# Recargar configuración
sudo systemctl reload apache2
6. Configurar el archivo hosts
bash
sudo nano /etc/hosts
Agregar:
text
127.0.0.1 laravel.local
7. Configurar .env y aplicación Laravel
bash
# Copiar archivo de entorno
cp .env.example .env
# Generar key de la aplicación
php artisan key:generate
# Configurar cache y rutas
php artisan config:cache
php artisan route:cache
8. Virtual Host para entorno de producción
apache
<VirtualHost *:80>
ServerName tudominio.com
ServerAlias www.tudominio.com
DocumentRoot /var/www/tu-proyecto-laravel/public
<Directory /var/www/tu-proyecto-laravel/public>
AllowOverride All
Options +FollowSymLinks -Indexes
Require all granted
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</Directory>
# Configuración de logs
ErrorLog /var/log/apache2/laravel_error.log
CustomLog /var/log/apache2/laravel_access.log combined
# Configuración de performance
EnableSendfile on
Timeout 300
</VirtualHost>
9. Comandos de verificación
bash
# Verificar sintaxis de Apache
sudo apache2ctl configtest
# Ver permisos
ls -la /var/www/tu-proyecto-laravel/storage/
ls -la /var/www/tu-proyecto-laravel/bootstrap/cache/
# Ver logs en tiempo real
sudo tail -f /var/log/apache2/laravel_error.log
10. Solución de problemas comunes
Error: "No input file specified"
apache
# En el Virtual Host, agregar:
<IfModule mod_php7.c>
php_admin_value open_basedir "/var/www/tu-proyecto-laravel/:/tmp/:/proc/"
</IfModule>
Error de permisos:
bash
sudo chcon -R -t httpd_sys_rw_content_t /var/www/tu-proyecto-laravel/storage
sudo chcon -R -t httpd_sys_rw_content_t /var/www/tu-proyecto-laravel/bootstrap/cache
Para habilitar mod_rewrite:
bash
sudo a2enmod rewrite
sudo systemctl restart apache2
¡Con esta configuración tu aplicación Laravel debería funcionar correctamente! Recuerda que el punto más importante es que el DocumentRoot apunte a la carpeta public de tu proyecto Laravel.



Comments