Aerya Salut
Pour le coup je préfère celui ci : https://github.com//xataz/docker-reverse-nginx
Fait par @xataz (après les gouts et les couleurs...)
Aerya Salut
Pour le coup je préfère celui ci : https://github.com//xataz/docker-reverse-nginx
Fait par @xataz (après les gouts et les couleurs...)
Salut jericho63 ,
Pour faire ce que tu veux avec plusieurs sous-domaine du même domaine avec traefik (exemple: toto.domain.com, titi.domain.com, tata.domain.com ...), il faut que tu rapproche de la config "file" de celui-ci.
C'est un peu chaud, mais je pense faisable :
https://docs.traefik.io/configuration/backends/file/
https://serverfault.com/questions/850095/simple-reverse-proxy-with-traefik
Il faut que tu fasse un mix avec la balise file et la balise docker.
A plus
bonjour triptixx
on est bien sur le cas : toto.domain.com et titi.domain.com qui pointent sur des applis docker et nas.domain.com qui pointerait sur le nas?
j'ai vu la configuration file mais je n'étais pas sur d'avoir bien compris le fonctionnement et donc si ça pouvait répondre à mon besoin.
En ce qui me concerne, je n utilise pas de reverse proxy Docker mais nginx sur l hôte qui gère tous les reverses aussi bien Docker que locaux (ton nas). Est ce que c est ce que tu souhaites faire ?
Si c est le cas post ton docker-compose ainsi que les ports que tu utilises pour les services sur ton nas
oui c'est ça, je le faisais avec un apache dockerisé mais c'est lourd d'entretien et un peu pénible avec letsencrypt.
tu gères letsencrypt aussi?
laster13
mon nas est un synology
les ports sont le 5000 en http 5001 en https pour le file station, il faut que je regarde pour le video et photo station.
et mon docker-compose (j'ai pas trouvé comment faire la balise code)
version: '3'
networks:
http_network:
external: true
mail_network:
external: false
services:
reverse-proxy:
image: traefik # The official Traefik docker image
command: --api --docker # Enables the web UI and tells Træfik to listen to docker
container_name: reverse-proxy
ports:
- "192.168.1.150:80:80" # The HTTP port
#- "9090:8080" # The Web UI (enabled by --api)
- "192.168.1.150:443:443"
labels:
- traefik.enable=true
- traefik.frontend.rule=Host:mail.mondomaine.fr
- traefik.port=8080
- traefik.docker.network=http_network
volumes:
- /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
- /home/srv/traefik/traefik.toml:/traefik.toml:ro
- /home/srv/traefik/acme:/etc/traefik/acme
networks:
- http_network
mariadb:
image: mariadb:latest
container_name: mariadb
ports:
- "192.168.1.150:3306:3306"
volumes:
- /home/srv/mysql:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=monpassword
networks:
- mail_network
- http_network
dovecot:
build: ./dovecot/.
container_name: mailserver
ports:
- "192.168.1.150:25:25"
- "192.168.1.150:587:587"
- "192.168.1.150:143:143"
- "192.168.1.150:993:993"
- "192.168.1.150:4190:4190"
volumes:
- /home/srv/logs:/var/log
- /home/srv/vmail:/srv/vmail
- /home/srv/ssl:/etc/ssl
- /home/srv/dovecot:/var/lib/dovecot
- /home/srv/letsencrypt:/etc/letsencrypt
links:
- mariadb:mysql
restart: always
privileged: true
environment:
- MYSQL_USERNAME=root
- ADD_DOMAINS=mondomaine.fr,mondomaine2.eu,mondomaine3.fr
hostname: mailserver
domainname: mondomaine.fr
depends_on:
- mariadb
labels:
- traefik.enable=true
- traefik.frontend.rule=Host:spam.mondomaine.fr
- traefik.port=11334
- traefik.docker.network=http_network
networks:
- mail_network
- http_network
postfixadmin:
build: ./postfixadmin/.
container_name: postfixadmin
#ports:
#- "192.168.1.150:33300:80"
#- "192.168.1.150:33343:443"
#volumes:
#- /home/srv/wwwpostfixadmin:/var/www
#- /home/srv/ssl:/etc/ssl
links:
- mariadb:mysql
hostname: postfixadmin
domainname: mondomaine.fr
restart: always
environment:
- DBUSER=pfa
- DBPASS=monpassword
depends_on:
- mariadb
- dovecot
labels:
- traefik.enable=true
- "traefik.frontend.rule=Host:postfixadmin.mondomaine.fr"
- traefik.backend.port=8888
- traefik.docker.network=http_network
networks:
- mail_network
- http_network
phpmyadmin:
build: ./phpmyadmin/.
container_name: phpmyadmin
ports:
- "192.168.1.150:33400:80"
- "192.168.1.150:33443:443"
volumes:
- /home/srv/ssl:/etc/ssl
links:
- mariadb:mysql
hostname: phpmyadmin
domainname: mondomaine.fr
restart: always
environment:
- MYSQL_USERNAME=root
depends_on:
- mariadb
labels:
- traefik.enable=true
- "traefik.frontend.rule=Host:phpmyadmin.mondomaine.fr"
- traefik.docker.network=http_network
networks:
- mail_network
- http_network
baikal:
build: ./baikal/.
container_name: baikal
ports:
- "192.168.1.150:33500:80"
- "192.168.1.150:33543:443"
volumes:
- /home/srv/wwwbaikal:/var/www
- /home/srv/ssl:/etc/ssl
links:
- mariadb:mysql
hostname: baikal
domainname: mondomaine.fr
restart: always
environment:
- MYSQL_USERNAME=root
- ADD_DOMAINS=mondomaine2.eu,mondomaine3.fr
labels:
- traefik.enable=true
- "traefik.frontend.rule=Host:baikal.mondomaine.fr"
- traefik.docker.network=http_network
networks:
- mail_network
- http_network
dokuwiki:
build: ./dokuwiki/.
container_name: dokuwiki
ports:
- "192.168.1.150:33800:80"
- "192.168.1.150:33843:443"
volumes:
- /home/srv/wwwdokuwiki:/var/www
- /home/srv/ssl:/etc/ssl
links:
- mariadb:mysql
hostname: dokuwiki
domainname: mondomaine.fr
restart: always
environment:
- MYSQL_USERNAME=root
labels:
- traefik.enable=true
- "traefik.frontend.rule=Host:dokuwiki.mondomaine.fr"
networks:
- http_network
rainloop:
build: ./rainloop/.
container_name: rainloop
#- "192.168.1.150:33100:80"
#- "192.168.1.150:33143:443"
volumes:
- /home/srv/wwwdata/data:/rainloop/data
#- /home/srv/wwwdata:/var/www
#- /home/srv/ssl:/etc/ssl
links:
- baikal:baikal.mondomaine.fr
- mariadb:mysql
- dovecot:mailserver.mondomaine.fr
restart: always
hostname: rainloop
domainname: mondomaine.fr
depends_on:
- mariadb
labels:
- traefik.enable=true
- traefik.backend.port=8888
- "traefik.frontend.rule=Host:rainloop.mondomaine.fr"
- traefik.docker.network=http_network
networks:
- mail_network
- http_network
unbound:
build: ./unbound/.
container_name: unbound
restart: always
ports:
- "192.168.1.150:53:53"
- "192.168.1.150:53:53/udp"
volumes:
- /srv/logdns:/logdns
jericho63 Déja il faut virer traeffic, ensuite nettoyer docker avec :
docker volume rm $(docker volume ls -qf "dangling=true")
Ensuite je te conseille, plutôt que d’utiliser unbound de suivre le tuto de @Hardware pour la mise en place d'un serveur autoritaire avec nsd :
https://blog.meshup.net/deploy-nsd-dnssec-with-docker/
Et de procéder par étape. L'idée est d'abord de mettre en place le reverse sur le serveur mail d'@Hardware sans le reste. Une fois que cela fonctionne tu rajoutes tes services au fur et a mesure. Je te donne mon docker compose
version: '2.1'
services:
mailserver:
image: hardware/mailserver:1.1-stable # <- New tag
container_name: mailserver
domainname: domain.com
hostname: mail
restart: always
ports:
- "25:25"
- "143:143"
- "587:587"
- "993:993"
- "4190:4190"
- "11334:11334" # <- New port, not needed if the
environment: # webserver is on the same host
- DBPASS=xxxxx
- RSPAMD_PASSWORD=xxxxx
- ENABLE_ENCRYPTION=true # <- New required variable
volumes:
- /mnt/docker/mail:/var/mail
- /mnt/docker/ssl:/etc/letsencrypt
depends_on:
- mariadb
- redis # <- New dependency
# Administration interface
# https://github.com/hardware/postfixadmin
# http://postfixadmin.sourceforge.net/
# Configuration : https://github.com/hardware/mailserver/wiki/Postfixadmin-initial-configuration
postfixadmin:
image: hardware/postfixadmin
container_name: postfixadmin
domainname: domain.com
hostname: mail
restart: always
environment:
- DBPASS=xxxxx
ports:
- "127.0.0.1:8888:8888"
depends_on:
- mailserver
- mariadb
# Webmail (Optional)
# https://github.com/hardware/rainloop
# https://www.rainloop.net/
# Configuration : https://github.com/hardware/mailserver/wiki/Rainloop-initial-configuration
rainloop:
image: hardware/rainloop
container_name: rainloop
restart: always
volumes:
- /mnt/docker/rainloop:/rainloop/data
ports:
- "127.0.0.1:8889:8888"
depends_on:
- mailserver
- mariadb
nsd:
image: hardware/nsd-dnssec
container_name: nsd
restart: always
ports:
- "xxxxx:53:53"
- "xxxxxx:53:53/udp"
volumes:
- /mnt/docker/nsd/conf:/etc/nsd
- /mnt/docker/nsd/zones:/zones
- /mnt/docker/nsd/db:/var/db/nsd
redis:
image: redis:4.0-alpine
restart: always
container_name: redis
command: redis-server --appendonly yes
volumes:
- /mnt/docker/redis/db:/data
mariadb:
restart: always
image: mariadb:10.2
container_name: mariadb
#restart: always
# Info : These variables are ignored when the volume already exists (databases created before).
environment:
- MYSQL_ROOT_PASSWORD=xxxxx
- MYSQL_DATABASE=postfix
- MYSQL_USER=postfix
- MYSQL_PASSWORD=xxxxx
volumes:
- /mnt/docker/mysql/db:/var/lib/mysql
Mon vhost rainloop (tous mes vhosts sont sur le meme schéma) dans /etc/nginx/sites-enabled
server {
listen 80;
server_name webmail.domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name webmail.domain.com;
ssl_certificate /etc/letsencrypt/live/mail.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.domain.com/privkey.pem;
include /etc/nginx/conf/*.conf;
location / {
proxy_pass http://127.0.0.1:8889;
include /etc/nginx/conf/proxy_params;
}
}
Mes paramètres ssl et header qui sont dans /etc/nginx/conf/ssl_params.conf
ssl_protocols TLSv1.2;
ssl_ecdh_curve X25519:P-521:P-384;
ssl_ciphers EECDH+CHACHA20:EECDH+AESGCM;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 15m;
ssl_session_tickets off;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
Ainsi que le fichier proxy dans /etc/nginx/conf/proxy_params
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-Port $remote_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
Voila commence par ça, l’idée encore une fois est de faire fonctionner le reverse du serveur mail avec nginx en local.. Adaptes avec tes ip local, public et tes ports http et https
Pour lets'encrypt tu suis le tuto de @Jedediah
https://mondedie.fr/d/7414-Tuto-Certificat-SSL-signe-gratuit-avec-Let-s-Encrypt-et-nginx
mon mailserver docker n'est pas celui d'hardware, mais un dérivé que j'ai fait a l'aide du tuto présent sur ce forum il y a quelques années. Comme je suis hébergé chez moi, je ne peux pas utiliser sa version car elle ne permet pas (encore) le relais smtp (le port 25 étant bloqué je suis obligé de passé par le relais orange)
j'avoue que j'attend avec impatience qu'il intégré le relais smpt , je manque de temps pour maintenir et mettre a jour mon container, bref ça c'est une autre histoire.
j'utilise unbound uniquement en interne et pour bloquer toutes les régies publicitaires et avoir un surf sans pub et ça j'avoue c'est bien un truc dont je ne pourrai plus me passer!
je vais étudier tes fichiers de configurations ce weekend et voir comment intégrer ça a mon installation.
merci
Dryusdan Salut,
Je préfère a jwilder et xataz celui ci : https://hub.docker.com/r/neilpang/nginx-proxy/
c'est un fork de celui de jwilder un peu plus large (notamment au niveau du timeout et de la taille des requêtes).
il se marie comme son ancêtre jwilder très bien avec le compagnon let's encrypt
Bonjour Jericho63, j'ai aussi un nas Synology, pourquoi tu n'utilise pas le reverse proxy intégré dans le dsm ?
dextou bonne question! comme a la base j'avais un serveur dédié pour mes containers je n'y ai pas pensé.
ceci dit j'ai réussi a comprendre le fonctionnement de traefik (parfois avec l'anglais ça veut pas )et maintenant a faire du reverse vers mon nas , j'arrive donc a atteindre file station, photos station, pour video station l'interface s'affiche mais impossible d'avoir le flux video. il faut que je continu à creuser la question.
A l'époque, j'utilisais Haproxy sur mon Syno pour gérer mes accès par reverse proxy et un simple script bash en cron pour le renouvellement de mes certificats LE.