208 lines
6.4 KiB
YAML
208 lines
6.4 KiB
YAML
{% import 'macro/postgres.j2' as pg with context %}
|
|
---
|
|
version: '3.9'
|
|
|
|
services:
|
|
|
|
synapse:
|
|
image: registry.tobiasmanske.de/matrixdotorg/synapse:latest
|
|
user: "1000:1000"
|
|
# Since synapse does not retry to connect to the database, restart upon
|
|
# failure
|
|
restart: unless-stopped
|
|
# See the readme for a full documentation of the environment settings
|
|
# NOTE: You must edit homeserver.yaml to use postgres, it defaults to sqlite
|
|
environment:
|
|
- SYNAPSE_CONFIG_DIR=/config
|
|
- SYNAPSE_CONFIG_PATH=/config/homeserver.yaml
|
|
- TZ=Europe/Berlin
|
|
ulimits:
|
|
nofile:
|
|
soft: 10000
|
|
hard: 40000
|
|
volumes:
|
|
- synapse_data:/data
|
|
- ./synapse-config:/config:ro,Z
|
|
- ./mautrix-telegram/registration.yaml:/data/reg-mautrix-tg.yaml:ro,Z
|
|
- ./mautrix-slack/registration.yaml:/data/reg-mautrix-slack.yaml:ro,Z
|
|
- ./mautrix-signal/registration.yaml:/data/reg-mautrix-signal.yaml:ro,Z
|
|
depends_on:
|
|
- db
|
|
- redis
|
|
networks:
|
|
- default
|
|
- backend
|
|
- metrics
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.docker.network=${COMPOSE_PROJECT_NAME}_default"
|
|
- "traefik.http.routers.http-synapse.rule=Host(`synapse.{{ matrix.baseurl }}`)"
|
|
- "traefik.http.routers.http-synapse.entryPoints=websecure"
|
|
- "traefik.http.routers.http-synapse.service=matrix-synapse"
|
|
- "traefik.http.routers.matrix-synapse.rule=Host(`{{ matrix.baseurl }}`) && PathPrefix(`/_{path:(matrix|synapse)}/`)"
|
|
- "traefik.http.routers.matrix-synapse.entryPoints=websecure"
|
|
- "traefik.http.routers.matrix-synapse.service=matrix-synapse"
|
|
- "traefik.http.services.matrix-synapse.loadbalancer.server.port=8008"
|
|
- "prometheus-scrape.enabled=true"
|
|
- "prometheus-scrape.port=9091"
|
|
- "prometheus-scrape.metrics_path=/_synapse/metrics"
|
|
|
|
{{ pg.postgres("db", matrix.db.user, matrix.db.password, matrix.db.database, ["backend"] ) }}
|
|
|
|
caddy:
|
|
image: caddy:2
|
|
volumes:
|
|
- ./Caddyfile:/etc/caddy/Caddyfile:ro,z
|
|
restart: unless-stopped
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.docker.network=${COMPOSE_PROJECT_NAME}_default"
|
|
- "traefik.http.routers.matrix-well-known.rule=Host(`{{ matrix.baseurl }}`) && PathPrefix(`/.well-known/matrix/`)"
|
|
- "traefik.http.routers.matrix-well-known.entrypoints=websecure"
|
|
- "traefik.http.services.matrix-well-known.loadbalancer.server.port=80"
|
|
|
|
cinny:
|
|
image: ghcr.io/cinnyapp/cinny:latest
|
|
# image: registry.tobiasmanske.de/cinnyapp/cinny:latest
|
|
restart: unless-stopped
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.docker.network=${COMPOSE_PROJECT_NAME}_default"
|
|
- "traefik.http.routers.matrix-cinny.rule=Host(`cinny.{{ matrix.baseurl }}`)"
|
|
- "traefik.http.routers.matrix-cinny.entryPoints=websecure"
|
|
- "traefik.http.services.matrix-cinny.loadbalancer.server.port=80"
|
|
volumes:
|
|
- ./cinny-config.json:/app/config.json:ro,Z
|
|
networks:
|
|
- default
|
|
|
|
redis:
|
|
image: redis:latest
|
|
restart: unless-stopped
|
|
networks:
|
|
- backend
|
|
|
|
### SLIDING SYNC
|
|
|
|
{{ pg.postgres("db-syncv3", matrix.syncv3.user, matrix.syncv3.password, matrix.syncv3.database, ["syncv3"] ) }}
|
|
|
|
syncv3-proxy:
|
|
image: ghcr.io/matrix-org/sliding-sync:latest
|
|
restart: always
|
|
environment:
|
|
- "SYNCV3_SERVER=https://synapse.{{ matrix.baseurl }}"
|
|
- "SYNCV3_SECRET={{ matrix.syncv3.secret }}"
|
|
- "SYNCV3_BINDADDR=:8008"
|
|
- "SYNCV3_PROM=:2112"
|
|
- "SYNCV3_DB=user={{ matrix.syncv3.user }} dbname={{ matrix.syncv3.database }} sslmode=disable host=db-syncv3 password='{{ matrix.syncv3.password }}'"
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.docker.network=${COMPOSE_PROJECT_NAME}_default"
|
|
- "traefik.http.routers.matrix-syncv3-proxy.rule=Host(`syncv3.{{ matrix.baseurl }}`)"
|
|
- "traefik.http.routers.matrix-syncv3-proxy.entrypoints=websecure"
|
|
- "traefik.http.services.matrix-syncv3-proxy.loadbalancer.server.port=8008"
|
|
- "prometheus-scrape.enabled=false"
|
|
- "prometheus-scrape.port=2112"
|
|
networks:
|
|
- syncv3
|
|
- default
|
|
|
|
### BRIDGES
|
|
|
|
#### Telegram
|
|
|
|
mautrix-telegram:
|
|
image: dock.mau.dev/mautrix/telegram:latest
|
|
user: "1000:1000"
|
|
restart: unless-stopped
|
|
environment:
|
|
- "MAUTRIX_DIRECT_STARTUP=1"
|
|
volumes:
|
|
- bridge_tg_data:/data
|
|
- ./mautrix-telegram/config.yaml:/data/config.yaml:ro,Z
|
|
- ./mautrix-telegram/registration.yaml:/data/registration.yaml:ro,Z
|
|
networks:
|
|
- backend
|
|
- default # Needs to contact UFOs in the sky
|
|
depends_on:
|
|
- db-bridge-tg
|
|
- synapse
|
|
|
|
{{ pg.postgres("db-bridge-tg", matrix.bridge.tg.dbuser, matrix.bridge.tg.dbpass, matrix.bridge.tg.dbname, ["backend"] ) }}
|
|
|
|
#### SLACK
|
|
|
|
mautrix-slack:
|
|
image: dock.mau.dev/mautrix/slack:latest
|
|
environment:
|
|
- "UID=1000"
|
|
- "GID=1000"
|
|
restart: unless-stopped
|
|
volumes:
|
|
- bridge_slack_data:/data
|
|
- ./mautrix-slack/config.yaml:/data/config.yaml:ro,Z
|
|
- ./mautrix-slack/registration.yaml:/data/registration.yaml:ro,Z
|
|
networks:
|
|
- backend
|
|
- default # Needs to contact UFOs in the sky
|
|
depends_on:
|
|
- db-bridge-slack
|
|
- synapse
|
|
|
|
{{ pg.postgres("db-bridge-slack", matrix.bridge.slack.dbuser, matrix.bridge.slack.dbpass, matrix.bridge.slack.dbname, ["backend"] ) }}
|
|
|
|
#### SIGNAL
|
|
mautrix-signal:
|
|
image: dock.mau.dev/mautrix/signal:latest
|
|
restart: unless-stopped
|
|
environment:
|
|
- "MAUTRIX_DIRECT_STARTUP=1"
|
|
- "UID=1000"
|
|
networks:
|
|
- default
|
|
- backend
|
|
volumes:
|
|
- bridge_signal_data:/data
|
|
- signald_data:/signald
|
|
- ./mautrix-signal/config.yaml:/data/config.yaml:ro,Z
|
|
- ./mautrix-signal/registration.yaml:/data/registration.yaml:ro,Z
|
|
depends_on:
|
|
- signald
|
|
- db-bridge-signal
|
|
|
|
signald:
|
|
image: docker.io/signald/signald:latest
|
|
restart: unless-stopped
|
|
networks:
|
|
- default
|
|
- backend
|
|
volumes:
|
|
- signald_data:/signald
|
|
|
|
{{ pg.postgres("db-bridge-signal", matrix.bridge.signal.dbuser, matrix.bridge.signal.dbpass, matrix.bridge.signal.dbname, ["backend"] ) }}
|
|
|
|
networks:
|
|
default:
|
|
enable_ipv6: true
|
|
postgres:
|
|
internal: true
|
|
backend:
|
|
internal: true
|
|
syncv3:
|
|
internal: true
|
|
metrics:
|
|
external: true
|
|
|
|
volumes:
|
|
bridge_signal_data:
|
|
bridge_slack_data:
|
|
bridge_tg_data:
|
|
db-bridge-signal_data:
|
|
db-bridge-slack_data:
|
|
db-bridge-tg_data:
|
|
db-syncv3_data:
|
|
db_data:
|
|
signald_data:
|
|
synapse_data:
|
|
...
|