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>
pull/12589/head
reivilibre 2022-04-27 14:39:41 +01:00 committed by GitHub
parent 30c8e7e408
commit d743b25c8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 44 additions and 12 deletions

1
changelog.d/12480.misc Normal file
View File

@ -0,0 +1 @@
Use supervisord to supervise Postgres and Caddy in the Complement image to reduce restart time.

View File

@ -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

View File

@ -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 \

View 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

View 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

View File

@ -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}

View File

@ -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 %}

View File

@ -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
View 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 "$@"