Dockerfile-workers: reduce the amount we install (#12464)
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.
This commit is contained in:
parent
7efddbebef
commit
aaaff98202
|
@ -0,0 +1 @@
|
||||||
|
Dockerfile-workers: reduce the amount we install in the image.
|
|
@ -2,10 +2,19 @@
|
||||||
FROM matrixdotorg/synapse
|
FROM matrixdotorg/synapse
|
||||||
|
|
||||||
# Install deps
|
# Install deps
|
||||||
RUN apt-get update
|
RUN \
|
||||||
RUN apt-get install -y supervisor redis nginx
|
--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
|
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
|
||||||
|
@ -19,5 +28,7 @@ EXPOSE 8080/tcp
|
||||||
COPY ./docker/configure_workers_and_start.py /configure_workers_and_start.py
|
COPY ./docker/configure_workers_and_start.py /configure_workers_and_start.py
|
||||||
ENTRYPOINT ["/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 \
|
HEALTHCHECK --start-period=5s --interval=15s --timeout=5s \
|
||||||
CMD /bin/sh /healthcheck.sh
|
CMD /bin/sh /healthcheck.sh
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
nodaemon=true
|
nodaemon=true
|
||||||
user=root
|
user=root
|
||||||
|
|
||||||
|
[include]
|
||||||
|
files = /etc/supervisor/conf.d/*.conf
|
||||||
|
|
||||||
[program:nginx]
|
[program:nginx]
|
||||||
command=/usr/sbin/nginx -g "daemon off;"
|
command=/usr/sbin/nginx -g "daemon off;"
|
||||||
priority=500
|
priority=500
|
||||||
|
|
|
@ -502,9 +502,10 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
|
||||||
)
|
)
|
||||||
|
|
||||||
# Supervisord config
|
# Supervisord config
|
||||||
|
os.makedirs("/etc/supervisor", exist_ok=True)
|
||||||
convert(
|
convert(
|
||||||
"/conf/supervisord.conf.j2",
|
"/conf/supervisord.conf.j2",
|
||||||
"/etc/supervisor/conf.d/supervisord.conf",
|
"/etc/supervisor/supervisord.conf",
|
||||||
main_config_path=config_path,
|
main_config_path=config_path,
|
||||||
worker_config=supervisord_config,
|
worker_config=supervisord_config,
|
||||||
)
|
)
|
||||||
|
@ -546,14 +547,6 @@ def generate_worker_log_config(
|
||||||
return log_config_filepath
|
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):
|
def main(args, environ):
|
||||||
config_dir = environ.get("SYNAPSE_CONFIG_DIR", "/data")
|
config_dir = environ.get("SYNAPSE_CONFIG_DIR", "/data")
|
||||||
config_path = environ.get("SYNAPSE_CONFIG_PATH", config_dir + "/homeserver.yaml")
|
config_path = environ.get("SYNAPSE_CONFIG_PATH", config_dir + "/homeserver.yaml")
|
||||||
|
@ -581,7 +574,13 @@ def main(args, environ):
|
||||||
|
|
||||||
# Start supervisord, which will start Synapse, all of the configured worker
|
# Start supervisord, which will start Synapse, all of the configured worker
|
||||||
# processes, redis, nginx etc. according to the config we created above.
|
# 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__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Reference in New Issue