viernes, 20 de junio de 2025

Permitir que el contenedor docker_apache2 sirva contenido web desde los directorios /home/usuarioX/public_html del host.

 



HAcer un paso a paso mas detallado para la pregunta y los pasos dados :Hacer que el public_html de los usuarios por ejemplo: /home/usuario1/public_html o /home/usuario2/public_html o /home/usuario3/public_html ... tengan acceso desde el contenedor de apache2 docker_apache2 a la salida a internet y se vean las paginas web que tienen en el public_html Posibles pasos: Paso 1: Para muchos usuarios montar todo el /home del host en el contenedor eso dentro del docker-compose.yml volume - /home:/home:ro Paso 2: Crear un VirtualHost por usuario (más control, pero más trabajo) crear archivo /home/apache2/usuario1.conf: ServerName usuario1.local DocumentRoot /home/usuario1/public_html Options Indexes FollowSymLinks AllowOverride All Require all granted Paso 3: Asegúrate de que esté montado en /etc/apache2/sites-available/ dentro del contenedor y que tu httpd.conf incluya: IncludeOptional /etc/apache2/sites-available/*.conf Paso 4: Permisos Asegúrate de que los archivos sean legibles por el contenedos del Apache: chmod -R o+r /home/*/public_html


Respuesta

Aquí tienes un paso a paso más detallado y claro para lograr que los directorios public_html de múltiples usuarios en el host sean accesibles desde un contenedor Docker que ejecuta Apache2, permitiendo así que sus páginas web sean visibles desde el exterior:


Objetivo

Permitir que el contenedor docker_apache2 sirva contenido web desde los directorios /home/usuarioX/public_html del host.


🧩 Paso a Paso Detallado

🔹 Paso 1: Montar /home del host en el contenedor

Esto permite que Apache dentro del contenedor acceda a los archivos de los usuarios.

Archivo docker-compose.yml:

services:
  apache2:
    image: httpd:2.4
    container_name: docker_apache2
    ports:
      - "80:80"
    volumes:
      - /home:/home:ro  # Montaje en modo solo lectura
      - ./sites:/etc/apache2/sites-available  # Donde colocarás los VirtualHosts

🔸 Nota: Asegúrate de que el contenedor tenga acceso a los archivos necesarios, aunque sea en modo ro (solo lectura).


🔹 Paso 2: Crear un VirtualHost por usuario

Esto permite que cada usuario tenga su propio subdominio o nombre local.

Ejemplo de archivo /home/apache2/usuario1.conf:

<VirtualHost *:80>
    ServerName usuario1.local
    DocumentRoot /home/usuario1/public_html

    <Directory /home/usuario1/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

🔸 Repite este paso para cada usuario (usuario2, usuario3, etc.).


🔹 Paso 3: Incluir los VirtualHosts en Apache

Asegúrate de que Apache cargue los archivos .conf desde sites-available.

Dentro del contenedor, edita o asegúrate de que el archivo principal de configuración (httpd.conf o apache2.conf) contenga:

IncludeOptional /etc/apache2/sites-available/*.conf

🔸 Si usas Debian/Ubuntu, este archivo suele ser apache2.conf. En Alpine o imágenes más ligeras, puede ser httpd.conf.


🔹 Paso 4: Permisos de archivos

Apache necesita poder leer los archivos de los usuarios.

En el host:

chmod -R o+r /home/*/public_html
chmod -R o+x /home/* /home/*/public_html

🔸 Esto da permisos de lectura y ejecución (necesarios para acceder a directorios) a "otros".


🔹 Paso 5: Configurar /etc/hosts para pruebas locales (opcional)

En tu máquina local (no en el contenedor), puedes mapear los dominios locales:

sudo nano /etc/hosts

Agrega:

127.0.0.1 usuario1.local
127.0.0.1 usuario2.local

🔹 Paso 6: Reiniciar Apache dentro del contenedor

Una vez montados los archivos y configurados los VirtualHosts:

docker exec -it docker_apache2 apachectl restart

¿Te gustaría que prepare un ejemplo completo de docker-compose.yml y un par de archivos .conf listos para copiar y pegar?

No hay comentarios:

Publicar un comentario