Salutations,
J’ai utilisé ce poste comme guide pour configurer Discourse afin qu’il fonctionne avec Traefik. J’ai déjà Traefik configuré avec une autre application web.
Lorsque je visite forum.private.com, je reçois une erreur « 404 page not found ».
Quelque chose semble fonctionner, car dans l’onglet Services du tableau de bord Traefik, je peux voir discourse@docker et discourse_secure@docker.
Cependant, il n’y a rien pour Discourse dans l’onglet Routers.
Les modifications que j’ai apportées à app.yml sont ci-dessous, largement basées sur le poste lié ci-dessus. J’ai ajouté un port exposé dans les arguments Docker en bas, ce qui semblait ouvrir les services mentionnés ci-dessus. Toute aide serait appréciée !
Traefik docker-compose
version: "3.3"
services:
################################################
#### Configuration du proxy Traefik #####
###############################################
traefik:
image: traefik:v2.0
restart: always
container_name: traefik
ports:
- "80:80" # <== http
- "8080:8080" # <== :8080 est l'adresse du tableau de bord
- "443:443" # <== https
command:
#### Ce sont les commandes CLI qui configureront Traefik et lui diront comment fonctionner ! ####
- --api.insecure=true # <== Activation de l'API non sécurisée, NON RECOMMANDÉ POUR LA PRODUCTION
- --api.dashboard=true # <== Activation du tableau de bord pour voir les services, middlewares, routers, etc...
- --api.debug=true # <== Activation de points de terminaison supplémentaires pour le débogage et le profilage
## Paramètres de journalisation (options : ERROR, DEBUG, PANIC, FATAL, WARN, INFO) - https://docs.traefik.io/observability/logs/ ##
- --log.level=DEBUG # <== Définir le niveau des journaux de Traefik
## Paramètres du fournisseur - https://docs.traefik.io/providers/docker/#provider-configuration ##
- --providers.docker=true # <== Activation de Docker comme fournisseur pour Traefik
- --providers.docker.exposedbydefault=false # <== Ne pas exposer tous les conteneurs à Traefik, seulement ceux activés
- --providers.file.filename=/dynamic.yaml # <== Référence à un fichier de configuration dynamique
- --providers.docker.network=web # <== Opérer sur le réseau Docker nommé web
## Paramètres des points d'entrée - https://docs.traefik.io/routing/entrypoints/#configuration ##
- --entrypoints.web.address=:80 # <== Définir un point d'entrée pour le port :80 nommé web
- --entrypoints.web-secured.address=:443 # <== Définir un point d'entrée pour HTTPS sur le port :443 nommé web-secured
## Paramètres des certificats (Let's Encrypt) - https://docs.traefik.io/https/acme/#configuration-examples ##
- --certificatesresolvers.mytlschallenge.acme.tlschallenge=true # <== Activer TLS-ALPN-01 pour générer et renouveler les certificats ACME
- --certificatesresolvers.mytlschallenge.acme.email=private@private.com # <== Définir l'email pour les certificats
- --certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json # <== Définir le fichier ACME pour stocker les informations du certificat
volumes:
- ./letsencrypt:/letsencrypt # <== Volume pour les certificats (TLS)
- /var/run/docker.sock:/var/run/docker.sock # <== Volume pour l'administration Docker
- ./dynamic.yaml:/dynamic.yaml # <== Volume pour le fichier de configuration dynamique, **réf : ligne 27
networks:
- web # <== Placer Traefik sur le réseau nommé web, pour accéder aux conteneurs sur ce réseau
labels:
#### Les labels définissent le comportement et les règles du proxy Traefik pour ce conteneur ####
- "traefik.enable=true" # <== Activer Traefik sur lui-même pour voir le tableau de bord et attribuer un sous-domaine pour y accéder
- "traefik.http.routers.api.rule=Host(`monitor.private.com`)" # <== Définir le domaine pour le tableau de bord
- "traefik.http.routers.api.service=api@internal" # <== Activer l'API en tant que service accessible
networks:
web:
external: true
backend:
external: false
volumes:
db_data: {}
wordpress:
external: true
db:
external: true
Discourse app.yml
## Ceci est le modèle de conteneur Docker tout-en-un et autonome pour Discourse
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT EN ÉDITANT !
## LES FICHIERS YAML SONT SUPER SUPER SENSIBLES AUX ERREURS D'ESPACE OU D'ALIGNEMENT !
## Visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Let's Encrypt (https)
#- "templates/web.ssl.template.yml"
# "templates/web.letsencrypt.ssl.template.yml"
## Quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## consultez https://meta.discourse.org/t/17247 pour plus de détails
expose:
#- "80:80" # http
#- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Définir db_shared_buffers à un maximum de 25 % de la mémoire totale.
## Sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
db_shared_buffers: "128MB"
## Peut améliorer les performances de tri, mais ajoute l'utilisation de la mémoire par connexion
#db_work_mem: "40MB"
## Quelle révision Git ce conteneur doit-il utiliser ? (par défaut : tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
## Sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
UNICORN_WORKERS: 2
## TODO : Le nom de domaine auquel cette instance Discourse répondra
## Requis. Discourse ne fonctionnera pas avec une adresse IP brute.
DISCOURSE_HOSTNAME: forum.private.com
## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
## nom d'hôte (-h option) que spécifié ci-dessus (par défaut "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO : Liste d'e-mails délimités par des virgules qui seront administrateurs et développeurs
## lors de l'inscription initiale, exemple 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'private@private.com'
## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
# L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis
# ATTENTION : le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
DISCOURSE_SMTP_ADDRESS: in-v3.mailjet.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: redacted
DISCOURSE_SMTP_PASSWORD: "redacted"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optionnel, par défaut true)
## Si vous avez ajouté le modèle Let's Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
LETSENCRYPT_ACCOUNT_EMAIL: private@private.com
## L'adresse CDN http ou https pour cette instance Discourse (configurée pour récupérer)
## voir https://meta.discourse.org/t/14857 pour plus de détails
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour plus de détails
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## Toutes les commandes personnalisées à exécuter après la construction
run:
- exec: echo "Début des commandes personnalisées"
## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :
## Après avoir reçu le premier e-mail d'inscription, re-commentez la ligne. Elle ne doit être exécutée qu'une seule fois.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Fin des commandes personnalisées"
labels:
app_name: discourse
#----Labels Traefik------------------------
traefik.enable: true
traefik.docker.network: web
#---SECTION ROUTEUR HTTP-------------------
traefik.http.routers.discourse.rule: Host(`forum.private.com`)
#--SECTION HTTP--------------------------
traefik.http.routers.discourse.entrypoints: web
traefik.http.routers.discourse.middlewares: discourse_redirect2https
traefik.http.services.discourse.loadbalancer.server.port: 80
#---SECTION ROUTEUR HTTPS
traefik.http.routers.discourse_secure.rule: Host(`forum.private.com`)
#--SECTION HTTPS
traefik.http.routers.discourse_secure.entrypoints: web-secured
traefik.http.services.discourse_secure.loadbalancer.server.port: 80
#--SECTION TLS
traefik.http.routers.discourse_secure.tls.certresolver: tlsChallenge_letsencrypt
#---SECTION MIDDLEWARE rediriger http vers https
traefik.http.middlewares.discourse_redirect2https.redirectscheme.scheme: https
docker_args:
- "--network=web"
- "--expose=80"
Merci