mirror of https://github.com/watcha-fr/synapse
Docker Compose Worker Documentation and Examples (#12737)
parent
3c1c40d843
commit
c316fe8d4a
@ -0,0 +1 @@ |
||||
Add documentation for how to configure Synapse with Workers using Docker Compose. Includes example worker config and docker-compose.yaml. Contributed by @Thumbscrew. |
@ -0,0 +1,125 @@ |
||||
# Setting up Synapse with Workers using Docker Compose |
||||
|
||||
This directory describes how deploy and manage Synapse and workers via [Docker Compose](https://docs.docker.com/compose/). |
||||
|
||||
Example worker configuration files can be found [here](workers). |
||||
|
||||
All examples and snippets assume that your Synapse service is called `synapse` in your Docker Compose file. |
||||
|
||||
An example Docker Compose file can be found [here](docker-compose.yaml). |
||||
|
||||
## Worker Service Examples in Docker Compose |
||||
|
||||
In order to start the Synapse container as a worker, you must specify an `entrypoint` that loads both the `homeserver.yaml` and the configuration for the worker (`synapse-generic-worker-1.yaml` in the example below). You must also include the worker type in the environment variable `SYNAPSE_WORKER` or alternatively pass `-m synapse.app.generic_worker` as part of the `entrypoint` after `"/start.py", "run"`). |
||||
|
||||
### Generic Worker Example |
||||
|
||||
```yaml |
||||
synapse-generic-worker-1: |
||||
image: matrixdotorg/synapse:latest |
||||
container_name: synapse-generic-worker-1 |
||||
restart: unless-stopped |
||||
entrypoint: ["/start.py", "run", "--config-path=/data/homeserver.yaml", "--config-path=/data/workers/synapse-generic-worker-1.yaml"] |
||||
healthcheck: |
||||
test: ["CMD-SHELL", "curl -fSs http://localhost:8081/health || exit 1"] |
||||
start_period: "5s" |
||||
interval: "15s" |
||||
timeout: "5s" |
||||
volumes: |
||||
- ${VOLUME_PATH}/data:/data:rw # Replace VOLUME_PATH with the path to your Synapse volume |
||||
environment: |
||||
SYNAPSE_WORKER: synapse.app.generic_worker |
||||
# Expose port if required so your reverse proxy can send requests to this worker |
||||
# Port configuration will depend on how the http listener is defined in the worker configuration file |
||||
ports: |
||||
- 8081:8081 |
||||
depends_on: |
||||
- synapse |
||||
``` |
||||
|
||||
### Federation Sender Example |
||||
|
||||
Please note: The federation sender does not receive REST API calls so no exposed ports are required. |
||||
|
||||
```yaml |
||||
synapse-federation-sender-1: |
||||
image: matrixdotorg/synapse:latest |
||||
container_name: synapse-federation-sender-1 |
||||
restart: unless-stopped |
||||
entrypoint: ["/start.py", "run", "--config-path=/data/homeserver.yaml", "--config-path=/data/workers/synapse-federation-sender-1.yaml"] |
||||
healthcheck: |
||||
disable: true |
||||
volumes: |
||||
- ${VOLUME_PATH}/data:/data:rw # Replace VOLUME_PATH with the path to your Synapse volume |
||||
environment: |
||||
SYNAPSE_WORKER: synapse.app.federation_sender |
||||
depends_on: |
||||
- synapse |
||||
``` |
||||
|
||||
## `homeserver.yaml` Configuration |
||||
|
||||
### Enable Redis |
||||
|
||||
Locate the `redis` section of your `homeserver.yaml` and enable and configure it: |
||||
|
||||
```yaml |
||||
redis: |
||||
enabled: true |
||||
host: redis |
||||
port: 6379 |
||||
# password: <secret_password> |
||||
``` |
||||
|
||||
This assumes that your Redis service is called `redis` in your Docker Compose file. |
||||
|
||||
### Add a replication Listener |
||||
|
||||
Locate the `listeners` section of your `homeserver.yaml` and add the following replication listener: |
||||
|
||||
```yaml |
||||
listeners: |
||||
# Other listeners |
||||
|
||||
- port: 9093 |
||||
type: http |
||||
resources: |
||||
- names: [replication] |
||||
``` |
||||
|
||||
This listener is used by the workers for replication and is referred to in worker config files using the following settings: |
||||
|
||||
```yaml |
||||
worker_replication_host: synapse |
||||
worker_replication_http_port: 9093 |
||||
``` |
||||
|
||||
### Add Workers to `instance_map` |
||||
|
||||
Locate the `instance_map` section of your `homeserver.yaml` and populate it with your workers: |
||||
|
||||
```yaml |
||||
instance_map: |
||||
synapse-generic-worker-1: # The worker_name setting in your worker configuration file |
||||
host: synapse-generic-worker-1 # The name of the worker service in your Docker Compose file |
||||
port: 8034 # The port assigned to the replication listener in your worker config file |
||||
synapse-federation-sender-1: |
||||
host: synapse-federation-sender-1 |
||||
port: 8034 |
||||
``` |
||||
|
||||
### Configure Federation Senders |
||||
|
||||
This section is applicable if you are using Federation senders (synapse.app.federation_sender). Locate the `send_federation` and `federation_sender_instances` settings in your `homeserver.yaml` and configure them: |
||||
|
||||
```yaml |
||||
# This will disable federation sending on the main Synapse instance |
||||
send_federation: false |
||||
|
||||
federation_sender_instances: |
||||
- synapse-federation-sender-1 # The worker_name setting in your federation sender worker configuration file |
||||
``` |
||||
|
||||
## Other Worker types |
||||
|
||||
Using the concepts shown here it is possible to create other worker types in Docker Compose. See the [Workers](https://matrix-org.github.io/synapse/latest/workers.html#available-worker-applications) documentation for a list of available workers. |
@ -0,0 +1,77 @@ |
||||
networks: |
||||
backend: |
||||
|
||||
services: |
||||
postgres: |
||||
image: postgres:latest |
||||
restart: unless-stopped |
||||
volumes: |
||||
- ${VOLUME_PATH}/var/lib/postgresql/data:/var/lib/postgresql/data:rw |
||||
networks: |
||||
- backend |
||||
environment: |
||||
POSTGRES_DB: synapse |
||||
POSTGRES_USER: synapse_user |
||||
POSTGRES_PASSWORD: postgres |
||||
POSTGRES_INITDB_ARGS: --encoding=UTF8 --locale=C |
||||
|
||||
redis: |
||||
image: redis:latest |
||||
restart: unless-stopped |
||||
networks: |
||||
- backend |
||||
|
||||
synapse: |
||||
image: matrixdotorg/synapse:latest |
||||
container_name: synapse |
||||
restart: unless-stopped |
||||
volumes: |
||||
- ${VOLUME_PATH}/data:/data:rw |
||||
ports: |
||||
- 8008:8008 |
||||
networks: |
||||
- backend |
||||
environment: |
||||
SYNAPSE_CONFIG_DIR: /data |
||||
SYNAPSE_CONFIG_PATH: /data/homeserver.yaml |
||||
depends_on: |
||||
- postgres |
||||
|
||||
synapse-generic-worker-1: |
||||
image: matrixdotorg/synapse:latest |
||||
container_name: synapse-generic-worker-1 |
||||
restart: unless-stopped |
||||
entrypoint: ["/start.py", "run", "--config-path=/data/homeserver.yaml", "--config-path=/data/workers/synapse-generic-worker-1.yaml"] |
||||
healthcheck: |
||||
test: ["CMD-SHELL", "curl -fSs http://localhost:8081/health || exit 1"] |
||||
start_period: "5s" |
||||
interval: "15s" |
||||
timeout: "5s" |
||||
networks: |
||||
- backend |
||||
volumes: |
||||
- ${VOLUME_PATH}/data:/data:rw # Replace VOLUME_PATH with the path to your Synapse volume |
||||
environment: |
||||
SYNAPSE_WORKER: synapse.app.generic_worker |
||||
# Expose port if required so your reverse proxy can send requests to this worker |
||||
# Port configuration will depend on how the http listener is defined in the worker configuration file |
||||
ports: |
||||
- 8081:8081 |
||||
depends_on: |
||||
- synapse |
||||
|
||||
synapse-federation-sender-1: |
||||
image: matrixdotorg/synapse:latest |
||||
container_name: synapse-federation-sender-1 |
||||
restart: unless-stopped |
||||
entrypoint: ["/start.py", "run", "--config-path=/data/homeserver.yaml", "--config-path=/data/workers/synapse-federation-sender-1.yaml"] |
||||
healthcheck: |
||||
disable: true |
||||
networks: |
||||
- backend |
||||
volumes: |
||||
- ${VOLUME_PATH}/data:/data:rw # Replace VOLUME_PATH with the path to your Synapse volume |
||||
environment: |
||||
SYNAPSE_WORKER: synapse.app.federation_sender |
||||
depends_on: |
||||
- synapse |
@ -0,0 +1,14 @@ |
||||
worker_app: synapse.app.federation_sender |
||||
worker_name: synapse-federation-sender-1 |
||||
|
||||
# The replication listener on the main synapse process. |
||||
worker_replication_host: synapse |
||||
worker_replication_http_port: 9093 |
||||
|
||||
worker_listeners: |
||||
- type: http |
||||
port: 8034 |
||||
resources: |
||||
- names: [replication] |
||||
|
||||
worker_log_config: /data/federation_sender.log.config |
@ -0,0 +1,19 @@ |
||||
worker_app: synapse.app.generic_worker |
||||
worker_name: synapse-generic-worker-1 |
||||
|
||||
# The replication listener on the main synapse process. |
||||
worker_replication_host: synapse |
||||
worker_replication_http_port: 9093 |
||||
|
||||
worker_listeners: |
||||
- type: http |
||||
port: 8034 |
||||
resources: |
||||
- names: [replication] |
||||
- type: http |
||||
port: 8081 |
||||
x_forwarded: true |
||||
resources: |
||||
- names: [client, federation] |
||||
|
||||
worker_log_config: /data/worker.log.config |
Loading…
Reference in new issue