Mon docker compose avec nginx comme reverse proxy. Et 4 applications qui tourne derrière.
version: '3'
networks:
mon_network:
driver: bridge
services:
proxy:
restart: always
image: nginx:stable-alpine
container_name: proxy
networks:
- mon_network
ports:
- 80:8080
- 443:8443
volumes:
- /mnt/docker/nginx/conf.d:/etc/nginx/conf.d
- /mnt/docker/nginx/ssl:/etc/nginx/ssl
- /mnt/docker/nginx/passwds:/etc/nginx/passwds
- /mnt/docker/nginx/www:/etc/nginx/www
- /mnt/docker/nginx/log:/var/log/nginx
depends_on:
- app1
- app2
- app3
- app4
app1:
container_name: app1
restart: always
image: user/app1:latest
networks:
- mon_network
volumes:
- /docker/app1/config:/app1/config
Dans le dossier /mnt/docker/nginx/conf.d/
-rw-r--r-- 1 seedbox seedbox app1.conf
-rw-r--r-- 1 seedbox seedbox app2.conf
-rw-r--r-- 1 seedbox seedbox default.conf
-rw-r--r-- 1 seedbox seedbox app3.conf
-rw-r--r-- 1 seedbox seedbox app4.conf
-rw-r--r-- 1 seedbox seedbox headers.config
-rw-r--r-- 1 seedbox seedbox proxy.config
-rw-r--r-- 1 seedbox seedbox ssl.config
Exemple d'un vhost app.conf
server {
listen 8443 ssl http2;
server_name app1.domain.tld;
ssl_certificate /etc/nginx/ssl/live/domain.tld/cert.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.tld/privkey.pem;
ssl_trusted_certificate /etc/nginx/ssl/live/domain.tld/chain.pem;
include /etc/nginx/conf.d/ssl.config;
include /etc/nginx/conf.d/headers.config;
## authentication ##
auth_basic "app1.domain.tld";
auth_basic_user_file "/etc/nginx/passwds/app1_passwd";
location / {
proxy_pass http://app1:8080;
include /etc/nginx/conf.d/proxy.config;
}
access_log /var/log/nginx/app1-access.log combined;
error_log /var/log/nginx/app1-error.log error;
}
vhost sur le port 80 : default.conf (je l'utilise pour faire les challenges let's encrypt)
server {
listen 8080;
charset utf-8;
server_name *.domain.tld;
root /etc/nginx/www/acme;
location /.well-known/acme-challenge {}
}
Après je décris pas ici comme utiliser acme.sh pour générer le certificat ssl, j'ai déjà fait un tuto sur ça.
Franchement, c'est très rapide au final à configurer. C'est très light. Plus performant que traefik. Et nginx y a pas trop de révolution donc stable sur la durée.