services: mas: image: ghcr.io/element-hq/matrix-authentication-service:main user: "1000" restart: unless-stopped depends_on: - masdb volumes: - ./docker/mas:/config:ro command: server -c /config/config.yaml ports: - "8778:8778/tcp" mas_create_admin1: image: ghcr.io/element-hq/matrix-authentication-service:main user: "1000" restart: no profiles: ["create-accounts"] depends_on: - mas volumes: - ./docker/mas:/config:ro command: | manage register-user -c /config/config.yaml -y --ignore-password-complexity -p admin1 -e admin1@admin1.local --admin -d "Admin One" admin1 mas_create_user1: image: ghcr.io/element-hq/matrix-authentication-service:main user: "1000" restart: no profiles: ["create-accounts"] depends_on: - mas volumes: - ./docker/mas:/config:ro command: | manage register-user -c /config/config.yaml -y --ignore-password-complexity -p user1 -e user1@user1.local -d "User One" user1 synapse: image: docker.io/matrixdotorg/synapse:latest user: "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_PATH=/config/homeserver.yaml volumes: # You may either store all the files in a local folder - ./storage/synapse:/data - ./docker/synapse:/config:ro # .. or you may split this between different storage points # - ./files:/data # - /path/to/ssd:/data/uploads # - /path/to/large_hdd:/data/media # In order to expose Synapse, remove one of the following, you might for # instance expose the TLS port directly: ports: - "8448:8448/tcp" masdb: image: docker.io/postgres:18-alpine user: "1000" environment: - POSTGRES_DB=masdb - POSTGRES_USER=masdb - POSTGRES_PASSWORD=changeme # ensure the database gets created correctly # https://element-hq.github.io/synapse/latest/postgres.html#set-up-database - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C - PGDATA=/data volumes: # You may store the database tables in a local folder.. - ./storage/maspostgres:/data # .. or store them on some high performance storage for better results # - /path/to/ssd/storage:/var/lib/postgresql/data element: image: docker.io/vectorim/element-web ports: - "8080:80/tcp" volumes: - ./docker/element/config.json:/app/config.json:ro oidc: image: dexidp/dex ports: - "9001:9001" volumes: - ./docker/dex:/conf:ro command: [ "dex", "serve", "/conf/dex.config.yaml" ] minio: image: quay.io/minio/minio command: minio server --console-address ":9002" /data ports: - 9000:9000/tcp - 9002:9002/tcp environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: # You may store the database tables in a local folder.. - ./storage/minio:/data redis: image: redis:alpine command: redis-server --requirepass ${REDIS_PASS:-secretredis} ports: - "6379:6379" volumes: - ./storage/redis-data:/data - ./storage/redis-conf:/usr/local/etc/redis/redis.conf