Încerc să configurez un server Matrix Synapse folosind Docker și un proxy invers Traefik v2.
Configurația mea funcționează dacă definesc o singură rețea în fișierul meu docker-compose și dacă Traefik, Synapse și postgres folosesc toate acea rețea.
Cu toate acestea, pe baza a ceea ce am învățat despre Docker până acum, ar trebui să pun postgres într-o rețea separată (sprijinit
) decât Traefik (web
). Synapse va fi apoi pe ambele rețele. Cu toate acestea, atunci când fac acest lucru, nu mă mai pot conecta la Synapse. Se expiră în cele din urmă spunând Timeout Gateway
.
E ca și cum Synapse ascultă doar pe backend
reţea.
versiunea: „3.2”
Servicii:
sinapsa:
container_name: sinapsă
Nume gazdă: ${MATRIX_HOSTNAME}
imagine: docker.io/matrixdotorg/synapse:latest
reporniți: dacă nu este oprit
mediu inconjurator:
- SYNAPSE_SERVER_NAME=${MATRIX_HOSTNAME}
- SYNAPSE_REPORT_STATS=da
- SYNAPSE_NO_TLS=1
- SYNAPSE_ENABLE_REGISTRATION=nu
- SYNAPSE_LOG_LEVEL=DEBUG
- SYNAPSE_REGISTRATION_SHARED_SECRET=${REG_SHARED_SECRET}
- POSTGRES_DB=synapse
- POSTGRES_HOST=db
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
# expune:
# - „8008”
volume:
- tip: bind
sursa: /opt/services/synapse
tinta: /data
depinde de:
- db
retele:
- web
- backend
etichete:
- "traefik.enable=true"
- "traefik.http.routers.synapse.rule=Host(`${MATRIX_HOSTNAME}`)"
- „traefik.http.services.synapse.loadbalancer.server.port=8008”
- „traefik.http.routers.synapse.entrypoints=websecure”
- „traefik.http.routers.synapse.tls.certresolver=myresolver”
- „traefik.docker.network=web”
db:
imagine: docker.io/postgres:10-alpine
container_name: „synapse_db”
reporniți: dacă nu este oprit
mediu inconjurator:
- POSTGRES_DB=synapse
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volume:
- /opt/services/synapse_db:/var/lib/postgresql/data
retele:
- backend
etichete:
- "traefik.enable=false"
traefik:
imagine: traefik:v2.5
container_name: "traefik"
comanda:
- "--api.insecure=true"
- „--providers.docker=true”
- „--providers.docker.exposedbydefault=false”
- „--providers.docker.network=web”
- „--entrypoints.websecure.address=:443”
- „--certificatesresolvers.myresolver.acme.tlschallenge=true”
- „--certificatesresolvers.myresolver.acme.email=${CERTBOT_EMAIL}”
- „--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json”
porturi:
# Routerul redirecționează 443 pe WAN la 8443 pe gazdă, astfel încât să nu avem nevoie de permisiuni root
- „8443:443”
- „8080:8080”
retele:
- web
volume:
- „/var/run/docker.sock:/var/run/docker.sock:ro”
- „./letsencrypt:/letsencrypt”
repornire:
dacă nu-s-a oprit
retele:
web:
backend:
Și în cadrul lui Synapse homeserver.yaml
fișier, există o secțiune care mi-ar putea permite să mă conectez la o anumită interfață, dar nu am făcut nicio modificare, așa că ar trebui să asculte implicit pe toate interfețele:
ascultători:
- port: 8008
tls: fals
tip: http
x_forwarded: adevărat
resurse:
# - nume: [client, federație]
- nume: [client]
compresă: fals
Dacă merg la o singură configurare de rețea, funcționează. Ce greșesc cu configurarea celor două rețele?