# syntax=docker/dockerfile:1 ARG SYNAPSE_VERSION=latest ARG SYNAPSE_IMAGE=docker.io/matrixdotorg/synapse:$SYNAPSE_VERSION ARG MAS_VERSION=latest ARG MAS_IMAGE=ghcr.io/matrix-org/matrix-authentication-service:$MAS_VERSION ARG REDIS_VERSION=7.4.0 ARG REDIS_IMAGE=docker.io/library/redis:$REDIS_VERSION-bookworm ARG NGINX_VERSION=1.26.1 ARG NGINX_IMAGE=docker.io/library/nginx:$NGINX_VERSION-bookworm FROM $NGINX_IMAGE AS nginx FROM $REDIS_IMAGE AS redis FROM $MAS_IMAGE AS mas # now build the final image, based on the the regular Synapse docker image FROM $SYNAPSE_IMAGE # 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 RUN mkdir -p /etc/supervisor/conf.d # Copy over redis, nginx and matrix-authentication-service COPY --from=redis /usr/local/bin/redis-server /usr/local/bin COPY --from=nginx /usr/sbin/nginx /usr/sbin COPY --from=nginx /usr/share/nginx /usr/share/nginx COPY --from=nginx /usr/lib/nginx /usr/lib/nginx COPY --from=nginx /etc/nginx /etc/nginx RUN mkdir /var/log/nginx /var/lib/nginx RUN chown www-data /var/lib/nginx # have nginx log to stderr/out RUN ln -sf /dev/stdout /var/log/nginx/access.log RUN ln -sf /dev/stderr /var/log/nginx/error.log COPY --from=mas /usr/local/bin/mas-cli /usr/local/bin COPY --from=mas /usr/local/share/mas-cli /usr/local/share # Copy Synapse worker, nginx and supervisord configuration template files 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 8080/tcp # A script to read environment variables and create the necessary # files to run the desired worker configuration. Will start supervisord. 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