diff --git a/changelog.d/12467.misc b/changelog.d/12467.misc
new file mode 100644
index 0000000000..fbf415f707
--- /dev/null
+++ b/changelog.d/12467.misc
@@ -0,0 +1 @@
+complement-synapse-workers: factor out separate entry point script.
diff --git a/docker/complement/SynapseWorkers.Dockerfile b/docker/complement/SynapseWorkers.Dockerfile
index 982219a91e..65df2d114d 100644
--- a/docker/complement/SynapseWorkers.Dockerfile
+++ b/docker/complement/SynapseWorkers.Dockerfile
@@ -13,8 +13,8 @@ RUN curl -OL "https://github.com/caddyserver/caddy/releases/download/v2.3.0/cadd
tar xzf caddy_2.3.0_linux_amd64.tar.gz && rm caddy_2.3.0_linux_amd64.tar.gz && mv caddy /root
# Install postgresql
-RUN apt-get update
-RUN apt-get install -y postgresql
+RUN apt-get update && \
+ DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y postgresql-13
# Configure a user and create a database for Synapse
RUN pg_ctlcluster 13 main start && su postgres -c "echo \
@@ -34,40 +34,14 @@ WORKDIR /data
# Copy the caddy config
COPY conf-workers/caddy.complement.json /root/caddy.json
+# Copy the entrypoint
+COPY conf-workers/start-complement-synapse-workers.sh /
+
# Expose caddy's listener ports
EXPOSE 8008 8448
-ENTRYPOINT \
- # Replace the server name in the caddy config
- sed -i "s/{{ server_name }}/${SERVER_NAME}/g" /root/caddy.json && \
- # Start postgres
- pg_ctlcluster 13 main start 2>&1 && \
- # Start caddy
- /root/caddy start --config /root/caddy.json 2>&1 && \
- # Set the server name of the homeserver
- SYNAPSE_SERVER_NAME=${SERVER_NAME} \
- # No need to report stats here
- SYNAPSE_REPORT_STATS=no \
- # Set postgres authentication details which will be placed in the homeserver config file
- POSTGRES_PASSWORD=somesecret POSTGRES_USER=postgres POSTGRES_HOST=localhost \
- # Specify the workers to test with
- 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" \
- # Run the script that writes the necessary config files and starts supervisord, which in turn
- # starts everything else
- /configure_workers_and_start.py
+ENTRYPOINT /start-complement-synapse-workers.sh
+# Update the healthcheck to have a shorter check interval
HEALTHCHECK --start-period=5s --interval=1s --timeout=1s \
CMD /bin/sh /healthcheck.sh
diff --git a/docker/complement/conf-workers/start-complement-synapse-workers.sh b/docker/complement/conf-workers/start-complement-synapse-workers.sh
new file mode 100755
index 0000000000..2c1e05bd62
--- /dev/null
+++ b/docker/complement/conf-workers/start-complement-synapse-workers.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Default ENTRYPOINT for the docker image used for testing synapse with workers under complement
+
+set -e
+
+function log {
+ d=$(date +"%Y-%m-%d %H:%M:%S,%3N")
+ echo "$d $@"
+}
+
+# Replace the server name in the caddy config
+sed -i "s/{{ server_name }}/${SERVER_NAME}/g" /root/caddy.json
+
+log "starting postgres"
+pg_ctlcluster 13 main start
+
+log "starting caddy"
+/root/caddy start --config /root/caddy.json
+
+# Set the server name of the homeserver
+export SYNAPSE_SERVER_NAME=${SERVER_NAME}
+
+# No need to report stats here
+export SYNAPSE_REPORT_STATS=no
+
+# 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
+
+# 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"
+
+# Run the script that writes the necessary config files and starts supervisord, which in turn
+# starts everything else
+exec /configure_workers_and_start.py
|