From 71062a2d40961c396aba93e5e61f3bd59c8872b9 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 10 Jan 2022 21:36:27 +0100 Subject: [PATCH] Matrix media natively on S3 --- app/docker-compose.yml | 16 ++++++ app/im/build/matrix-synapse/Dockerfile | 54 +++++++++++++++++++ app/im/build/matrix-synapse/entrypoint.sh | 3 ++ app/im/build/matrix-synapse/matrix-s3-async | 16 ++++++ .../matrix-synapse/matrix-s3-async-sqlite | 13 +++++ app/im/config/homeserver.yaml | 16 +++++- app/im/deploy/im.hcl | 34 ++++++++++-- configuration.nix | 2 +- 8 files changed, 149 insertions(+), 5 deletions(-) create mode 100644 app/docker-compose.yml create mode 100644 app/im/build/matrix-synapse/Dockerfile create mode 100755 app/im/build/matrix-synapse/entrypoint.sh create mode 100755 app/im/build/matrix-synapse/matrix-s3-async create mode 100755 app/im/build/matrix-synapse/matrix-s3-async-sqlite diff --git a/app/docker-compose.yml b/app/docker-compose.yml new file mode 100644 index 0000000..40091c9 --- /dev/null +++ b/app/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3.4' +services: + + synapse: + build: + context: ./im/build/matrix-synapse + args: + # https://github.com/matrix-org/synapse/releases + VERSION: 1.48.0 + # https://github.com/matrix-org/synapse-s3-storage-provider/commits/main + # Update with the latest commit on main each time you update the synapse version + # otherwise synapse may fail to launch due to incompatibility issues + # see this issue for an example: https://github.com/matrix-org/synapse-s3-storage-provider/issues/64 + S3_VERSION: 41f5bf83485c61efb61c9e77f5e93cbeb969f517 + image: lxpz/amd64_synapse:test7 + diff --git a/app/im/build/matrix-synapse/Dockerfile b/app/im/build/matrix-synapse/Dockerfile new file mode 100644 index 0000000..4388d88 --- /dev/null +++ b/app/im/build/matrix-synapse/Dockerfile @@ -0,0 +1,54 @@ +FROM amd64/debian:buster as builder + +ARG VERSION +ARG S3_VERSION +RUN apt-get update && \ + apt-get -qq -y full-upgrade && \ + apt-get install -y \ + python3 \ + python3-pip \ + python3-dev \ + python3-setuptools \ + libffi-dev \ + build-essential \ + libssl-dev \ + libjpeg-dev \ + libjpeg62-turbo-dev \ + libxml2-dev \ + zlib1g-dev \ + # postgresql-dev \ + libpq-dev \ + virtualenv \ + libxslt1-dev \ + git + +RUN virtualenv /root/matrix-env -p /usr/bin/python3 +RUN . /root/matrix-env/bin/activate && \ + pip3 install \ + https://github.com/matrix-org/synapse/archive/v${VERSION}.tar.gz#egg=matrix-synapse[matrix-synapse-ldap3,postgres,resources.consent,saml2,url_preview] && \ + pip3 install \ + git+https://github.com/Alexis211/synapse-s3-storage-provider.git@${S3_VERSION} + +FROM amd64/debian:buster + +RUN apt-get update && \ + apt-get -qq -y full-upgrade && \ + apt-get install -y \ + python3 \ + python3-distutils \ + libffi6 \ + libjpeg62-turbo \ + libssl1.1 \ + libxslt1.1 \ + libpq5 \ + zlib1g \ + libjemalloc2 \ + ca-certificates + +ENV LD_PRELOAD /usr/lib/x86_64-linux-gnu/libjemalloc.so.2 +COPY --from=builder /root/matrix-env /root/matrix-env +COPY matrix-s3-async /usr/local/bin/matrix-s3-async +COPY matrix-s3-async-sqlite /usr/local/bin/matrix-s3-async-sqlite +COPY entrypoint.sh /usr/local/bin/entrypoint + +ENTRYPOINT ["/usr/local/bin/entrypoint"] diff --git a/app/im/build/matrix-synapse/entrypoint.sh b/app/im/build/matrix-synapse/entrypoint.sh new file mode 100755 index 0000000..b93a702 --- /dev/null +++ b/app/im/build/matrix-synapse/entrypoint.sh @@ -0,0 +1,3 @@ +#!/bin/sh +. /root/matrix-env/bin/activate +exec "$@" diff --git a/app/im/build/matrix-synapse/matrix-s3-async b/app/im/build/matrix-synapse/matrix-s3-async new file mode 100755 index 0000000..e435144 --- /dev/null +++ b/app/im/build/matrix-synapse/matrix-s3-async @@ -0,0 +1,16 @@ +#!/bin/bash + +cat > database.yaml < database.yaml <