- Crear copia del archivo .env.example con el nombre .env
cp .env.example .env
- Especificar el valor de la variable APP_NETWORK en el archivo .env.
Esto define el nombre de la red que se usará en docker. En otros proyectos se deberá usar el mismo valor para que se conecten a la misma red y se puedan comunicar.
APP_NETWORK=development
docker compose up -d
En el proyecto hay un script wizard.sh, con el se podrán crear los sitios de una forma más rápida.
Ejecutando el script sin parámetros, preguntará las opciones de configuración durante su ejecución:
bash wizard.sh
Otra opción es especificar los parámetros al ejecutar el script. De esta forma creará el sitio example.com apuntando al contenedor example-php-1 escuchando el puerto 80 y 443, generará el certificado y reiniciará nginx:
bash wizard.sh -d example.com -c example-php-1 -s -g -r
Opciones:
- -d: Nombre de dominio.
- -c: Nombre del contenedor.
- -s: Escuchar puerto 443.
- -g: Generar certificados. (Solo si -s también está habilitado).
- -r: Reiniciar servicio NGINX al finalizar.
- -h|--help: Mostrar ayuda.
- Crear el archivo etc/nginx/conf.d/local.example.com.conf reemplazando local.example.com por el dominio (local) que se usará.
- En ese archivo agregar lo siguiente:
server {
listen 80;
listen [::]:80;
server_name local.example.com;
location / {
set $container example_container_name;
resolver 127.0.0.11;
proxy_pass http://$container;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- Reemplazar local.example.com por el dominio (local) que se usará.
- Reemplazar example_container_name por el nombre del contenedor que responderá las solicitudes.
- Reiniciar este contenedor:
docker compose restart
- Agregar al archivo /private/etc/hosts (en la máquina local) el dominio que se usará:
127.0.0.1 local.example.com
- En el archivo etc/nginx/conf.d/local.example.com.conf (donde local.example.com es el dominio deseado) agregar lo siguiente:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name local.example.com;
location / {
set $container example_container_name;
resolver 127.0.0.11;
proxy_pass http://$container;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
ssl_certificate "/etc/nginx/tls/${host}/cert.pem";
ssl_certificate_key "/etc/nginx/tls/${host}/key.pem";
}
- Reemplazar local.example.com por el dominio (local) que se usará.
- Reemplazar example_container_name por el nombre del contenedor que responderá las solicitudes.
- Generar un certificado TLS para el dominio y guardar los archivos cert.pem y key.pem en la ruta "etc/nginx/tls/DOMINIO/"
- Reiniciar este contenedor:
docker compose restart
Una opción para generar los certificados es mkcert, pero se puede usar cualquier otra herramienta o servicio.
mkdir -p etc/nginx/tls/local.example.com
cd etc/nginx/tls/local.example.com
mkcert -key-file key.pem -cert-file cert.pem local.example.com