Last active
April 28, 2020 12:02
-
-
Save Miouyouyou/0c6a15fcf7d56ae7263b525017b2f9f0 to your computer and use it in GitHub Desktop.
Fichier Docker-compose pour Mattermost avec config d'un Reverse Proxy HAProxy en prime
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| version: '2.4' | |
| # Le réseau rproxy_network est un réseau créé via : | |
| # docker network create rproxy_network | |
| # (Au moins) Un reverse proxy est censé être connecté au réseau | |
| # rproxy_network. | |
| # Ce proxy va gérer les certificats SSL et rediriger les connexions | |
| # vers le serveur de chat Mattermost, accessible depuis l'adresse | |
| # 'mattermost:8065' sur le même réseau. | |
| # Le déploiement et la connexion du reverse proxy au réseau | |
| # rproxy_network est faite au travers d'un autre fichier | |
| # docker-compose.yml (ou à la main, si vous savez comment faire). | |
| # Quelques indications sont fournies plus bas sur comment | |
| # mettre en place un reverse proxy 'HAProxy', sur ce même réseau, | |
| # et rediriger les requêtes vers le chat. | |
| services: | |
| postgres: | |
| image: "postgres:9.4" | |
| restart: always | |
| networks: | |
| internal: | |
| aliases: | |
| - postgres | |
| environment: | |
| POSTGRES_USER: SuperNomDUtilisateurQueJeConseilleDeChanger | |
| POSTGRES_PASSWORD: CeMotDePasseTiendraPas30Secondes | |
| POSTGRES_DB: mattermost | |
| volumes: | |
| - "mm_pgdata:/var/lib/postgresql/data" | |
| elasticsearch: | |
| image: "mattermost/mattermost-elasticsearch-docker" | |
| networks: | |
| internal: | |
| aliases: | |
| - elasticsearch | |
| environment: | |
| ELASTIC_PASSWORD: ApresOnEstSurUnReseauInterne | |
| volumes: | |
| - "mm_esdata:/usr/share/elasticsearch/data" | |
| mattermost: | |
| image: "mattermost/mattermost-team-edition" | |
| networks: | |
| internal: | |
| aliases: | |
| - mattermost | |
| rproxy_network: | |
| aliases: | |
| - mattermost | |
| volumes: | |
| - "./mm/data:/mattermost/data" | |
| - "./mm/logs:/mattermost/logs" | |
| - "./mm/config:/mattermost/config" | |
| - "./mm/plugins:/mattermost/plugins" | |
| - "./mm/client/plugins:/mattermost/client/plugins" | |
| networks: | |
| internal: | |
| driver: bridge | |
| rproxy_network: | |
| external: true | |
| volumes: | |
| mm_pgdata: | |
| mm_esdata: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| version: '3' | |
| # HAProxy requiert des certificats PEM contenant à la fois : | |
| # - Le certificat en lui même | |
| # - Tous les certificats de la chaîne de confiance | |
| # - La clef privée utilisée pour signer le certificat. | |
| # Si vous récupérer vos certificats SSL via Let's Encrypt, | |
| # voici comment vous pouvez concatener le tout, et l'utiliser | |
| # ensuite via HAProxy : | |
| # cat fullchain.pem privkey.pem > concat.pem | |
| # Vous pouvez ensuite agrafer un OCSP à votre certificat, pour | |
| # accélérer les connexions SSL : | |
| # openssl ocsp -issuer chain.pem -cert fullchain.pem -respout concat.pem.ocsp -noverify -no_nonce -url http://ocsp.int-x3.letsencrypt.org | |
| services: | |
| haproxy: | |
| image: haproxy:latest | |
| volumes: | |
| - "./haproxy/config:/usr/local/etc/haproxy:ro" | |
| - "/path/to/your/letsencrypt/live:/etc/ssl/mine:ro" # Z'êtes pas obligé d'utiliser Let's Encrypt. | |
| - "/dev/log:/dev/log" | |
| restart: always | |
| ports: | |
| - 80:80 | |
| - 443:443 | |
| networks: | |
| rproxy_network: | |
| aliases: | |
| - haproxy | |
| - loadbalancer | |
| networks: | |
| rproxy_network: | |
| external: true |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # A placer dans ./haproxy/config | |
| global | |
| daemon | |
| maxconn 1024 | |
| tune.ssl.default-dh-param 4096 | |
| log /dev/log local0 | |
| ssl-default-bind-options no-tls-tickets | |
| ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK:!DSS:!SRP:!LOW | |
| defaults | |
| mode http | |
| timeout connect 10s | |
| timeout client 20s | |
| timeout server 20s | |
| timeout tarpit 1m | |
| log global | |
| frontend blogfront | |
| bind :80 | |
| bind :443 ssl crt /etc/ssl/mine/votre-domaine.fr/concat.pem ssl-min-ver TLSv1.0 ssl-max-ver TLSv1.3 alpn h2,http/1.1 | |
| # Si vous avez plusieurs domaines, avec des certificats différents pour chacun | |
| # bind :443 ssl crt /etc/ssl/mine/votre-domaine.fr/concat.pem crt /etc/ssl/mine/chat.votre-domaine.fr/concat.pem crt /etc/ssl/mine/encore-un-autre-domaine.com/concat.pem ssl-min-ver TLSv1.0 ssl-max-ver TLSv1.3 alpn h2,http/1.1 | |
| mode http | |
| option httplog | |
| default_backend chat | |
| # Pour rediriger les requêtes vers le bon serveur, en fonction | |
| # du nom de domaine, vous pouvez faire ça : (fonctionne qu'en SSL) | |
| # use_backend chat if { ssl_fc_sni chat.votre-domaine.fr } | |
| # default_backend blogback | |
| backend chat | |
| mode http | |
| option http-keep-alive | |
| balance roundrobin | |
| server chat pouipmaster:8065 check | |
| # Configuration d'une redirection vers un serveur NGINX servant | |
| # des sites statiques (Hugo, Jekyll), ainsi que les fichiers | |
| # nécessaires à Let's Encrypt. | |
| # Le serveur NGINX est normalement connecté au réseau rproxy_network, | |
| # et son alias sur le réseau est 'blog' | |
| # Si c'est chelou, ça dégage | |
| #backend blogback | |
| # mode http | |
| # balance roundrobin | |
| # Pour servir les fichiers nécessaires à Let's Encrypt, | |
| # il faut accepter les requêtes vers tous les noms de domaines | |
| # pour lesquels on veut un certificat SSL | |
| # acl valid_domains hdr_dom(Host) -i votre-domaine.fr chat.votre-domaine.fr encore-un-autre-domaine.com | |
| # http-request deny if !valid_domains | |
| # acl valid_method method GET OPTION HEAD | |
| # acl have_payload hdr_val(content-length) gt 0 | |
| # acl php_file path_end .php | |
| # http-request deny if !valid_method OR have_payload OR php_file | |
| # http-response set-header Strict-Transport-Security "max-age=16000000; includeSubDomains; preload;" if { ssl_fc } | |
| # server web01 blog:80 check |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment