Score:0

Docker+Synapse+Traefik v2 หยุดทำงานเมื่อฉันสร้างเครือข่ายแบ็กเอนด์แยกต่างหาก

ธง ch

ฉันกำลังพยายามตั้งค่าเซิร์ฟเวอร์ Matrix Synapse โดยใช้ Docker และ Traefik v2 reverse proxy

การตั้งค่าของฉันใช้งานได้หากฉันกำหนดเครือข่ายเดียวในไฟล์ docker-compose และมี Traefik, Synapse และ postgres ใช้เครือข่ายนั้นทั้งหมด

อย่างไรก็ตาม จากสิ่งที่ฉันได้เรียนรู้เกี่ยวกับ Docker จนถึงตอนนี้ ฉันควรใส่ postgres ในเครือข่ายแยกต่างหาก (สำรอง) มากกว่า Traefik (เว็บ). ไซแนปส์จะอยู่ทั้งสองเครือข่าย อย่างไรก็ตาม เมื่อฉันทำเช่นนั้น ฉันไม่สามารถเชื่อมต่อกับไซแนปส์ได้อีกต่อไป ในที่สุดก็หมดเวลาพูดว่า หมดเวลาของเกตเวย์.

ราวกับว่าไซแนปส์กำลังฟังอยู่เท่านั้น แบ็กเอนด์ เครือข่าย

รุ่น: '3.2'
บริการ:
  ไซแนปส์:
    container_name: ไซแนปส์
    ชื่อโฮสต์: ${MATRIX_HOSTNAME}
    ภาพ: docker.io/matrixdotorg/synapse:latest
    รีสตาร์ท: เว้นแต่จะหยุด
    สิ่งแวดล้อม:
      - SYNAPSE_SERVER_NAME=${MATRIX_HOSTNAME}
      - SYNAPSE_REPORT_STATS=ใช่
      - SYNAPSE_NO_TLS=1
      - SYNAPSE_ENABLE_REGISTRATION=ไม่มี
      - SYNAPSE_LOG_LEVEL=ดีบัก
      - SYNAPSE_REGISTRATION_SHARED_SECRET=${REG_SHARED_SECRET}
      - POSTGRES_DB=ไซแนปส์
      - POSTGRES_HOST=ฐานข้อมูล
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    # เปิดเผย: 
    # - "8008"
    ปริมาณ:
      - ประเภท: ผูก
        ที่มา: /opt/services/synapse
        เป้าหมาย: /ข้อมูล
    ขึ้นอยู่กับ:
      - ฐานข้อมูล
    เครือข่าย:
      - เว็บ
      - แบ็กเอนด์
    ป้ายกำกับ:
      - "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=เว็บ"

  ฐานข้อมูล:
    ภาพ: docker.io/postgres:10-alpine
    ชื่อคอนเทนเนอร์: "synapse_db"
    รีสตาร์ท: เว้นแต่จะหยุด
    สิ่งแวดล้อม:
      - POSTGRES_DB=ไซแนปส์
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    ปริมาณ:
      - /opt/services/synapse_db:/var/lib/postgresql/data
    เครือข่าย:
      - แบ็กเอนด์
    ป้ายกำกับ:
      - "traefik.enable=false"
  
  เทรฟิค:
    ภาพ: traefik:v2.5
    ชื่อคอนเทนเนอร์: "traefik"
    สั่งการ: 
      - "--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"
    พอร์ต:
      # เราเตอร์ส่งต่อ 443 บน WAN ไปยัง 8443 บนโฮสต์ ดังนั้นเราจึงไม่ต้องการสิทธิ์รูท
      - "8443:443"
      - "8080:8080"
    เครือข่าย:
      - เว็บ
    ปริมาณ:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./letsencrypt:/letsencrypt"
    เริ่มต้นใหม่:
      เว้นแต่หยุด

เครือข่าย:
  เว็บ:
  แบ็กเอนด์:

และภายในไซแนปส์ homeserver.yaml ไฟล์ มีส่วนที่สามารถให้ฉันผูกกับอินเทอร์เฟซเฉพาะ แต่ฉันไม่ได้ทำการเปลี่ยนแปลงใด ๆ ดังนั้นควรฟังบนอินเทอร์เฟซทั้งหมดตามค่าเริ่มต้น:

ผู้ฟัง:
  - พอร์ต: 8008
    tls: เท็จ
    พิมพ์: http
    x_forwarded: จริง

    ทรัพยากร:
      # - ชื่อ: [ลูกค้า สหพันธรัฐ]
      - ชื่อ: [ลูกค้า]
        บีบอัด: เท็จ

ถ้าฉันลงไปที่การตั้งค่าเครือข่ายเดียวก็ใช้งานได้ ฉันทำอะไรผิดกับการตั้งค่าสองเครือข่าย

Score:1
ธง co

Traefik ไม่ทราบว่าควรพยายามเชื่อมต่อ IP ใดของคอนเทนเนอร์ คุณสนิทกับ traefik.docker.network=เว็บ แต่นั่นไม่ใช่ชื่อของเครือข่ายจริงๆ เครือข่ายจะได้รับคำนำหน้าชื่อโปรเจ็กต์หรือสแต็ก

ในการฮาร์ดโค้ดชื่อเครือข่าย คุณสามารถใช้ เขตข้อมูลชื่อ ในส่วนเครือข่ายสุดท้าย (เฉพาะเวอร์ชัน 3.5 หรือใหม่กว่า):

รุ่น '3.5'
บริการ:
  ...
เครือข่าย:
  เว็บ:
    ชื่อ:เว็บ
  แบ็กเอนด์:

มิฉะนั้น ให้ตั้งค่าโปรเจ็กต์ในป้ายกำกับของคุณ (โดยปกติจะเป็นชื่อไดเร็กทอรีปัจจุบันเมื่อใช้ นักเทียบท่าเขียน):

 ป้ายกำกับ:
 ...
  - "traefik.docker.network=your_project_name_here_web"
ch flag
นั่นสมเหตุสมผลแล้ว ขอบคุณ ฉันถือว่าชื่อเว็บจำเป็นต้องอัปเดตทั้งในอาร์กิวเมนต์บรรทัดคำสั่งเพื่อ traefik และป้ายกำกับภายใต้ synapse?
co flag
@TimMB ป้ายกำกับจะแทนที่ traefik CLI arg แต่ใช่ เป็นความคิดที่ดีที่จะทำให้ตรงกันทั้งหมด

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา