2022-12-07 18:45:31 +03:00
|
|
|
# syntax=docker/dockerfile:1
|
|
|
|
# This dockerfile builds an editable install of Synapse.
|
|
|
|
#
|
|
|
|
# Used by `complement.sh`. Not suitable for production use.
|
|
|
|
|
|
|
|
ARG PYTHON_VERSION=3.9
|
|
|
|
|
|
|
|
###
|
|
|
|
### Stage 0: generate requirements.txt
|
|
|
|
###
|
2023-09-15 15:14:10 +03:00
|
|
|
# We hardcode the use of Debian bookworm here because this could change upstream
|
|
|
|
# and other Dockerfiles used for testing are expecting bookworm.
|
|
|
|
FROM docker.io/library/python:${PYTHON_VERSION}-slim-bookworm
|
2022-12-07 18:45:31 +03:00
|
|
|
|
|
|
|
# Install Rust and other dependencies (stolen from normal Dockerfile)
|
|
|
|
# install the OS build deps
|
|
|
|
RUN \
|
|
|
|
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
|
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
|
|
apt-get update -qq && apt-get install -yqq \
|
|
|
|
build-essential \
|
|
|
|
libffi-dev \
|
|
|
|
libjpeg-dev \
|
|
|
|
libpq-dev \
|
|
|
|
libssl-dev \
|
|
|
|
libwebp-dev \
|
|
|
|
libxml++2.6-dev \
|
|
|
|
libxslt1-dev \
|
|
|
|
openssl \
|
|
|
|
zlib1g-dev \
|
|
|
|
git \
|
|
|
|
curl \
|
|
|
|
gosu \
|
|
|
|
libjpeg62-turbo \
|
|
|
|
libpq5 \
|
2023-09-15 15:14:10 +03:00
|
|
|
libwebp7 \
|
2022-12-07 18:45:31 +03:00
|
|
|
xmlsec1 \
|
|
|
|
libjemalloc2 \
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
ENV RUSTUP_HOME=/rust
|
|
|
|
ENV CARGO_HOME=/cargo
|
|
|
|
ENV PATH=/cargo/bin:/rust/bin:$PATH
|
|
|
|
RUN mkdir /rust /cargo
|
|
|
|
RUN curl -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --default-toolchain stable --profile minimal
|
|
|
|
|
|
|
|
|
|
|
|
# Make a base copy of the editable source tree, so that we have something to
|
|
|
|
# install and build now — even though it's going to be covered up by a mount
|
|
|
|
# at runtime.
|
|
|
|
COPY synapse /editable-src/synapse/
|
|
|
|
COPY rust /editable-src/rust/
|
|
|
|
# ... and what we need to `pip install`.
|
|
|
|
COPY pyproject.toml poetry.lock README.rst build_rust.py Cargo.toml Cargo.lock /editable-src/
|
|
|
|
|
|
|
|
RUN pip install poetry
|
|
|
|
RUN poetry config virtualenvs.create false
|
|
|
|
RUN cd /editable-src && poetry install --extras all
|
|
|
|
|
|
|
|
# Make copies of useful things for inspection:
|
|
|
|
# - the Rust module (must be copied to the editable source tree before startup)
|
|
|
|
# - poetry.lock is useful for checking if dependencies have changed.
|
|
|
|
RUN cp /editable-src/synapse/synapse_rust.abi3.so /synapse_rust.abi3.so.bak
|
|
|
|
RUN cp /editable-src/poetry.lock /poetry.lock.bak
|
|
|
|
|
|
|
|
|
|
|
|
### Extra setup from original Dockerfile
|
|
|
|
COPY ./docker/start.py /start.py
|
|
|
|
COPY ./docker/conf /conf
|
|
|
|
|
|
|
|
EXPOSE 8008/tcp 8009/tcp 8448/tcp
|
|
|
|
|
|
|
|
ENTRYPOINT ["/start.py"]
|
|
|
|
|
|
|
|
HEALTHCHECK --start-period=5s --interval=15s --timeout=5s \
|
|
|
|
CMD curl -fSs http://localhost:8008/health || exit 1
|