dendrite/build/docker
Neil Alexander 7d6461dd3c
Server key component (#1050)
* Server key API (works for monolith but not for polylith yet)

* Re-enable caching on server key API component

* Groundwork for HTTP APIs for server key API

* Hopefully implement HTTP for server key API

* Simplify public key request marshalling from map keys

* Update gomatrixserverlib

* go mod tidy

* Common -> internal

* remove keyring.go

* Update Docker Hub for server key API

* YAML is funny about indentation

* Wire in new server key API into hybrid monolith mode

* Create maps

* Route server key API endpoints on internal API mux

* Fix server key API URLs

* Add fetcher behaviour into server key API implementation

* Return error if we failed to fetch some keys

* Return results anyway

* Move things about a bit

* Remove unused code

* Fix comments, don't use federation sender URL in polylith mode

* Add server_key_api to sample config

* Review comments

* HTTP API to cache keys that have been requested

* Overwrite server_key_api listen in monolith hybrid mode
2020-05-27 10:19:24 +01:00
..
hub Server key component (#1050) 2020-05-27 10:19:24 +01:00
postgres Fix #897 and shuffle directory around (#1054) 2020-05-21 14:40:13 +01:00
services Fix #897 and shuffle directory around (#1054) 2020-05-21 14:40:13 +01:00
build.sh Fix #897 and shuffle directory around (#1054) 2020-05-21 14:40:13 +01:00
dendrite-docker.yml Fix #897 and shuffle directory around (#1054) 2020-05-21 14:40:13 +01:00
docker-compose.yml Fix #897 and shuffle directory around (#1054) 2020-05-21 14:40:13 +01:00
Dockerfile Fix #897 and shuffle directory around (#1054) 2020-05-21 14:40:13 +01:00
README.md Fix #897 and shuffle directory around (#1054) 2020-05-21 14:40:13 +01:00

Development with Docker

With docker and docker-compose you can easily spin up a development environment and start working on dendrite.

Requirements

  • docker
  • docker-compose (version 3+)

Configuration

Create a directory named cfg in the root of the project. Copy the dendrite-docker.yaml file into that directory and rename it to dendrite.yaml. It already contains the defaults used in docker-compose for networking so you will only have to change things like the server_name or to toggle naffka.

You can run the following docker-compose commands either from the top directory specifying the docker-compose file

docker-compose -f docker/docker-compose.yml <cmd>

or from within the docker directory

docker-compose <cmd>

Starting a monolith server

For the monolith server you would need a postgres instance

docker-compose up postgres

and the dendrite component from bin/dendrite-monolith-server

docker-compose up monolith

The monolith will be listening on http://localhost:8008.

You would also have to make the following adjustments to dendrite.yaml.

  • Set use_naffka: true
  • Uncomment the database/naffka postgres url.

Starting a multiprocess server

The multiprocess server requires kafka, zookeeper and postgres

docker-compose up kafka zookeeper postgres

and the following dendrite components

docker-compose up client_api media_api sync_api room_server public_rooms_api edu_server
docker-compose up client_api_proxy

The client-api-proxy will be listening on http://localhost:8008.

You would also have to make the following adjustments to dendrite.yaml.

  • Set use_naffka: false
  • Comment out the database/naffka postgres url.

Starting federation

docker-compose up federation_api federation_sender
docker-compose up federation_api_proxy

You can point other Matrix servers to http://localhost:8448.

Creating a new component

You can create a new dendrite component by adding an entry to the docker-compose.yml file and creating a startup script for the component in docker/services. For more information refer to the official docker-compose documentation.

  new_component:
    container_name: dendrite_room_server
    hostname: new_component
    # Start up script.
    entrypoint: ["bash", "./docker/services/new-component.sh"]
    # Use the common Dockerfile for all the dendrite components.
    build: ./
    volumes:
      - ..:/build
    depends_on:
      - another_component
    networks:
      - internal