conduwuit/docker
Ticho 34782694 b746f17e56 Make traefik+nginx config more self-contained
The nginx instance which is serving the .well-known endpoints can serve
the simple JSON replies directly from memory, instead of having them
as external files on disk.
2022-01-07 13:06:21 +00:00
..
README.md Make traefik+nginx config more self-contained 2022-01-07 13:06:21 +00:00
ci-binaries-packaging.Dockerfile Update docker images 2021-12-15 10:14:20 +00:00
docker-compose.override.traefik.yml Fix deprecated/removed Traefik label 2021-09-03 21:51:17 +02:00
docker-compose.traefik.yml Merge branch 'master' into 'master' 2021-09-01 16:04:41 +00:00
healthcheck.sh CI: New Multiarch builds and Docker images + cargo clippy/test output now integrated into GitLab 2021-11-21 17:34:08 +00:00

README.md

Deploy using Docker

Note: To run and use Conduit you should probably use it with a Domain or Subdomain behind a reverse proxy (like Nginx, Traefik, Apache, ...) with a Lets Encrypt certificate.

Docker

Build & Dockerfile

The Dockerfile provided by Conduit has two stages, each of which creates an image.

  1. Builder: Builds the binary from local context or by cloning a git revision from the official repository.
  2. Runner: Copies the built binary from Builder and sets up the runtime environment, like creating a volume to persist the database and applying the correct permissions.

To build the image you can use the following command

docker build --tag matrixconduit/matrix-conduit:latest .

which also will tag the resulting image as matrixconduit/matrix-conduit:latest.

Run

After building the image you can simply run it with

docker run -d -p 8448:6167 -v ~/conduit.toml:/srv/conduit/conduit.toml -v db:/srv/conduit/.local/share/conduit matrixconduit/matrix-conduit:latest

or you can skip the build step and pull the image from one of the following registries:

Registry Image Size
Docker Hub matrixconduit/matrix-conduit:latest Image Size
GitLab Registry registry.gitlab.com/famedly/conduit/matrix-conduit:latest Image Size

The -d flag lets the container run in detached mode. You now need to supply a conduit.toml config file, an example can be found here. You can pass in different env vars to change config values on the fly. You can even configure Conduit completely by using env vars, but for that you need to pass -e CONDUIT_CONFIG="" into your container. For an overview of possible values, please take a look at the docker-compose.yml file.

If you just want to test Conduit for a short time, you can use the --rm flag, which will clean up everything related to your container after you stop it.

Docker-compose

If the docker command is not for you or your setup, you can also use one of the provided docker-compose files. Depending on your proxy setup, use the docker-compose.traefik.yml and docker-compose.override.traefik.yml for Traefik (don't forget to remove .traefik from the filenames) or the normal docker-compose.yml for every other reverse proxy. Additional info about deploying Conduit can be found here.

Build

To build the Conduit image with docker-compose, you first need to open and modify the docker-compose.yml file. There you need to comment the image: option and uncomment the build: option. Then call docker-compose with:

docker-compose up

This will also start the container right afterwards, so if want it to run in detached mode, you also should use the -d flag.

Run

If you already have built the image or want to use one from the registries, you can just start the container and everything else in the compose file in detached mode with:

docker-compose up -d

Note: Don't forget to modify and adjust the compose file to your needs.

Use Traefik as Proxy

As a container user, you probably know about Traefik. It is a easy to use reverse proxy for making containerized app and services available through the web. With the two provided files, docker-compose.traefik.yml and docker-compose.override.traefik.yml, it is equally easy to deploy and use Conduit, with a little caveat. If you already took a look at the files, then you should have seen the well-known service, and that is the little caveat. Traefik is simply a proxy and loadbalancer and is not able to serve any kind of content, but for Conduit to federate, we need to either expose ports 443 and 8448 or serve two endpoints .well-known/matrix/client and .well-known/matrix/server.

With the service well-known we use a single nginx container that will serve those two files.

So...step by step:

  1. Copy docker-compose.traefik.yml and docker-compose.override.traefik.yml from the repository and remove .traefik from the filenames.

  2. Open both files and modify/adjust them to your needs. Meaning, change the CONDUIT_SERVER_NAME and the volume host mappings according to your needs.

  3. Create the conduit.toml config file, an example can be found here, or set CONDUIT_CONFIG="" and configure Conduit per env vars.

  4. Uncomment the element-web service if you want to host your own Element Web Client and create a element_config.json.

  5. Create the files needed by the well-known service.

    • ./nginx/matrix.conf (relative to the compose file, you can change this, but then also need to change the volume mapping)

      server {
          server_name <SUBDOMAIN>.<DOMAIN>;
          listen      80 default_server;
      
          location /.well-known/matrix/server {
             return 200 '{"m.server": "<SUBDOMAIN>.<DOMAIN>:443"}';
             add_header Content-Type application/json;
          }
      
         location /.well-known/matrix/client {
             return 200 '{"m.homeserver": {"base_url": "https://<SUBDOMAIN>.<DOMAIN>"}}';
             add_header Content-Type application/json;
             add_header "Access-Control-Allow-Origin" *;
         }
      
         location / {
             return 404;
         }
      }
      
  6. Run docker-compose up -d

  7. Connect to your homeserver with your preferred client and create a user. You should do this immediatly after starting Conduit, because the first created user is the admin.