maps.jagedn.dev,
blog.jagedn.dev,
jagedn.dev {
reverse_proxy apache:80
}
Recientemente he movido el blog desde mi proveedor de hosting en USA a otro en Europa y me estoy migrando todos los sites que tenía en aquel al nuevo.
Una de las ventajas del proveedor que tenía era la facilidad para crear sites con un par de clicks. Dado mi dominio "jagedn.dev" por ejemplo, era sumamente fácil crear otro site "blog.jagedn.dev", "maps.jagedn.dev" o "whatever.jagedn.dev". Cada site tenía su directorio e incluía PHP
En este blog voy a explicar cómo he hecho la migración de estos sites a mi instancia de tal forma, que aunque no sea con un simple click, me permita crear sites de una forma fácil
Además algunos sites podrán usar carpetas "public" y "private"
Un dominio (por ejemplo "jagedn.dev") y que los DNS apunten a la máquina donde vamos a instalar el multisite
Básicamente, voy a usar Docker en la máquina donde voy a alojar mis sites.
Obviamente, el otro requisito es poder acceder por ssh a la instancia.
En el directorio de trabajo elegido vamos a crear directorios por cada site que queramos hostear:
./blog
./maps
./calendar
En la carpeta blog copio los ficheros de mi static-site. Como es todo html+css simplemente copio los ficheros manteniendo la estructura del mismo
Esta es una aplicación que usa PHP y que usa una carpeta pública donde hay html y un api en PHP y una carpeta private donde guarda ficheros sensibles
Podría ser por ejemplo un Calendy o similar. La incluyo solo a modo de ejemplo
En el directorio de trabajo crearemos un fichero Caddyfile similar a :
maps.jagedn.dev,
blog.jagedn.dev,
jagedn.dev {
reverse_proxy apache:80
}
En el directorio de trabajo crearemos un dichero Dockerfile
FROM php:8.4-apache
RUN apt-get update && apt-get install -y --no-install-recommends \
sudo \
&& rm -rf /var/lib/apt/lists/*
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html
RUN a2enmod rewrite
USER www-data
y el fichero docker-compose.yml
services:
caddy:
image: caddy:latest
container_name: caddy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
- acme_challenges:/var/www/challenges
apache:
container_name: apache
build:
context: .
dockerfile: Dockerfile
volumes:
- ./blog:/var/www/html/blog
- ./maps:/var/www/html/maps
- ./apache2/sites-available:/etc/apache2/sites-available
- ./apache2/sites-enabled:/etc/apache2/sites-enabled
Por último crearemos los directorios ./apache2/sites-available y ./apache2/sites-enabled
En sites-available mantendremos la configuracion de todos los sites y en sites-enabled los que queremos en cada
momento activos. Lo normal es usar enabled como enlaces simbólicos pero yo simplemente hago un copy porque nunca
sé cómo usar ln -s
<VirtualHost *:80>
ServerName blog.jagedn.dev
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/blog
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName maps.jagedn.dev
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/maps/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Aunque son casi similares hay diferencias:
ServerName: sirve para que Apache "machee" la petición del usuario con la config a usar
DocumentRoot: sirve para indicar qué carpeta debe servir ese server name. Por ejemplo maps usa "maps/public" mientras que blog usa directamente la carpeta "blog" montada
Básicamente si tengo que añadir un nuevo site los pasos a seguir serían:
crear el DNS en mi proveedor y apuntarlo a la IP de la máquina. Por ejemplo "chat.jagedn.dev"
crear una carpeta al mismo nivel que blog o map, donde alojar la aplicación
crear una site-enabled similar a los existentes indicando el ServerName y la ruta
montar la nueva carpeta en el docker-compose
y simplemente reconfigurar todo con docker-compose up -d
2019 - 2026 | Mixed with Bootstrap | Baked with JBake v2.6.7 | Terminos Terminos y Privacidad