Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Dockerfile-workers: reduce the amount we install (#12464)
Browse files Browse the repository at this point in the history
This is an attempt to reduce the rebuild time. In short, we reduce the amount
of stuff that the dockerfile installs, so as to give a faster startup.
  • Loading branch information
richvdh authored Apr 14, 2022
1 parent 7efddbe commit aaaff98
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 13 deletions.
1 change: 1 addition & 0 deletions changelog.d/12464.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Dockerfile-workers: reduce the amount we install in the image.
17 changes: 14 additions & 3 deletions docker/Dockerfile-workers
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,19 @@
FROM matrixdotorg/synapse

# Install deps
RUN apt-get update
RUN apt-get install -y supervisor redis nginx
RUN \
--mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
redis-server nginx-light

# Remove the default nginx sites
# Install supervisord with pip instead of apt, to avoid installing a second
# copy of python.
RUN --mount=type=cache,target=/root/.cache/pip \
pip install supervisor~=4.2

# Disable the default nginx sites
RUN rm /etc/nginx/sites-enabled/default

# Copy Synapse worker, nginx and supervisord configuration template files
Expand All @@ -19,5 +28,7 @@ EXPOSE 8080/tcp
COPY ./docker/configure_workers_and_start.py /configure_workers_and_start.py
ENTRYPOINT ["/configure_workers_and_start.py"]

# Replace the healthcheck with one which checks *all* the workers. The script
# is generated by configure_workers_and_start.py.
HEALTHCHECK --start-period=5s --interval=15s --timeout=5s \
CMD /bin/sh /healthcheck.sh
3 changes: 3 additions & 0 deletions docker/conf-workers/supervisord.conf.j2
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
nodaemon=true
user=root

[include]
files = /etc/supervisor/conf.d/*.conf

[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
priority=500
Expand Down
19 changes: 9 additions & 10 deletions docker/configure_workers_and_start.py
Original file line number Diff line number Diff line change
Expand Up @@ -502,9 +502,10 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
)

# Supervisord config
os.makedirs("/etc/supervisor", exist_ok=True)
convert(
"/conf/supervisord.conf.j2",
"/etc/supervisor/conf.d/supervisord.conf",
"/etc/supervisor/supervisord.conf",
main_config_path=config_path,
worker_config=supervisord_config,
)
Expand Down Expand Up @@ -546,14 +547,6 @@ def generate_worker_log_config(
return log_config_filepath


def start_supervisord():
"""Starts up supervisord which then starts and monitors all other necessary processes
Raises: CalledProcessError if calling start.py return a non-zero exit code.
"""
subprocess.run(["/usr/bin/supervisord"], stdin=subprocess.PIPE)


def main(args, environ):
config_dir = environ.get("SYNAPSE_CONFIG_DIR", "/data")
config_path = environ.get("SYNAPSE_CONFIG_PATH", config_dir + "/homeserver.yaml")
Expand Down Expand Up @@ -581,7 +574,13 @@ def main(args, environ):

# Start supervisord, which will start Synapse, all of the configured worker
# processes, redis, nginx etc. according to the config we created above.
start_supervisord()
log("Starting supervisord")
os.execl(
"/usr/local/bin/supervisord",
"supervisord",
"-c",
"/etc/supervisor/supervisord.conf",
)


if __name__ == "__main__":
Expand Down

0 comments on commit aaaff98

Please sign in to comment.