08 - Servidores web: Apache

En esta práctica vamos a configurar un entorno básico con Apache, PHP y MariaDB usando Docker Compose. Con esta configuración, podrás disponer de un servidor web que ejecute código PHP y que utilice una base de datos MariaDB. Además, incluiremos PhpMyAdmin para gestionar la base de datos de forma gráfica.

Para empezar, vamos a definir los servicios en el archivo docker-compose.yml para crear y configurar los contenedores de Apache con PHP, MariaDB y PhpMyAdmin.

Crea una carpeta para tu proyecto (por ejemplo, mi-servidor-web) y dentro de esta carpeta, crea el archivo docker-compose.yml:

name: apache

services:
  web:
    image: php:8.1-apache
    container_name: servidor-web
    ports:
      - "8089:80"
    volumes:
      - ./www:/var/www/html
    depends_on:
      - db

  db:
    image: mariadb:latest
    container_name: servidor-db
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./db:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: servidor-phpmyadmin
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: root
    ports:
      - "8090:80"
    depends_on:
      - db

  • web: Utiliza la imagen php:8.1-apache, que incluye Apache y PHP 8.1. La carpeta www en tu máquina local se montará en /var/www/html, la raíz de documentos de Apache. Esto permitirá que puedas editar los archivos PHP localmente y ver los cambios en tiempo real.
  • db: Usa la imagen mariadb:latest para crear un contenedor de base de datos MariaDB. La contraseña de root se establece mediante la variable MYSQL_ROOT_PASSWORD. Además, los datos de la base de datos se almacenarán en la carpeta db en tu máquina local, lo que permite persistir los datos.
  • phpmyadmin: Proporciona una interfaz gráfica para administrar la base de datos MariaDB. Estará accesible en el puerto 8090 de tu máquina.

Dentro de la carpeta del proyecto, crea las siguientes carpetas y archivos:

  • www: Aquí almacenaremos nuestros archivos PHP.
  • conf: Archivos de configuración de Apache.

Para comprobar que PHP se ejecuta correctamente, crea un archivo index.php dentro de la carpeta www con el siguiente contenido:

<?php
phpinfo();

Una vez creados los archivos y la estructura, levanta los tres servicios mediante docker compose.

Abre http://localhost:8089 en tu navegador. Si todo está bien configurado, deberías ver la página de información de PHP.

Abre http://localhost:8090 para acceder a PhpMyAdmin y gestionar la base de datos MariaDB desde la interfaz gráfica.

Con esta configuración básica, tu servidor web Apache con PHP y MariaDB estará listo para ejecutar y probar aplicaciones web.

Una vez que los contenedores estén en funcionamiento, copia el contenido de la carpeta de configuración de Apache al directorio local:

docker cp servidor-web:/etc/apache2 ./conf

Esto nos permitirá modificar la configuración de apache desde la máquina local. Luego, modifica el archivo docker-compose.yml para incluir el mapeo de la carpeta de configuración de Apache:

name: apache

services:
  web:
    image: php:8.1-apache
    container_name: servidor-web
    ports:
      - "8089:80"
    volumes:
      - ./www:/var/www/html
      - ./conf/apache2:/etc/apache2
    depends_on:
      - db

  db:
    image: mariadb:latest
    container_name: servidor-db
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./db:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: servidor-phpmyadmin
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: root
    ports:
      - "8090:80"
    depends_on:
      - db

Con esta configuración, tendremos todo el contenido de Apache mapeado correctamente, y podremos editar los archivos de configuración localmente en ./conf/apache2.

Para crear un sitio virtual en Apache, primero necesitamos definir la configuración del sitio en un archivo específico. Esto nos permitirá servir múltiples sitios desde el mismo servidor web.

Crea un archivo para tu sitio virtual en la carpeta de configuración de Apache. Por ejemplo, miweb.conf y colócalo en ./conf/apache2/sites-available. Puedes utilizar cualquier editor de texto para crear el archivo con el siguiente contenido:

<VirtualHost *:80>
    ServerName miweb.local
    DocumentRoot /var/www/html/miweb

    <Directory /var/www/html/miweb>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/miweb-error.log
    CustomLog ${APACHE_LOG_DIR}/miweb-access.log combined
</VirtualHost>

  • ServerName: define el nombre del dominio que utilizarás para acceder al sitio.
  • DocumentRoot: establece la raíz del documento, que es la carpeta donde se encuentran los archivos de tu sitio.
  • <Directory>: se utiliza para especificar permisos y configuraciones para el directorio donde se encuentra tu sitio.
    • AllowOverride All: permite que los archivos .htaccess en el directorio anulen las configuraciones de Apache, proporcionando flexibilidad para personalizar la configuración sin necesidad de modificar los archivos de configuración principales.
    • Require all granted: concede acceso a todos los usuarios al contenido del directorio, asegurando que el sitio sea accesible públicamente.
  • ErrorLog: define la ubicación del archivo donde se registrarán los errores del sitio. En este caso, los errores se guardarán en miweb-error.log, permitiendo una revisión fácil y eficaz de cualquier problema que surja.
  • CustomLog: especifica la ubicación del archivo de registro de acceso del sitio, miweb-access.log. Usando el formato combined, este registro incluirá detalles sobre cada solicitud, como la dirección IP del visitante, el método HTTP, la URL solicitada, el código de estado de la respuesta, y el agente de usuario, facilitando el análisis del tráfico y la solución de problemas.

Crea un archivo index.php en el directorio local www/miweb:

<?php
echo "Bienvenido/a a miweb.local";

Una vez que hayas creado el archivo de configuración del sitio, debes habilitarlo para que Apache lo reconozca. Accede al contenedor del servidor web y ejecuta el siguiente comando:

docker exec -it servidor-web bash
a2ensite miweb.conf

El comando a2ensite es una herramienta de administración de Apache que se utiliza para habilitar archivos de configuración de sitios virtuales en entornos basados en Debian (como Ubuntu).

Cuando ejecutas a2ensite miweb.conf, Apache crea un enlace simbólico del archivo de configuración miweb.conf en el directorio sites-enabled. Este directorio es donde Apache busca los sitios habilitados al arrancar o al recargar su configuración.

Habilitar un sitio mediante a2ensite es importante porque permite que Apache reconozca y sirva el sitio configurado. Si no habilitas el sitio, aunque hayas creado el archivo de configuración, Apache no lo cargará, lo que significa que el sitio no estará accesible desde el navegador.

Después de habilitar el sitio, es necesario aplicar los cambios en la configuración de Apache, lo que normalmente se haría reiniciando el servicio de Apache. Sin embargo, en este caso, en lugar de reiniciar el contenedor (lo que podría causar que se detenga), se puede utilizar el comando apachectl -k graceful para recargar la configuración de Apache de manera segura, permitiendo que el nuevo sitio esté disponible sin interrumpir el servicio.

apachectl -k graceful

Para poder acceder a tu sitio virtual usando el nombre de dominio definido (miweb.local), añade una entrada en el archivo /etc/hosts de tu máquina local:

127.0.0.1 miweb.local

Esto permite que tu sistema reconozca el nombre de dominio y lo asocie con tu servidor local. Ahora puedes abrir tu navegador y acceder a http://miweb.local:8089. Si todo está configurado correctamente, deberías ver el mensaje “Bienvenido/a a miweb.local” en la página.

Para configurar subdominios en Apache, puedes crear archivos de configuración similares a los de los sitios virtuales, especificando el nombre del subdominio que deseas utilizar. Esto te permite servir diferentes aplicaciones o secciones de tu sitio bajo diferentes subdominios.

Al igual que hicimos para el sitio principal, crea un archivo de configuración para tu subdominio. Por ejemplo, subdominio.miweb.conf y colócalo en ./conf/apache2/sites-available:

 
<VirtualHost *:80> 
    ServerName subdominio.miweb.local 
    DocumentRoot /var/www/html/subdominio
    <Directory /var/www/html/subdominio>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/subdominio-error.log
    CustomLog ${APACHE_LOG_DIR}/subdominio-access.log combined
</VirtualHost> 

Asegúrate de crear un directorio para tu subdominio en ./www/subdominio y coloca un archivo index.php con el siguiente contenido:

 
<?php echo "Bienvenido/a a subdominio.miweb.local"; 

Accede al contenedor del servidor web y habilita el sitio del subdominio con el siguiente comando:

 
docker exec -it servidor-web bash 
a2ensite subdominio.miweb.conf 

Para aplicar los cambios, envía la señal para recargar la configuración de Apache:

 
apachectl -k graceful 

Para que tu máquina local reconozca el subdominio, añade una entrada en tu archivo /etc/hosts:

 
127.0.0.1 subdominio.miweb.local 

Esto permitirá que tu sistema asocie el subdominio con el servidor local. Ahora, al acceder a http://subdominio.miweb.local:8089, deberías ver el mensaje “Bienvenido/a a subdominio.miweb.local” en el navegador.

Con esta configuración, ahora puedes servir múltiples subdominios desde tu servidor Apache, cada uno con su propio contenido y configuraciones específicas.

  • clase/smr/sr/1eval/apache.txt
  • Última modificación: 2024/11/22 12:35
  • por cesguiro