Puncte:0

Docker+Synapse+Traefik v2 nu mai funcționează când fac o rețea backend separată

drapel ch

Î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?

Puncte:1
drapel co

Traefik nu știe la ce IP al containerului ar trebui să încerce să se conecteze. Ești aproape de traefik.docker.network=web dar acesta nu este chiar numele rețelei. Rețeaua va primi un prefix pentru numele proiectului sau al stivei.

Pentru a codifica numele rețelei, puteți utiliza câmp de nume în secțiunea finală de rețea (aceasta este specifică versiunii 3.5 sau mai nouă):

versiunea „3.5”
Servicii:
  ...
retele:
  web:
    nume: web
  backend:

În caz contrar, setați proiectul în eticheta dvs. (acesta este de obicei numele directorului curent când utilizați docker-compune):

 etichete:
 ...
  - „traefik.docker.network=your_project_name_here_web”
drapel ch
Are sens, mulțumesc. Presupun că numele web trebuie actualizat atât în ​​argumentul liniei de comandă la traefik, cât și în eticheta sub sinapsă?
drapel co
@TimMB eticheta va suprascrie traefik CLI arg, dar da, este o idee bună să le faceți pe toate să se potrivească.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.