sábado, 21 de junio de 2025

Docker apache2 Linux, varios usuarios - con Virtual hosts

 




Crear los archivos dockerfile, docker-compose.yml y httpd.conf, mostrarme que permisos debo dar en bash en el host, y como ejecutar los archivos de docker, el contenedor se ejecuta desde /home/projects/docker_apache2. Adicionar el manejo con virtual-hosts, donde los archivos .conf estan en la ruta /home/rojects/docker_apache2/sites/, por ejemplo: /home/rojects/docker_apache2/sites/usuario1.conf /home/rojects/docker_apache2/sites/usuario2.conf /home/rojects/docker_apache2/sites/usuario3.conf


Respuesta

Intenté crear los archivos directamente en /home/projects/docker_apache2, pero ocurrió un error de permiso denegado al intentar escribir en esa ruta. Esto es común si no se tienen privilegios de superusuario o si el entorno no permite escribir en directorios del sistema.


✅ Aquí tienes una guía completa para hacerlo manualmente:

1. Estructura de directorios esperada

/home/projects/docker_apache2/
├── Dockerfile
├── docker-compose.yml
├── httpd.conf
├── setup_and_run.sh
└── sites/
    ├── usuario1.conf
    ├── usuario2.conf
    └── usuario3.conf

📄 Dockerfile

FROM httpd:2.4

# Habilitar módulos necesarios y cargar virtual hosts
RUN apt-get update && apt-get install -y vim && \
    sed -i '/^#LoadModule rewrite_module/s/^#//' /usr/local/apache2/conf/httpd.conf && \
    echo "IncludeOptional conf/sites/*.conf" >> /usr/local/apache2/conf/httpd.conf

COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./sites/ /usr/local/apache2/conf/sites/

📄 docker-compose.yml

version: '3'
services:
  apache:
    container_name: Docker_apache2
    build: .
    ports:
      - "80:80"
    volumes:
      - /home/projects/Pagina_Inicio/:/usr/local/apache2/htdocs/
      - /home/usuario1/public_html/:/home/usuario1/public_html/
      - /home/usuario2/public_html/:/home/usuario2/public_html/
      - /home/usuario3/public_html/:/home/usuario3/public_html/
      - ./sites/:/usr/local/apache2/conf/sites/

📄 httpd.conf

ServerRoot "/usr/local/apache2"
Listen 80

LoadModule dir_module modules/mod_dir.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so

User daemon
Group daemon

ServerAdmin you@example.com
DocumentRoot "/usr/local/apache2/htdocs"

<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

UserDir public_html

<IfModule mod_userdir.c>
    UserDir enabled usuario1 usuario2 usuario3
</IfModule>

<Directory "/home/*/public_html">
    AllowOverride None
    Options Indexes FollowSymLinks
    Require all granted
</Directory>

DirectoryIndex index.html

IncludeOptional conf/sites/*.conf

📄 Ejemplo de archivo sites/usuario1.conf

<VirtualHost *:80>
    ServerName usuario1.local
    DocumentRoot "/home/usuario1/public_html"
    <Directory "/home/usuario1/public_html">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

Repite esto para usuario2.conf y usuario3.conf, cambiando el nombre y ruta.


🛠️ Script setup_and_run.sh

#!/bin/bash

# Asignar permisos
chmod o+rx /home/projects/Pagina_Inicio/
chmod -R o+r /home/projects/Pagina_Inicio/*

for user in usuario1 usuario2 usuario3; do
    chmod o+rx /home/$user/public_html/
    chmod -R o+r /home/$user/public_html/*
done

# Ir al directorio del proyecto
cd /home/projects/docker_apache2

# Construir y ejecutar el contenedor
docker-compose up --build -d

¿Quieres que te genere un archivo .zip con todos estos archivos listos para descargar y descomprimir?

No hay comentarios:

Publicar un comentario