synapse/docker
Richard van der Hoff 1def298119
Improve `Depends` specs in debian package. (#5675)
This is basically a contrived way of adding a `Recommends` on `libpq5`, to fix #5653.

The way this is supposed to happen in debhelper is to run
`dh_shlibdeps`, which in turn runs `dpkg-shlibdeps`, which spits things out
into `debian/<package>.substvars` whence they can later be included by
`control`.

Previously, we had disabled `dh_shlibdeps`, mostly because `dpkg-shlibdeps`
gets confused about PIL's interdependent objects, but that's not really the
right thing to do and there is another way to work around that.

Since we don't always use postgres, we don't necessarily want a hard Depends on
libpq5, so I've actually ended up adding an explicit invocation of
`dpkg-shlibdeps` for `psycopg2`.

I've also updated the build-depends list for the package, which was missing a
couple of entries.
2019-07-17 17:47:07 +01:00
..
conf Add missing space in default logging file format generated by the Docker image (#5620) 2019-07-12 11:43:42 +01:00
Dockerfile Upgrade Alpine Linux used in the Docker image (3.8 -> 3.10) (#5619) 2019-07-12 11:38:25 +01:00
Dockerfile-dhvirtualenv Improve `Depends` specs in debian package. (#5675) 2019-07-17 17:47:07 +01:00
Dockerfile-pgtests Remove Postgres 9.4 support (#5448) 2019-06-18 00:59:00 +10:00
README.md Add ability to set timezone for Docker container (#5383) 2019-07-02 10:31:06 +01:00
build_debian.sh Install the optional dependencies into the debian package (#4325) 2019-01-02 07:17:39 +00:00
run_pg_tests.sh Remove Postgres 9.4 support (#5448) 2019-06-18 00:59:00 +10:00
start.py Docker image: Add a migrate_config mode (#5567) 2019-06-27 13:52:40 +01:00

README.md

Synapse Docker

This Docker image will run Synapse as a single process. By default it uses a sqlite database; for production use you should connect it to a separate postgres database.

The image also does not provide a TURN server.

Volumes

By default, the image expects a single volume, located at /data, that will hold:

  • configuration files;
  • temporary files during uploads;
  • uploaded media and thumbnails;
  • the SQLite database if you do not configure postgres;
  • the appservices configuration.

You are free to use separate volumes depending on storage endpoints at your disposal. For instance, /data/media coud be stored on a large but low performance hdd storage while other files could be stored on high performance endpoints.

In order to setup an application service, simply create an appservices directory in the data volume and write the application service Yaml configuration file there. Multiple application services are supported.

Generating a configuration file

The first step is to genearte a valid config file. To do this, you can run the image with the generate commandline option.

You will need to specify values for the SYNAPSE_SERVER_NAME and SYNAPSE_REPORT_STATS environment variable, and mount a docker volume to store the configuration on. For example:

docker run -it --rm \
    --mount type=volume,src=synapse-data,dst=/data \
    -e SYNAPSE_SERVER_NAME=my.matrix.host \
    -e SYNAPSE_REPORT_STATS=yes \
    matrixdotorg/synapse:latest generate

For information on picking a suitable server name, see https://github.com/matrix-org/synapse/blob/master/INSTALL.md.

The above command will generate a homeserver.yaml in (typically) /var/lib/docker/volumes/synapse-data/_data. You should check this file, and customise it to your needs.

The following environment variables are supported in generate mode:

  • SYNAPSE_SERVER_NAME (mandatory): the server public hostname.
  • SYNAPSE_REPORT_STATS (mandatory, yes or no): whether to enable anonymous statistics reporting.
  • SYNAPSE_CONFIG_DIR: where additional config files (such as the log config and event signing key) will be stored. Defaults to /data.
  • SYNAPSE_CONFIG_PATH: path to the file to be generated. Defaults to <SYNAPSE_CONFIG_DIR>/homeserver.yaml.
  • SYNAPSE_DATA_DIR: where the generated config will put persistent data such as the datatase and media store. Defaults to /data.
  • UID, GID: the user id and group id to use for creating the data directories. Defaults to 991, 991.

Running synapse

Once you have a valid configuration file, you can start synapse as follows:

docker run -d --name synapse \
    --mount type=volume,src=synapse-data,dst=/data \
    -p 8008:8008 \
    matrixdotorg/synapse:latest

You can then check that it has started correctly with:

docker logs synapse

If all is well, you should now be able to connect to http://localhost:8008 and see a confirmation message.

The following environment variables are supported in run mode:

  • SYNAPSE_CONFIG_DIR: where additional config files are stored. Defaults to /data.
  • SYNAPSE_CONFIG_PATH: path to the config file. Defaults to <SYNAPSE_CONFIG_DIR>/homeserver.yaml.
  • UID, GID: the user and group id to run Synapse as. Defaults to 991, 991.
  • TZ: the timezone the container will run with. Defaults to UTC.

TLS support

The default configuration exposes a single HTTP port: http://localhost:8008. It is suitable for local testing, but for any practical use, you will either need to use a reverse proxy, or configure Synapse to expose an HTTPS port.

For documentation on using a reverse proxy, see https://github.com/matrix-org/synapse/blob/master/docs/reverse_proxy.rst.

For more information on enabling TLS support in synapse itself, see https://github.com/matrix-org/synapse/blob/master/INSTALL.md#tls-certificates. Of course, you will need to expose the TLS port from the container with a -p argument to docker run.

Legacy dynamic configuration file support

For backwards-compatibility only, the docker image supports creating a dynamic configuration file based on environment variables. This is now deprecated, but is enabled when the SYNAPSE_SERVER_NAME variable is set (and generate is not given).

To migrate from a dynamic configuration file to a static one, run the docker container once with the environment variables set, and migrate_config commandline option. For example:

docker run -it --rm \
    --mount type=volume,src=synapse-data,dst=/data \
    -e SYNAPSE_SERVER_NAME=my.matrix.host \
    -e SYNAPSE_REPORT_STATS=yes \
    matrixdotorg/synapse:latest migrate_config

This will generate the same configuration file as the legacy mode used, but will store it in /data/homeserver.yaml instead of a temporary location. You can then use it as shown above at Running synapse.