ฉันกำลังพยายามตั้งค่าเซิร์ฟเวอร์ 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: จริง
ทรัพยากร:
# - ชื่อ: [ลูกค้า สหพันธรัฐ]
- ชื่อ: [ลูกค้า]
บีบอัด: เท็จ
ถ้าฉันลงไปที่การตั้งค่าเครือข่ายเดียวก็ใช้งานได้ ฉันทำอะไรผิดกับการตั้งค่าสองเครือข่าย