Docker Compose Worker Documentation and Examples (#12737)
This commit is contained in:
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