mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-22 11:33:57 +01:00
Use supervisord to supervise Postgres and Caddy in the Complement image. (#12480)
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
This commit is contained in:
parent
30c8e7e408
commit
d743b25c8f
9 changed files with 44 additions and 12 deletions
1
changelog.d/12480.misc
Normal file
1
changelog.d/12480.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Use supervisord to supervise Postgres and Caddy in the Complement image to reduce restart time.
|
|
@ -20,6 +20,9 @@ RUN rm /etc/nginx/sites-enabled/default
|
||||||
# Copy Synapse worker, nginx and supervisord configuration template files
|
# Copy Synapse worker, nginx and supervisord configuration template files
|
||||||
COPY ./docker/conf-workers/* /conf/
|
COPY ./docker/conf-workers/* /conf/
|
||||||
|
|
||||||
|
# Copy a script to prefix log lines with the supervisor program name
|
||||||
|
COPY ./docker/prefix-log /usr/local/bin/
|
||||||
|
|
||||||
# Expose nginx listener port
|
# Expose nginx listener port
|
||||||
EXPOSE 8080/tcp
|
EXPOSE 8080/tcp
|
||||||
|
|
||||||
|
|
|
@ -34,13 +34,16 @@ WORKDIR /data
|
||||||
# Copy the caddy config
|
# Copy the caddy config
|
||||||
COPY conf-workers/caddy.complement.json /root/caddy.json
|
COPY conf-workers/caddy.complement.json /root/caddy.json
|
||||||
|
|
||||||
|
COPY conf-workers/postgres.supervisord.conf /etc/supervisor/conf.d/postgres.conf
|
||||||
|
COPY conf-workers/caddy.supervisord.conf /etc/supervisor/conf.d/caddy.conf
|
||||||
|
|
||||||
# Copy the entrypoint
|
# Copy the entrypoint
|
||||||
COPY conf-workers/start-complement-synapse-workers.sh /
|
COPY conf-workers/start-complement-synapse-workers.sh /
|
||||||
|
|
||||||
# Expose caddy's listener ports
|
# Expose caddy's listener ports
|
||||||
EXPOSE 8008 8448
|
EXPOSE 8008 8448
|
||||||
|
|
||||||
ENTRYPOINT /start-complement-synapse-workers.sh
|
ENTRYPOINT ["/start-complement-synapse-workers.sh"]
|
||||||
|
|
||||||
# Update the healthcheck to have a shorter check interval
|
# Update the healthcheck to have a shorter check interval
|
||||||
HEALTHCHECK --start-period=5s --interval=1s --timeout=1s \
|
HEALTHCHECK --start-period=5s --interval=1s --timeout=1s \
|
||||||
|
|
7
docker/complement/conf-workers/caddy.supervisord.conf
Normal file
7
docker/complement/conf-workers/caddy.supervisord.conf
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
[program:caddy]
|
||||||
|
command=/usr/local/bin/prefix-log /root/caddy run --config /root/caddy.json
|
||||||
|
autorestart=unexpected
|
||||||
|
stdout_logfile=/dev/stdout
|
||||||
|
stdout_logfile_maxbytes=0
|
||||||
|
stderr_logfile=/dev/stderr
|
||||||
|
stderr_logfile_maxbytes=0
|
16
docker/complement/conf-workers/postgres.supervisord.conf
Normal file
16
docker/complement/conf-workers/postgres.supervisord.conf
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
[program:postgres]
|
||||||
|
command=/usr/local/bin/prefix-log /usr/bin/pg_ctlcluster 13 main start --foreground
|
||||||
|
|
||||||
|
# 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
|
|
@ -12,12 +12,6 @@ function log {
|
||||||
# Replace the server name in the caddy config
|
# Replace the server name in the caddy config
|
||||||
sed -i "s/{{ server_name }}/${SERVER_NAME}/g" /root/caddy.json
|
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
|
# Set the server name of the homeserver
|
||||||
export SYNAPSE_SERVER_NAME=${SERVER_NAME}
|
export SYNAPSE_SERVER_NAME=${SERVER_NAME}
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,7 @@ version: 1
|
||||||
|
|
||||||
formatters:
|
formatters:
|
||||||
precise:
|
precise:
|
||||||
{% if worker_name %}
|
|
||||||
format: '%(asctime)s - worker:{{ worker_name }} - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
|
|
||||||
{% else %}
|
|
||||||
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
|
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
handlers:
|
handlers:
|
||||||
{% if LOG_FILE_PATH %}
|
{% if LOG_FILE_PATH %}
|
||||||
|
|
|
@ -171,7 +171,7 @@ WORKERS_CONFIG: Dict[str, Dict[str, Any]] = {
|
||||||
# Templates for sections that may be inserted multiple times in config files
|
# Templates for sections that may be inserted multiple times in config files
|
||||||
SUPERVISORD_PROCESS_CONFIG_BLOCK = """
|
SUPERVISORD_PROCESS_CONFIG_BLOCK = """
|
||||||
[program:synapse_{name}]
|
[program:synapse_{name}]
|
||||||
command=/usr/local/bin/python -m {app} \
|
command=/usr/local/bin/prefix-log /usr/local/bin/python -m {app} \
|
||||||
--config-path="{config_path}" \
|
--config-path="{config_path}" \
|
||||||
--config-path=/conf/workers/shared.yaml \
|
--config-path=/conf/workers/shared.yaml \
|
||||||
--config-path=/conf/workers/{name}.yaml
|
--config-path=/conf/workers/{name}.yaml
|
||||||
|
|
12
docker/prefix-log
Executable file
12
docker/prefix-log
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Prefixes all lines on stdout and stderr with the process name (as determined by
|
||||||
|
# the SUPERVISOR_PROCESS_NAME env var, which is automatically set by Supervisor).
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# prefix-log command [args...]
|
||||||
|
#
|
||||||
|
|
||||||
|
exec 1> >(awk '{print "'"${SUPERVISOR_PROCESS_NAME}"' | "$0}' >&1)
|
||||||
|
exec 2> >(awk '{print "'"${SUPERVISOR_PROCESS_NAME}"' | "$0}' >&2)
|
||||||
|
exec "$@"
|
Loading…
Reference in a new issue