diff --git a/docker/complement/conf/log_config.yaml b/docker/complement/conf/log_config.yaml
deleted file mode 100644
index c33fd6cd00..0000000000
--- a/docker/complement/conf/log_config.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-version: 1
-
-formatters:
- precise:
- format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
-
-filters:
- context:
- (): synapse.logging.context.LoggingContextFilter
- request: ""
-
-handlers:
- console:
- class: logging.StreamHandler
- formatter: precise
- filters: [context]
- # log to stdout, for easier use with 'docker logs'
- stream: 'ext://sys.stdout'
-
-root:
- level: INFO
- handlers: [console]
-
-disable_existing_loggers: false
diff --git a/docker/complement/conf/postgres.supervisord.conf b/docker/complement/conf/postgres.supervisord.conf
new file mode 100644
index 0000000000..5dae3e6330
--- /dev/null
+++ b/docker/complement/conf/postgres.supervisord.conf
@@ -0,0 +1,19 @@
+[program:postgres]
+command=/usr/local/bin/prefix-log /usr/bin/pg_ctlcluster 13 main start --foreground
+
+# Only start if START_POSTGRES=1
+autostart=%(ENV_START_POSTGRES)s
+
+# Lower priority number = starts first
+priority=1
+
+autorestart=unexpected
+stdout_logfile=/dev/stdout
+stdout_logfile_maxbytes=0
+stderr_logfile=/dev/stderr
+stderr_logfile_maxbytes=0
+
+# Use 'Fast Shutdown' mode which aborts current transactions and closes connections quickly.
+# (Default (TERM) is 'Smart Shutdown' which stops accepting new connections but
+# lets existing connections close gracefully.)
+stopsignal=INT
diff --git a/docker/complement/conf/start.sh b/docker/complement/conf/start.sh
deleted file mode 100755
index 5d8d0fe016..0000000000
--- a/docker/complement/conf/start.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-
-set -e
-
-sed -i "s/SERVER_NAME/${SERVER_NAME}/g" /conf/homeserver.yaml
-
-# Add the application service registration files to the homeserver.yaml config
-for filename in /complement/appservice/*.yaml; do
- [ -f "$filename" ] || break
-
- as_id=$(basename "$filename" .yaml)
-
- # Insert the path to the registration file and the AS_REGISTRATION_FILES marker after
- # so we can add the next application service in the next iteration of this for loop
- sed -i "s/AS_REGISTRATION_FILES/ - \/complement\/appservice\/${as_id}.yaml\nAS_REGISTRATION_FILES/g" /conf/homeserver.yaml
-done
-# Remove the AS_REGISTRATION_FILES entry
-sed -i "s/AS_REGISTRATION_FILES//g" /conf/homeserver.yaml
-
-# generate an ssl key and cert for the server, signed by the complement CA
-openssl genrsa -out /conf/server.tls.key 2048
-
-openssl req -new -key /conf/server.tls.key -out /conf/server.tls.csr \
- -subj "/CN=${SERVER_NAME}"
-openssl x509 -req -in /conf/server.tls.csr \
- -CA /complement/ca/ca.crt -CAkey /complement/ca/ca.key -set_serial 1 \
- -out /conf/server.tls.crt
-
-exec python -m synapse.app.homeserver -c /conf/homeserver.yaml "$@"
-
diff --git a/docker/complement/conf/start_for_complement.sh b/docker/complement/conf/start_for_complement.sh
new file mode 100755
index 0000000000..b9c97ab687
--- /dev/null
+++ b/docker/complement/conf/start_for_complement.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+#
+# Default ENTRYPOINT for the docker image used for testing synapse with workers under complement
+
+set -e
+
+echo "Complement Synapse launcher"
+echo " Args: $@"
+echo " Env: SYNAPSE_COMPLEMENT_DATABASE=$SYNAPSE_COMPLEMENT_DATABASE SYNAPSE_COMPLEMENT_USE_WORKERS=$SYNAPSE_COMPLEMENT_USE_WORKERS"
+
+function log {
+ d=$(date +"%Y-%m-%d %H:%M:%S,%3N")
+ echo "$d $@"
+}
+
+# Set the server name of the homeserver
+export SYNAPSE_SERVER_NAME=${SERVER_NAME}
+
+# No need to report stats here
+export SYNAPSE_REPORT_STATS=no
+
+
+case "$SYNAPSE_COMPLEMENT_DATABASE" in
+ postgres)
+ # Set postgres authentication details which will be placed in the homeserver config file
+ export POSTGRES_PASSWORD=somesecret
+ export POSTGRES_USER=postgres
+ export POSTGRES_HOST=localhost
+
+ # configure supervisord to start postgres
+ export START_POSTGRES=true
+ ;;
+
+ sqlite)
+ # Configure supervisord not to start Postgres, as we don't need it
+ export START_POSTGRES=false
+ ;;
+
+ *)
+ echo "Unknown Synapse database: SYNAPSE_COMPLEMENT_DATABASE=$SYNAPSE_COMPLEMENT_DATABASE" >&2
+ exit 1
+ ;;
+esac
+
+
+if [[ -n "$SYNAPSE_COMPLEMENT_USE_WORKERS" ]]; then
+ # Specify the workers to test with
+ export SYNAPSE_WORKER_TYPES="\
+ event_persister, \
+ event_persister, \
+ background_worker, \
+ frontend_proxy, \
+ event_creator, \
+ user_dir, \
+ media_repository, \
+ federation_inbound, \
+ federation_reader, \
+ federation_sender, \
+ synchrotron, \
+ appservice, \
+ pusher"
+else
+ # Empty string here means 'main process only'
+ export SYNAPSE_WORKER_TYPES=""
+fi
+
+
+# Add Complement's appservice registration directory, if there is one
+# (It can be absent when there are no application services in this test!)
+if [ -d /complement/appservice ]; then
+ export SYNAPSE_AS_REGISTRATION_DIR=/complement/appservice
+fi
+
+# Generate a TLS key, then generate a certificate by having Complement's CA sign it
+# Note that both the key and certificate are in PEM format (not DER).
+openssl genrsa -out /conf/server.tls.key 2048
+
+openssl req -new -key /conf/server.tls.key -out /conf/server.tls.csr \
+ -subj "/CN=${SERVER_NAME}"
+
+openssl x509 -req -in /conf/server.tls.csr \
+ -CA /complement/ca/ca.crt -CAkey /complement/ca/ca.key -set_serial 1 \
+ -out /conf/server.tls.crt
+
+export SYNAPSE_TLS_CERT=/conf/server.tls.crt
+export SYNAPSE_TLS_KEY=/conf/server.tls.key
+
+# Run the script that writes the necessary config files and starts supervisord, which in turn
+# starts everything else
+exec /configure_workers_and_start.py
diff --git a/docker/complement/conf/homeserver.yaml b/docker/complement/conf/workers-shared-extra.yaml.j2
index e2be540bbb..a5b1b6bb8b 100644
--- a/docker/complement/conf/homeserver.yaml
+++ b/docker/complement/conf/workers-shared-extra.yaml.j2
@@ -1,52 +1,32 @@
-## Server ##
+{#
+ This file extends the default 'shared' configuration file (from the 'synapse-workers'
+ docker image) with Complement-specific tweak.
+
+ The base configuration is moved out of the default path to `shared-orig.yaml.j2`
+ in the Complement Dockerfile and below we include that original file.
+#}
-server_name: SERVER_NAME
-log_config: /conf/log_config.yaml
+## Server ##
report_stats: False
-signing_key_path: /conf/server.signing.key
trusted_key_servers: []
enable_registration: true
enable_registration_without_verification: true
-
-## Listeners ##
-
-tls_certificate_path: /conf/server.tls.crt
-tls_private_key_path: /conf/server.tls.key
bcrypt_rounds: 4
-registration_shared_secret: complement
-
-listeners:
- - port: 8448
- bind_addresses: ['::']
- type: http
- tls: true
- resources:
- - names: [federation]
- - port: 8008
- bind_addresses: ['::']
- type: http
+## Registration ##
- resources:
- - names: [client]
-
-## Database ##
-
-database:
- name: "sqlite3"
- args:
- # We avoid /data, as it is a volume and is not transferred when the container is committed,
- # which is a fundamental necessity in complement.
- database: "/conf/homeserver.db"
+# Needed by Complement to register admin users
+# DO NOT USE in a production configuration! This should be a random secret.
+registration_shared_secret: complement
## Federation ##
-# trust certs signed by the complement CA
+# trust certs signed by Complement's CA
federation_custom_ca_list:
- /complement/ca/ca.crt
# unblacklist RFC1918 addresses
-ip_range_blacklist: []
+federation_ip_range_blacklist: []
# Disable server rate-limiting
rc_federation:
@@ -101,13 +81,6 @@ rc_invites:
federation_rr_transactions_per_room_per_second: 9999
-## API Configuration ##
-
-# A list of application service config files to use
-#
-app_service_config_files:
-AS_REGISTRATION_FILES
-
## Experimental Features ##
experimental_features:
@@ -117,8 +90,10 @@ experimental_features:
msc2716_enabled: true
# server-side support for partial state in /send_join responses
msc3706_enabled: true
+ {% if not workers_in_use %}
# client-side support for partial state in /send_join responses
faster_joins: true
+ {% endif %}
# Enable jump to date endpoint
msc3030_enabled: true
@@ -127,3 +102,5 @@ server_notices:
system_mxid_display_name: "Server Alert"
system_mxid_avatar_url: ""
room_name: "Server Alert"
+
+{% include "shared-orig.yaml.j2" %}
|