# Dockerfile to build the matrixdotorg/synapse docker images. # # To build the image, run `docker build` command from the root of the # synapse repository: # # docker build -f docker/Dockerfile . # # ARG DEBIAN_VERSION=20210408 ### ### Stage 0: builder ### FROM docker.io/debian:bullseye-${DEBIAN_VERSION}-slim as builder # install the OS build deps RUN apt-get update && apt-get install -y \ build-essential \ libffi-dev \ libjpeg-dev \ libpq-dev \ libssl-dev \ libwebp-dev \ libxml++2.6-dev \ libxslt1-dev \ openssl \ python3-dev \ cargo \ rustc \ zlib1g-dev \ python3-pip \ python3-jsonschema \ python3-frozendict \ python3-unpaddedbase64 \ python3-nacl \ python3-idna \ python3-twisted \ python3-treq \ python3-yaml \ python3-pyasn1-modules \ python3-bcrypt \ python3-pillow \ python3-sortedcontainers \ python3-pymacaroons \ python3-msgpack \ python3-phonenumbers \ python3-netaddr \ python3-jinja2 \ python3-bleach \ python3-pysaml2 \ python3-systemd \ python3-lxml \ python3-jwt \ python3-hiredis\ python3-canonicaljson \ python3-signedjson \ python3-typing-extensions \ python3-psycopg2cffi \ python3-txacme \ python3-authlib \ python3-sentry-sdk \ python3-opentracing \ && rm -rf /var/lib/apt/lists/* # Copy just what we need to pip install COPY scripts /synapse/scripts/ COPY MANIFEST.in README.rst setup.py synctl /synapse/ COPY synapse/__init__.py /synapse/synapse/__init__.py COPY synapse/python_dependencies.py /synapse/synapse/python_dependencies.py # To speed up rebuilds, install all of the dependencies before we copy over # the whole synapse project so that we this layer in the Docker cache can be # used while you develop on the source # # This is aiming at installing the `install_requires` and `extras_require` from `setup.py` RUN pip install --upgrade pip && \ pip install --prefix="/install" --no-warn-script-location \ /synapse[all] # Copy over the rest of the project COPY synapse /synapse/synapse/ # Install the synapse package itself and all of its children packages. # # This is aiming at installing only the `packages=find_packages(...)` from `setup.py RUN pip3 install --prefix="/install" --no-deps --no-warn-script-location /synapse ### ### Stage 1: runtime ### FROM docker.io/debian:bullseye-${DEBIAN_VERSION}-slim LABEL org.opencontainers.image.url='https://matrix.org/docs/projects/server/synapse' LABEL org.opencontainers.image.documentation='https://github.com/matrix-org/synapse/blob/master/docker/README.md' LABEL org.opencontainers.image.source='https://github.com/matrix-org/synapse.git' LABEL org.opencontainers.image.licenses='Apache-2.0' RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ gosu \ libjpeg62-turbo \ libpq5 \ libwebp6 \ xmlsec1 \ libjemalloc2 \ libssl-dev \ openssl \ python3-jsonschema \ python3-frozendict \ python3-unpaddedbase64 \ python3-nacl \ python3-idna \ python3-twisted \ python3-treq \ python3-yaml \ python3-pyasn1-modules \ python3-bcrypt \ python3-pillow \ python3-sortedcontainers \ python3-pymacaroons \ python3-msgpack \ python3-phonenumbers \ python3-netaddr \ python3-jinja2 \ python3-bleach \ python3-pysaml2 \ python3-systemd \ python3-lxml \ python3-jwt \ python3-hiredis\ python3-canonicaljson \ python3-signedjson \ python3-typing-extensions \ python3-psycopg2cffi \ python3-txacme \ python3-authlib \ python3-sentry-sdk \ python3-opentracing \ && rm -rf /var/lib/apt/lists/* COPY --from=builder /install /usr/local COPY ./docker/start.py /start.py COPY ./docker/conf /conf RUN ln -s /usr/bin/python3 /usr/local/bin/python && \ mv /usr/local/lib/python3.9/site-packages/* /usr/local/lib/python3.9/dist-packages/ VOLUME ["/data"] EXPOSE 8008/tcp 8009/tcp 8448/tcp ENTRYPOINT ["/start.py"] HEALTHCHECK --interval=1m --timeout=5s \ CMD curl -fSs http://localhost:8008/health || exit 1