This repository has been archived by the owner on Apr 26, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Docker Compose Worker Documentation and Examples (#12737)
- Loading branch information
1 parent
3c1c40d
commit c316fe8
Showing
5 changed files
with
236 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
14 changes: 14 additions & 0 deletions
14
contrib/docker_compose_workers/workers/synapse-federation-sender-1.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
19 changes: 19 additions & 0 deletions
19
contrib/docker_compose_workers/workers/synapse-generic-worker-1.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |