Compare commits

..

42 Commits

Author SHA1 Message Date
08b49c14d9 feat: use nginx proxy, config for public rooms (fedi)
Some checks failed
continuous-integration/drone/push Build is failing
See #38.
2023-10-08 01:41:29 +02:00
7683ebd189 fix: match env var to config
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone Build is failing
2023-10-06 20:36:55 +02:00
a3c9dfd65b feat: make v4 release & add notes
Some checks failed
continuous-integration/drone/push Build is failing
2023-10-06 19:16:06 +02:00
6dacecbfac fix: make TIMEOUT / ENABLE_AUTO_UPDATE optional 2023-10-06 19:15:44 +02:00
4770a03cb7 chore: minor (synapse: v1.93.0, telegram:v0.14.2)
Some checks failed
continuous-integration/drone/push Build is failing
2023-10-06 19:10:04 +02:00
7ead29b750 chore: publish 3.13.0+v1.92.2 release
Some checks failed
continuous-integration/drone/push Build is failing
2023-09-15 15:50:35 +02:00
3c772cc1e5 chore: publish 3.12.0+v1.90.0 release
Some checks failed
continuous-integration/drone/push Build is failing
2023-08-27 19:34:10 +02:00
e146435394 chore: publish 3.11.0+v1.89.0 release
Some checks failed
continuous-integration/drone/push Build is failing
2023-08-01 21:08:27 +02:00
795c2eb685 chore: publish 3.10.0+v1.88.0 release
Some checks failed
continuous-integration/drone/push Build is failing
2023-07-20 17:06:08 +02:00
7b1b5c37ed fix secrets
Some checks failed
continuous-integration/drone/push Build is failing
2023-07-19 22:53:35 +02:00
84204b03a7 chore: publish 3.9.1+v1.87.0 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-18 21:47:15 +02:00
b57b73d5d6 fix: bump homeserver config version 2023-07-18 21:46:54 +02:00
66bd6be8fc chore: publish 3.9.0+v1.87.0 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-18 21:34:53 +02:00
dda7f2a369 fix domain env
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-09 23:38:22 +02:00
d22a8257fb command for adding admin user
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-06 17:02:49 +02:00
2445d9f33a fix: healthchecks
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-12 14:14:43 +02:00
2a45273541 fix second oidc configuration
All checks were successful
continuous-integration/drone/push Build is passing
2023-05-31 15:50:55 +02:00
48efb7de51 chore: publish 3.8.0+v1.84.1 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-05-30 20:00:17 +02:00
b2e8bf9c8b chore: bump telegram config
All checks were successful
continuous-integration/drone/push Build is passing
2023-05-10 18:03:46 +02:00
d02981a2bf feat: sync_channel_members configurable for telegram bridge
All checks were successful
continuous-integration/drone/push Build is passing
2023-05-10 17:57:54 +02:00
c6f9b117e2 chore: publish 3.7.0+v1.82.0 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-05-08 00:53:44 +02:00
3wc
ade6147f35 chore: publish 3.6.0+v1.81.0 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-23 15:36:37 -04:00
3wc
50e0aa06cc Support separate DOMAIN vs SERVER_NAME
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-23 15:34:58 -04:00
3wc
f3732c8392 Goodbye, foo.yaml!
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-13 12:14:35 -04:00
e171ce052e chore: publish 3.5.0+v1.81.0 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-11 16:29:41 +02:00
5d5bd70818 Merge branch 'main' of https://git.coopcloud.tech/coop-cloud/matrix-synapse
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-08 23:09:33 +02:00
fd1a6c7a4a fix keyserver problems when federating 2023-04-08 23:09:16 +02:00
39a47a2515 chore: publish 3.4.0+v1.80.0 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-02 14:25:02 +02:00
6e556c8b2d fix: put smtp password in quotes
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-05 12:05:26 +01:00
74fb8014fa chore: publish 3.3.0+v1.78.0 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-04 14:12:33 +01:00
787e0fb3a9 chore: publish 3.2.0+v1.77.0 release
All checks were successful
continuous-integration/drone/push Build is passing
2023-02-27 19:33:34 +01:00
ead52c1acd Merge branch 'main' of https://git.coopcloud.tech/coop-cloud/matrix-synapse
Some checks failed
continuous-integration/drone/push Build is failing
2023-02-21 13:56:06 +01:00
fca551b735 add keycloak 2 and 3 2023-02-21 13:56:01 +01:00
f43a47d4c8 fix: use new mount for shared secret auth
All checks were successful
continuous-integration/drone/push Build is passing
See b3dfa11097
2023-02-14 10:00:28 +01:00
beeb1e47b1 chore: publish 3.1.0+v1.76.0 release
Some checks failed
continuous-integration/drone/push Build is failing
2023-02-13 09:26:27 +01:00
931e89f5f5 Merge pull request 'homserver -> homeserver' (#34) from speling into main
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Reviewed-on: #34
2023-02-02 19:09:48 +00:00
5a72540db2 homserver -> homeserver 2023-02-02 18:12:12 +00:00
3wc
703b8d91d2 Switch to self-hosted stack-ssh-deploy image [mass update]
All checks were successful
continuous-integration/drone/push Build is passing
2023-01-21 11:49:56 -08:00
3wc
05e9ee0732 Add drone configs / secrets [mass update]
All checks were successful
continuous-integration/drone/push Build is passing
2023-01-20 21:32:06 -08:00
3wc
ec22040bd3 Add CI and catalogue generation [mass update]
Some checks failed
continuous-integration/drone/push Build is failing
2023-01-20 10:45:03 -08:00
3wc
d5c70f5567 Update abra syntax in examples (finally) [mass update] 2023-01-19 16:02:28 -08:00
4445e0249f docs: README pass 2023-01-08 02:09:55 +01:00
21 changed files with 312 additions and 96 deletions

49
.drone.yml Normal file
View File

@ -0,0 +1,49 @@
---
kind: pipeline
name: deploy to swarm-test.autonomic.zone
steps:
- name: deployment
image: git.coopcloud.tech/coop-cloud/stack-ssh-deploy:latest
settings:
host: swarm-test.autonomic.zone
stack: matrix-synapse
generate_secrets: true
purge: true
deploy_key:
from_secret: drone_ssh_swarm_test
networks:
- proxy
environment:
DOMAIN: matrix-synapse.swarm-test.autonomic.zone
STACK_NAME: matrix-synapse
LETS_ENCRYPT_ENV: production
DISCORD_BRIDGE_YAML_VERSION: v1
ENTRYPOINT_CONF_VERSION: v1
HOMESERVER_YAML_VERSION: v17
LOG_CONFIG_VERSION: v1
SHARED_SECRET_AUTH_VERSION: v1
SIGNAL_BRIDGE_YAML_VERSION: v1
TELEGRAM_BRIDGE_YAML_VERSION: v1
SECRET_DB_PASSWORD_VERSION: v1
SECRET_FORM_SECRET_VERSION: v1
SECRET_MACAROON_SECRET_KEY_VERSION: v1
SECRET_REGISTRATION_SHARED_SECRET_VERSION: v1
trigger:
branch:
- main
---
kind: pipeline
name: generate recipe catalogue
steps:
- name: release a new version
image: plugins/downstream
settings:
server: https://build.coopcloud.tech
token:
from_secret: drone_abra-bot_token
fork: true
repositories:
- coop-cloud/auto-recipes-catalogue-json
trigger:
event: tag

View File

@ -1,18 +1,21 @@
TYPE=matrix-synapse TYPE=matrix-synapse
DOMAIN=matrix.example.com DOMAIN=matrix-synapse.example.com
#TIMEOUT=300
#ENABLE_AUTO_UPDATE=true
LETS_ENCRYPT_ENV=production LETS_ENCRYPT_ENV=production
COMPOSE_FILE="compose.yml" COMPOSE_FILE="compose.yml"
# POST_DEPLOY_CMDS="db set_admin"
## Admin details ## Admin details
SYNAPSE_ADMIN_EMAIL=admin@example.com ADMIN_EMAIL=admin@example.com
## Secrets ## Secrets
SECRET_DB_PASSWORD_VERSION=v1 SECRET_DB_PASSWORD_VERSION=v1
SECRET_FORM_SECRET_VERSION=v1 SECRET_FORM_SECRET_VERSION=v1
SECRET_MACAROON_SECRET_KEY_VERSION=v1 SECRET_MACAROON_VERSION=v1
SECRET_REGISTRATION_SHARED_SECRET_VERSION=v1 SECRET_REGISTRATION_VERSION=v1
## Federation ## Federation
@ -21,6 +24,8 @@ SECRET_REGISTRATION_SHARED_SECRET_VERSION=v1
# Set "true" to enable federation endpoint on $DOMAIN/.well-known/matrix/server # Set "true" to enable federation endpoint on $DOMAIN/.well-known/matrix/server
SERVE_SERVER_WELLKNOWN=false SERVE_SERVER_WELLKNOWN=false
ALLOW_PUBLIC_ROOMS_FEDERATION=false
## Registration ## Registration
ENABLE_REGISTRATION=false ENABLE_REGISTRATION=false
@ -48,6 +53,9 @@ ENCRYPTED_BY_DEFAULT=all
#ENABLE_ALLOWLIST=1 #ENABLE_ALLOWLIST=1
#FEDERATION_ALLOWLIST="[]" #FEDERATION_ALLOWLIST="[]"
# Set these to keyservers you trust - usually the same as your federation allowlist
#TRUSTED_KEYSERVERS="trusted_key_servers:\n - server_name: 'example.com'\n - server_name: 'example2.com'"
## Retention ## Retention
ALLOWED_LIFETIME_MAX=4w ALLOWED_LIFETIME_MAX=4w
@ -72,6 +80,16 @@ RETENTION_MAX_LIFETIME=4w
## TURN ## TURN
#COMPOSE_FILE="$COMPOSE_FILE:compose.keycloak3.yml"
#KEYCLOAK3_ENABLED=1
#KEYCLOAK3_ID=keycloak3
#KEYCLOAK3_NAME=
#KEYCLOAK3_URL=
#KEYCLOAK3_CLIENT_ID=
#KEYCLOAK3_CLIENT_DOMAIN=
#KEYCLOAK3_ALLOW_EXISTING_USERS=false
#SECRET_KEYCLOAK3_CLIENT_SECRET_VERSION=v1
#COMPOSE_FILE="$COMPOSE_FILE:compose.turn.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.turn.yml"
#TURN_ENABLED=1 #TURN_ENABLED=1
#TURN_URIS="[\"turns:coturn.foo.zone?transport=udp\", \"turns:coturn.foo.zone?transport=tcp\"]" #TURN_URIS="[\"turns:coturn.foo.zone?transport=udp\", \"turns:coturn.foo.zone?transport=tcp\"]"
@ -106,6 +124,7 @@ RETENTION_MAX_LIFETIME=4w
#ENABLE_ENCRYPTION=true #ENABLE_ENCRYPTION=true
#TELEGRAM_APP_ID= #TELEGRAM_APP_ID=
#TELEGRAM_BRIDGE_PERMISSIONS="{ \"*\": \"relaybot\" }" #TELEGRAM_BRIDGE_PERMISSIONS="{ \"*\": \"relaybot\" }"
#TELEGRAM_SYNC_CHANNEL_MEMBERS=true
#SECRET_TELEGRAM_DB_PASSWORD_VERSION=v1 #SECRET_TELEGRAM_DB_PASSWORD_VERSION=v1
#SECRET_TELEGRAM_API_HASH_VERSION=v1 #SECRET_TELEGRAM_API_HASH_VERSION=v1
#SECRET_TELEGRAM_BOT_TOKEN_VERSION=v1 #SECRET_TELEGRAM_BOT_TOKEN_VERSION=v1

View File

@ -18,73 +18,32 @@
1. Set up Docker Swarm and [`abra`](https://docs.coopcloud.tech/abra/) 1. Set up Docker Swarm and [`abra`](https://docs.coopcloud.tech/abra/)
2. Deploy [`coop-cloud/traefik`](https://git.coopcloud.tech/coop-cloud/traefik) 2. Deploy [`coop-cloud/traefik`](https://git.coopcloud.tech/coop-cloud/traefik)
3. `abra app new matrix-synapse --secrets` (optionally with `--pass` if you'd like to save secrets in `pass`) 3. `abra app new matrix-synapse --secrets` (optionally with `--pass` if you'd like to save secrets in `pass`)
4. `abra app YOURAPPDOMAIN config` - be sure to change `$DOMAIN` to something that resolves to your Docker swarm box 4. `abra app config YOURAPPDOMAIN` - be sure to change `$DOMAIN` to something that resolves to your Docker swarm box
5. `abra app YOURAPPDOMAIN deploy` 5. `abra app deploy YOURAPPDOMAIN`
6. Create an initial user: `abra app YOURAPPDOMAIN run app register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008` 6. Create an initial user: `abra app run YOURAPPDOMAIN app register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008`
## Tips & Tricks ## Tips & Tricks
### Set Admin User
`abra app cmd YOURAPPDOMAIN db set_admin <adminuser>`
### Disabling federation ### Disabling federation
> We're not sure this does it exactly and there is still a discussion running - Use `DISABLE_FEDERATION=1` to turn off federation listeners
> upstream about whether this is the right way to do it & whether it could be - Don't use [`compose.matrix.yml`](https://git.coopcloud.tech/coop-cloud/traefik/src/branch/master/compose.matrix.yml) in your traefik config to keep the federation ports closed
> more convenient. We welcome issues / change sets to close up more federation
> functionality.
- use `DISABLE_FEDERATION=1` to turn off federation listeners
- don't use [`compose.matrix.yml`](https://git.coopcloud.tech/coop-cloud/traefik/src/branch/master/compose.matrix.yml) in your traefik config to keep the federation ports closed
### Enabling federation ### Enabling federation
See [`#27`](https://git.coopcloud.tech/coop-cloud/matrix-synapse/pulls/27) for more. See [`#27`](https://git.coopcloud.tech/coop-cloud/matrix-synapse/pulls/27) for more. Depending on your setup, using `SERVE_SERVER_WELLKNOWN=true` might work to start federating. Make sure you don't leave `DISABLE_FEDERATION=1` set!
Depending on your setup, using `SERVE_SERVER_WELLKNOWN=true` might work to start federating.
Make sure you don't leave `DISABLE_FEDERATION=1` set!
### Seeing what changed in `homeserver.yaml` between versions
Change the version range to suit your needs.
```
git clone https://github.com/matrix-org/synapse
cd synapse/docs
git log --follow -p v1.48.0..v1.51.0 sample_config.yaml
```
### Generating a new `homeserver.yaml`
The default is also available to see [here](https://matrix-org.github.io/synapse/latest/usage/configuration/homeserver_sample_config.html).
```
docker run -it \
--entrypoint="" \
-e SYNAPSE_SERVER_NAME=foo.com \
-e SYNAPSE_REPORT_STATS=no \
matrixdotorg/synapse:v1.48.0 \
sh -c '/start.py generate; cat /data/homeserver.yaml' > homeserver.yaml.tmpl`
```
### Generating a new `<server>.log.config`
```
docker run -it \
--entrypoint="" \
-e SYNAPSE_SERVER_NAME=foo.com \
-e SYNAPSE_REPORT_STATS=no \
matrixdotorg/synapse:v1.48.0 \
sh -c '/start.py generate; cat /data/foo.com.log.config' > log.config
```
### Getting client discovery on a custom domain ### Getting client discovery on a custom domain
You'll need to deploy something like [this](https://git.autonomic.zone/ruangrupa/well-known-uris). You'll need to deploy something like [this](https://git.autonomic.zone/ruangrupa/well-known-uris). This could be implemented in this recipe but we haven't merged it in yet. Change sets are welcome.
This could be implemented in this recipe but we haven't merged it in yet. Change sets are welcome.
### Telegram bridging ### Telegram bridging
> WIP > WIP docs
Setting it up is a bit of a chicken/egg & chasing cats moment. Setting it up is a bit of a chicken/egg & chasing cats moment.
@ -123,7 +82,7 @@ Some helpful documentation:
### Discord bridging ### Discord bridging
> WIP > WIP docs
Just as messy as the Telegram bridging above! Rough guide: Just as messy as the Telegram bridging above! Rough guide:
@ -142,9 +101,9 @@ Some helpful documentation:
### Signal bridging ### Signal bridging
> WIP > WIP docs
OK, it's also awful to set this up. Do you see a pattern emerging? :) OK, it's also awful to set this up. Do you see a pattern emerging :)
- fake that you have the required tokens: - fake that you have the required tokens:
- `abra app secret insert example.com signal_hs_token v1 foo` - `abra app secret insert example.com signal_hs_token v1 foo`

16
abra.sh
View File

@ -1,7 +1,19 @@
export DISCORD_BRIDGE_YAML_VERSION=v2 export DISCORD_BRIDGE_YAML_VERSION=v2
export ENTRYPOINT_CONF_VERSION=v1 export ENTRYPOINT_CONF_VERSION=v1
export HOMESERVER_YAML_VERSION=v17 export HOMESERVER_YAML_VERSION=v24
export LOG_CONFIG_VERSION=v2 export LOG_CONFIG_VERSION=v2
export SHARED_SECRET_AUTH_VERSION=v1 export SHARED_SECRET_AUTH_VERSION=v1
export SIGNAL_BRIDGE_YAML_VERSION=v4 export SIGNAL_BRIDGE_YAML_VERSION=v4
export TELEGRAM_BRIDGE_YAML_VERSION=v5 export TELEGRAM_BRIDGE_YAML_VERSION=v6
export NGINX_CONFIG_VERSION=v4
export WK_SERVER_VERSION=v1
export WK_CLIENT_VERSION=v1
set_admin () {
admin=akadmin
if [ -n "$1" ]
then
admin=$1
fi
psql -U synapse -c "UPDATE users SET admin = 1 WHERE name = '@$admin:$DOMAIN'";
}

View File

@ -2,7 +2,7 @@
version: "3.8" version: "3.8"
services: services:
app: synapse:
environment: environment:
- APP_SERVICES_ENABLED - APP_SERVICES_ENABLED
- APP_SERVICE_CONFIGS - APP_SERVICE_CONFIGS

View File

@ -2,7 +2,7 @@
version: "3.8" version: "3.8"
services: services:
app: synapse:
secrets: secrets:
- db_password - db_password
- form_secret - form_secret

19
compose.keycloak2.yml Normal file
View File

@ -0,0 +1,19 @@
---
version: "3.8"
services:
synapse:
secrets:
- keycloak2_client_secret
environment:
- KEYCLOAK2_ALLOW_EXISTING_USERS
- KEYCLOAK2_CLIENT_ID
- KEYCLOAK2_ENABLED
- KEYCLOAK2_ID
- KEYCLOAK2_NAME
- KEYCLOAK2_URL
secrets:
keycloak2_client_secret:
external: true
name: ${STACK_NAME}_keycloak2_client_secret_${SECRET_KEYCLOAK2_CLIENT_SECRET_VERSION}

19
compose.keycloak3.yml Normal file
View File

@ -0,0 +1,19 @@
---
version: "3.8"
services:
synapse:
secrets:
- keycloak3_client_secret
environment:
- KEYCLOAK3_ALLOW_EXISTING_USERS
- KEYCLOAK3_CLIENT_ID
- KEYCLOAK3_ENABLED
- KEYCLOAK3_ID
- KEYCLOAK3_NAME
- KEYCLOAK3_URL
secrets:
keycloak3_client_secret:
external: true
name: ${STACK_NAME}_keycloak3_client_secret_${SECRET_KEYCLOAK3_CLIENT_SECRET_VERSION}

View File

@ -2,14 +2,14 @@
version: "3.8" version: "3.8"
services: services:
app: synapse:
environment: environment:
- SHARED_SECRET_AUTH_ENABLED - SHARED_SECRET_AUTH_ENABLED
secrets: secrets:
- shared_secret_auth - shared_secret_auth
configs: configs:
- source: shared_secret_auth - source: shared_secret_auth
target: /usr/local/lib/python3.9/site-packages/shared_secret_authenticator.py target: /usr/local/lib/python3.11/site-packages/shared_secret_authenticator.py
configs: configs:
shared_secret_auth: shared_secret_auth:

View File

@ -2,7 +2,7 @@
version: "3.8" version: "3.8"
services: services:
app: synapse:
environment: environment:
- APP_SERVICES_ENABLED - APP_SERVICES_ENABLED
- APP_SERVICE_CONFIGS - APP_SERVICE_CONFIGS
@ -10,14 +10,14 @@ services:
- signal-data:/signal-data - signal-data:/signal-data
signald: signald:
image: docker.io/signald/signald:0.23.0-non-root image: docker.io/signald/signald:0.23.2-non-root
networks: networks:
- internal - internal
volumes: volumes:
- signald-data:/signald - signald-data:/signald
signalbridge: signalbridge:
image: dock.mau.dev/mautrix/signal:v0.4.2 image: dock.mau.dev/mautrix/signal:v0.4.3
depends_on: depends_on:
- signaldb - signaldb
configs: configs:

View File

@ -2,7 +2,7 @@
version: "3.8" version: "3.8"
services: services:
app: synapse:
secrets: secrets:
- db_password - db_password
- form_secret - form_secret

View File

@ -2,7 +2,7 @@
version: "3.8" version: "3.8"
services: services:
app: synapse:
environment: environment:
- APP_SERVICES_ENABLED - APP_SERVICES_ENABLED
- APP_SERVICE_CONFIGS - APP_SERVICE_CONFIGS
@ -10,7 +10,7 @@ services:
- telegram-data:/telegram-data - telegram-data:/telegram-data
telegrambridge: telegrambridge:
image: dock.mau.dev/mautrix/telegram:v0.12.2 image: dock.mau.dev/mautrix/telegram:v0.14.2
depends_on: depends_on:
- telegramdb - telegramdb
configs: configs:
@ -25,6 +25,7 @@ services:
- HOMESERVER_URL - HOMESERVER_URL
- TELEGRAM_APP_ID - TELEGRAM_APP_ID
- TELEGRAM_BRIDGE_PERMISSIONS - TELEGRAM_BRIDGE_PERMISSIONS
- TELEGRAM_SYNC_CHANNEL_MEMBERS
- VERIFY_SSL - VERIFY_SSL
secrets: secrets:
- telegram_api_hash - telegram_api_hash

View File

@ -2,7 +2,7 @@
version: "3.8" version: "3.8"
services: services:
app: synapse:
secrets: secrets:
- db_password - db_password
- form_secret - form_secret

View File

@ -3,11 +3,40 @@ version: "3.8"
services: services:
app: app:
image: "matrixdotorg/synapse:v1.74.0" image: nginx:1.23.3
networks:
- proxy
- internal
environment:
- STACK_NAME
configs:
- source: nginx_config
target: /etc/nginx/nginx.conf
- source: wk_server
target: /var/www/.well-known/matrix/server
- source: wk_client
target: /var/www/.well-known/matrix/client
deploy:
restart_policy:
condition: on-failure
labels:
- "traefik.enable=true"
- "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=80"
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "coop-cloud.${STACK_NAME}.version=5.0.0+v1.93.0"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
healthcheck:
test: curl -f http://synapse:8008/health || exit 1
interval: 5s
timeout: 3s
retries: 20
synapse:
image: "matrixdotorg/synapse:v1.93.0"
volumes: volumes:
- "data:/data" - "data:/data"
depends_on:
- db
secrets: secrets:
- db_password - db_password
- registration_shared_secret - registration_shared_secret
@ -15,6 +44,7 @@ services:
- form_secret - form_secret
environment: environment:
- ALLOWED_LIFETIME_MAX - ALLOWED_LIFETIME_MAX
- ALLOW_PUBLIC_ROOMS_FEDERATION
- AUTO_JOIN_ROOM - AUTO_JOIN_ROOM
- AUTO_JOIN_ROOM_ENABLED - AUTO_JOIN_ROOM_ENABLED
- DISABLE_FEDERATION - DISABLE_FEDERATION
@ -41,7 +71,6 @@ services:
- VIRTUAL_HOST=${DOMAIN} - VIRTUAL_HOST=${DOMAIN}
- VIRTUAL_PORT=8008 - VIRTUAL_PORT=8008
networks: networks:
- proxy
- internal - internal
entrypoint: /docker-entrypoint.sh entrypoint: /docker-entrypoint.sh
configs: configs:
@ -52,16 +81,12 @@ services:
- source: entrypoint_conf - source: entrypoint_conf
target: /docker-entrypoint.sh target: /docker-entrypoint.sh
mode: 0555 mode: 0555
deploy: healthcheck:
restart_policy: test: ["CMD", "curl", "-f", "http://localhost:8008/health"]
condition: on-failure interval: 30s
labels: timeout: 10s
- "traefik.enable=true" retries: 10
- "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=8008" start_period: 1m
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "coop-cloud.${STACK_NAME}.version=3.0.0+v1.74.0"
db: db:
image: postgres:13-alpine image: postgres:13-alpine
@ -74,10 +99,15 @@ services:
- POSTGRES_INITDB_ARGS="-E \"UTF8\"" - POSTGRES_INITDB_ARGS="-E \"UTF8\""
- POSTGRES_PASSWORD_FILE=/run/secrets/db_password - POSTGRES_PASSWORD_FILE=/run/secrets/db_password
- POSTGRES_USER=synapse - POSTGRES_USER=synapse
- DOMAIN
networks: networks:
- internal - internal
healthcheck: healthcheck:
test: ["CMD", "pg_isready", "-U", "$POSTGRES_USER" ] test: ["CMD", "pg_isready", "-U", "synapse"]
interval: 30s
timeout: 10s
retries: 10
start_period: 1m
volumes: volumes:
- postgres:/var/lib/postgresql/data - postgres:/var/lib/postgresql/data
deploy: deploy:
@ -102,13 +132,25 @@ configs:
file: entrypoint.sh.tmpl file: entrypoint.sh.tmpl
template_driver: golang template_driver: golang
homeserver_yaml: homeserver_yaml:
name: ${STACK_NAME}_homserver_yaml_${HOMESERVER_YAML_VERSION} name: ${STACK_NAME}_homeserver_yaml_${HOMESERVER_YAML_VERSION}
file: homeserver.yaml.tmpl file: homeserver.yaml.tmpl
template_driver: golang template_driver: golang
log_config: log_config:
name: ${STACK_NAME}_log_config_${LOG_CONFIG_VERSION} name: ${STACK_NAME}_log_config_${LOG_CONFIG_VERSION}
file: log.config.tmpl file: log.config.tmpl
template_driver: golang template_driver: golang
nginx_config:
name: ${STACK_NAME}_nginx_config_${NGINX_CONFIG_VERSION}
file: nginx.conf.tmpl
template_driver: golang
wk_server:
name: ${STACK_NAME}_wk_server_${WK_SERVER_VERSION}
file: well_known_server.conf.tmpl
template_driver: golang
wk_client:
name: ${STACK_NAME}_wk_client_${WK_CLIENT_VERSION}
file: well_known_client.conf.tmpl
template_driver: golang
secrets: secrets:
db_password: db_password:
@ -116,10 +158,10 @@ secrets:
name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION} name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION}
registration_shared_secret: registration_shared_secret:
external: true external: true
name: ${STACK_NAME}_db_password_${SECRET_REGISTRATION_SHARED_SECRET_VERSION} name: ${STACK_NAME}_registration_${SECRET_REGISTRATION_VERSION}
macaroon_secret_key: macaroon_secret_key:
external: true external: true
name: ${STACK_NAME}_db_password_${SECRET_MACAROON_SECRET_KEY_VERSION} name: ${STACK_NAME}_macaroon_${SECRET_MACAROON_VERSION}
form_secret: form_secret:
external: true external: true
name: ${STACK_NAME}_db_password_${SECRET_FORM_SECRET_VERSION} name: ${STACK_NAME}_form_secret_${SECRET_FORM_SECRET_VERSION}

View File

@ -38,7 +38,7 @@ modules:
# lowercase and may contain an explicit port. # lowercase and may contain an explicit port.
# Examples: matrix.org, localhost:8080 # Examples: matrix.org, localhost:8080
# #
server_name: {{ env "DOMAIN" }} server_name: {{ or (env "SERVER_NAME") (env "DOMAIN") }}
# The public-facing base URL that clients use to access this Homeserver (not # The public-facing base URL that clients use to access this Homeserver (not
# including _matrix/...). This is the same URL a user might enter into the # including _matrix/...). This is the same URL a user might enter into the
@ -78,7 +78,7 @@ allow_public_rooms_without_auth: false
# If set to 'true', allows any other homeserver to fetch the server's public # If set to 'true', allows any other homeserver to fetch the server's public
# rooms directory via federation. Defaults to 'false'. # rooms directory via federation. Defaults to 'false'.
# #
allow_public_rooms_over_federation: false allow_public_rooms_over_federation: {{ env "ALLOW_PUBLIC_ROOMS_FEDERATION" }}
listeners: listeners:
# Unsecure HTTP listener: for when matrix traffic passes through a reverse proxy # Unsecure HTTP listener: for when matrix traffic passes through a reverse proxy
@ -427,8 +427,12 @@ signing_key_path: "/data/{{ env "DOMAIN" }}.signing.key"
# "ed25519:auto": "abcdefghijklmnopqrstuvwxyzabcdefghijklmopqr" # "ed25519:auto": "abcdefghijklmnopqrstuvwxyzabcdefghijklmopqr"
# - server_name: "my_other_trusted_server.example.com" # - server_name: "my_other_trusted_server.example.com"
# #
{{ if eq (env "ENABLE_ALLOWLIST") "1" }}
{{ env "TRUSTED_KEYSERVERS" }}
{{ else }}
trusted_key_servers: trusted_key_servers:
- server_name: "matrix.org" - server_name: "matrix.org"
{{ end }}
## Single sign-on integration ## ## Single sign-on integration ##
@ -604,6 +608,34 @@ oidc_providers:
display_name_template: "{{ "{{ user.name }}" }}" display_name_template: "{{ "{{ user.name }}" }}"
{{ end }} {{ end }}
{{ if eq (env "KEYCLOAK2_ENABLED") "1" }}
- idp_id: {{ env "KEYCLOAK2_ID" }}
idp_name: {{ env "KEYCLOAK2_NAME" }}
issuer: "{{ env "KEYCLOAK2_URL" }}"
client_id: "{{ env "KEYCLOAK2_CLIENT_ID" }}"
client_secret: "{{ secret "keycloak2_client_secret" }}"
scopes: ["openid", "profile"]
allow_existing_users: {{ env "KEYCLOAK2_ALLOW_EXISTING_USERS" }}
user_mapping_provider:
config:
localpart_template: "{{ "{{ user.preferred_username }}" }}"
display_name_template: "{{ "{{ user.name }}" }}"
{{ end }}
{{ if eq (env "KEYCLOAK3_ENABLED") "1" }}
- idp_id: {{ env "KEYCLOAK3_ID" }}
idp_name: {{ env "KEYCLOAK3_NAME" }}
issuer: "{{ env "KEYCLOAK3_URL" }}"
client_id: "{{ env "KEYCLOAK3_CLIENT_ID" }}"
client_secret: "{{ secret "keycloak3_client_secret" }}"
scopes: ["openid", "profile"]
allow_existing_users: {{ env "KEYCLOAK3_ALLOW_EXISTING_USERS" }}
user_mapping_provider:
config:
localpart_template: "{{ "{{ user.preferred_username }}" }}"
display_name_template: "{{ "{{ user.name }}" }}"
{{ end }}
# Additional settings to use with single-sign on systems such as OpenID Connect, # Additional settings to use with single-sign on systems such as OpenID Connect,
# SAML2 and CAS. # SAML2 and CAS.
# #
@ -659,7 +691,7 @@ email:
# authentication is attempted. # authentication is attempted.
# #
smtp_user: {{ env "SMTP_USER" }} smtp_user: {{ env "SMTP_USER" }}
smtp_pass: {{ secret "smtp_password" }} smtp_pass: "{{ secret "smtp_password" }}"
# Uncomment the following to require TLS transport security for SMTP. # Uncomment the following to require TLS transport security for SMTP.
# By default, Synapse will connect over plain text, and will then switch to # By default, Synapse will connect over plain text, and will then switch to

31
nginx.conf.tmpl Normal file
View File

@ -0,0 +1,31 @@
user www-data;
events {
worker_connections 768;
}
http {
server {
listen 80;
access_log off;
error_log /dev/null;
server_name {{ env "DOMAIN" }};
location ~* ^(\/_matrix|\/_synapse\/client) {
proxy_pass http://{{ env "STACK_NAME"}}_synapse:8008;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
client_max_body_size 50M;
proxy_http_version 1.1;
}
location /.well-known/matrix/ {
root /var/www/;
default_type application/json;
add_header Access-Control-Allow-Origin *;
}
}
}

8
release/4.0.0+v1.93.0 Normal file
View File

@ -0,0 +1,8 @@
We had to rename some secrets: https://git.coopcloud.tech/coop-cloud/matrix-synapse/issues/35
Copy the secrets:
* `registration_shared_secret` to `registration`
* `macaroon_secret_key` to `macaroon`
Regeneration of these secrets should also work.

17
release/5.0.0+v1.93.0 Normal file
View File

@ -0,0 +1,17 @@
An Nginx proxy has been configured as the entrypoint for Synapse. This is not
optional. This is done to counteract IP collection in Synapse itself. See more:
!!! You MUST undeploy your Synapse install before upgrading to this version !!!
This is because there have been a service rename in the recipe configuration:
* `app` -> `synapse`
This could break stuff in the recipe, so please report issues if you run into
anything!
https://git.coopcloud.tech/coop-cloud/matrix-synapse/issues/38
Thanks!
-- d1

View File

@ -151,7 +151,7 @@ bridge:
# Whether or not to sync the member list in channels. # Whether or not to sync the member list in channels.
# If no channel admins have logged into the bridge, the bridge won't be able to sync the member # If no channel admins have logged into the bridge, the bridge won't be able to sync the member
# list regardless of this setting. # list regardless of this setting.
sync_channel_members: true sync_channel_members: {{ env "TELEGRAM_SYNC_CHANNEL_MEMBERS" }}
# Whether or not to skip deleted members when syncing members. # Whether or not to skip deleted members when syncing members.
skip_deleted_members: true skip_deleted_members: true
# Whether or not to automatically synchronize contacts and chats of Matrix users logged into # Whether or not to automatically synchronize contacts and chats of Matrix users logged into

View File

@ -0,0 +1,5 @@
{
"m.homeserver": {
"base_url": "https://{{ env "DOMAIN" }}"
}
}

View File

@ -0,0 +1,3 @@
{
"m.server": "{{ env "DOMAIN" }}:443"
}