Files
homelab/matrix/compose.yml
2026-06-06 23:08:36 -05:00

78 lines
2.4 KiB
YAML

services:
synapse-db:
image: postgres:16-alpine
container_name: synapse-db
restart: unless-stopped
environment:
POSTGRES_USER: synapse_user
POSTGRES_PASSWORD: ${SYNAPSE_DB_PASSWORD}
POSTGRES_DB: synapse-db
POSTGRES_INITDB_ARGS: "--locale=C --encoding=UTF8"
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
- matrix-net
synapse:
image: matrixdotorg/synapse:latest
container_name: matrix-synapse
restart: unless-stopped
depends_on:
- synapse-db
volumes:
- ./synapse_data:/data
- ./data:/raw-data
environment:
- SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
# Expose internally or to a reverse proxy.
# If using Traefik, omit ports and use labels instead.
labels:
- "traefik.enable=true"
- "traefik.http.routers.matrix.entrypoints=websecure"
- "traefik.http.routers.matrix.rule=Host(`matrix.riverrooks.dev`)"
- "traefik.http.routers.matrix.service=matrix-service"
- "traefik.http.services.matrix-service.loadbalancer.server.port=8008"
- "traefik.http.routers.matrix.tls=true"
- "traefik.http.routers.matrix.tls.certresolver=basic"
networks:
- matrix-net
- traefik
matrix-delegation:
image: nginx:alpine
container_name: matrix-delegation
restart: unless-stopped
# 1. Using "|" keeps literal newlines so the script executes perfectly
command: >
/bin/sh -c "mkdir -p /usr/share/nginx/html/.well-known/matrix && echo '{\"m.server\": \"matrix.riverrooks.dev:443\"}' > /usr/share/nginx/html/.well-known/matrix/server && nginx -g 'daemon off;'"
labels:
- "traefik.enable=true"
- "traefik.http.routers.matrix-delegation.rule=Host(`riverrooks.dev`) && PathPrefix(`/.well-known/matrix/server`)"
- "traefik.http.routers.matrix-delegation.entrypoints=websecure"
- "traefik.http.routers.matrix-delegation.tls.certresolver=desecresolver"
# 2. Added the traefik network so Traefik can actually reach this container
networks:
- matrix-net
- traefik
mautrix-gmessages:
image: dock.mau.fi/mautrix/gmessages:latest
container_name: mautrix-gmessages
restart: unless-stopped
volumes:
- ./data:/data
networks:
- matrix-net
depends_on:
- synapse-db
- synapse
networks:
matrix-net:
driver: bridge
traefik:
external: true