crear un dominio local en linux

PHOTO EMBED

Wed Oct 01 2025 15:09:53 GMT+0000 (Coordinated Universal Time)

Saved by @jrg_300i ##yii2

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.

content_copyCOPY