Merge branch 'master' into v0.2.0

This commit is contained in:
Neil Alexander 2020-10-20 11:38:13 +01:00
commit e5ad378df6
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
7 changed files with 80 additions and 121 deletions

View file

@ -6,6 +6,7 @@ ARG component=monolith
ENV entrypoint=${component} ENV entrypoint=${component}
COPY --from=base /build/bin/${component} /usr/bin COPY --from=base /build/bin/${component} /usr/bin
COPY --from=base /build/bin/goose /usr/bin
VOLUME /etc/dendrite VOLUME /etc/dendrite
WORKDIR /etc/dendrite WORKDIR /etc/dendrite

View file

@ -2,7 +2,7 @@ version: "3.4"
services: services:
monolith: monolith:
hostname: monolith hostname: monolith
image: matrixdotorg/dendrite:monolith image: matrixdotorg/dendrite-monolith:latest
command: [ command: [
"--config=dendrite.yaml", "--config=dendrite.yaml",
"--tls-cert=server.crt", "--tls-cert=server.crt",

View file

@ -1,28 +1,8 @@
version: "3.4" version: "3.4"
services: services:
client_api_proxy:
hostname: client_api_proxy
image: matrixdotorg/dendrite:clientproxy
command: [
"--bind-address=:8008",
"--client-api-server-url=http://client_api:8071",
"--sync-api-server-url=http://sync_api:8073",
"--media-api-server-url=http://media_api:8074"
]
volumes:
- ./config:/etc/dendrite
networks:
- internal
depends_on:
- sync_api
- client_api
- media_api
ports:
- "8008:8008"
client_api: client_api:
hostname: client_api hostname: client_api
image: matrixdotorg/dendrite:clientapi image: matrixdotorg/dendrite-clientapi:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -34,7 +14,7 @@ services:
media_api: media_api:
hostname: media_api hostname: media_api
image: matrixdotorg/dendrite:mediaapi image: matrixdotorg/dendrite-mediaapi:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -45,7 +25,7 @@ services:
sync_api: sync_api:
hostname: sync_api hostname: sync_api
image: matrixdotorg/dendrite:syncapi image: matrixdotorg/dendrite-syncapi:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -56,7 +36,7 @@ services:
room_server: room_server:
hostname: room_server hostname: room_server
image: matrixdotorg/dendrite:roomserver image: matrixdotorg/dendrite-roomserver:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -67,7 +47,7 @@ services:
edu_server: edu_server:
hostname: edu_server hostname: edu_server
image: matrixdotorg/dendrite:eduserver image: matrixdotorg/dendrite-eduserver:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -76,28 +56,9 @@ services:
networks: networks:
- internal - internal
federation_api_proxy:
hostname: federation_api_proxy
image: matrixdotorg/dendrite:federationproxy
command: [
"--bind-address=:8448",
"--federation-api-url=http://federation_api:8072",
"--media-api-server-url=http://media_api:8074"
]
volumes:
- ./config:/etc/dendrite
depends_on:
- federation_api
- federation_sender
- media_api
networks:
- internal
ports:
- "8448:8448"
federation_api: federation_api:
hostname: federation_api hostname: federation_api
image: matrixdotorg/dendrite:federationapi image: matrixdotorg/dendrite-federationapi:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -108,7 +69,7 @@ services:
federation_sender: federation_sender:
hostname: federation_sender hostname: federation_sender
image: matrixdotorg/dendrite:federationsender image: matrixdotorg/dendrite-federationsender:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -119,7 +80,7 @@ services:
key_server: key_server:
hostname: key_server hostname: key_server
image: matrixdotorg/dendrite:keyserver image: matrixdotorg/dendrite-keyserver:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -130,7 +91,7 @@ services:
signing_key_server: signing_key_server:
hostname: signing_key_server hostname: signing_key_server
image: matrixdotorg/dendrite:signingkeyserver image: matrixdotorg/dendrite-signingkeyserver:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -141,7 +102,7 @@ services:
user_api: user_api:
hostname: user_api hostname: user_api
image: matrixdotorg/dendrite:userapi image: matrixdotorg/dendrite-userapi:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]
@ -152,7 +113,7 @@ services:
appservice_api: appservice_api:
hostname: appservice_api hostname: appservice_api
image: matrixdotorg/dendrite:appservice image: matrixdotorg/dendrite-appservice:latest
command: [ command: [
"--config=dendrite.yaml" "--config=dendrite.yaml"
] ]

View file

@ -2,20 +2,22 @@
cd $(git rev-parse --show-toplevel) cd $(git rev-parse --show-toplevel)
docker build -f build/docker/Dockerfile -t matrixdotorg/dendrite:latest . TAG=${1:-latest}
docker build -t matrixdotorg/dendrite:monolith --build-arg component=dendrite-monolith-server -f build/docker/Dockerfile.component . echo "Building tag '${TAG}'"
docker build -t matrixdotorg/dendrite:appservice --build-arg component=dendrite-appservice-server -f build/docker/Dockerfile.component . docker build -f build/docker/Dockerfile -t matrixdotorg/dendrite:${TAG} .
docker build -t matrixdotorg/dendrite:clientapi --build-arg component=dendrite-client-api-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:clientproxy --build-arg component=client-api-proxy -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-monolith:${TAG} --build-arg component=dendrite-monolith-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:eduserver --build-arg component=dendrite-edu-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:federationapi --build-arg component=dendrite-federation-api-server -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-appservice:${TAG} --build-arg component=dendrite-appservice-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:federationsender --build-arg component=dendrite-federation-sender-server -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-clientapi:${TAG} --build-arg component=dendrite-client-api-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:federationproxy --build-arg component=federation-api-proxy -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-eduserver:${TAG} --build-arg component=dendrite-edu-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:keyserver --build-arg component=dendrite-key-server -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-federationapi:${TAG} --build-arg component=dendrite-federation-api-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:mediaapi --build-arg component=dendrite-media-api-server -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-federationsender:${TAG} --build-arg component=dendrite-federation-sender-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:roomserver --build-arg component=dendrite-room-server -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-keyserver:${TAG} --build-arg component=dendrite-key-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:syncapi --build-arg component=dendrite-sync-api-server -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-mediaapi:${TAG} --build-arg component=dendrite-media-api-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:signingkeyserver --build-arg component=dendrite-signing-key-server -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-roomserver:${TAG} --build-arg component=dendrite-room-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite:userapi --build-arg component=dendrite-user-api-server -f build/docker/Dockerfile.component . docker build -t matrixdotorg/dendrite-syncapi:${TAG} --build-arg component=dendrite-sync-api-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite-signingkeyserver:${TAG} --build-arg component=dendrite-signing-key-server -f build/docker/Dockerfile.component .
docker build -t matrixdotorg/dendrite-userapi:${TAG} --build-arg component=dendrite-user-api-server -f build/docker/Dockerfile.component .

View file

@ -1,17 +1,19 @@
#!/bin/bash #!/bin/bash
docker pull matrixdotorg/dendrite:monolith TAG=${1:-latest}
docker pull matrixdotorg/dendrite:appservice echo "Pulling tag '${TAG}'"
docker pull matrixdotorg/dendrite:clientapi
docker pull matrixdotorg/dendrite:clientproxy docker pull matrixdotorg/dendrite-monolith:${TAG}
docker pull matrixdotorg/dendrite:eduserver
docker pull matrixdotorg/dendrite:federationapi docker pull matrixdotorg/dendrite-appservice:${TAG}
docker pull matrixdotorg/dendrite:federationsender docker pull matrixdotorg/dendrite-clientapi:${TAG}
docker pull matrixdotorg/dendrite:federationproxy docker pull matrixdotorg/dendrite-eduserver:${TAG}
docker pull matrixdotorg/dendrite:keyserver docker pull matrixdotorg/dendrite-federationapi:${TAG}
docker pull matrixdotorg/dendrite:mediaapi docker pull matrixdotorg/dendrite-federationsender:${TAG}
docker pull matrixdotorg/dendrite:roomserver docker pull matrixdotorg/dendrite-keyserver:${TAG}
docker pull matrixdotorg/dendrite:syncapi docker pull matrixdotorg/dendrite-mediaapi:${TAG}
docker pull matrixdotorg/dendrite:signingkeyserver docker pull matrixdotorg/dendrite-roomserver:${TAG}
docker pull matrixdotorg/dendrite:userapi docker pull matrixdotorg/dendrite-syncapi:${TAG}
docker pull matrixdotorg/dendrite-signingkeyserver:${TAG}
docker pull matrixdotorg/dendrite-userapi:${TAG}

View file

@ -1,17 +1,19 @@
#!/bin/bash #!/bin/bash
docker push matrixdotorg/dendrite:monolith TAG=${1:-latest}
docker push matrixdotorg/dendrite:appservice echo "Pushing tag '${TAG}'"
docker push matrixdotorg/dendrite:clientapi
docker push matrixdotorg/dendrite:clientproxy docker push matrixdotorg/dendrite-monolith:${TAG}
docker push matrixdotorg/dendrite:eduserver
docker push matrixdotorg/dendrite:federationapi docker push matrixdotorg/dendrite-appservice:${TAG}
docker push matrixdotorg/dendrite:federationsender docker push matrixdotorg/dendrite-clientapi:${TAG}
docker push matrixdotorg/dendrite:federationproxy docker push matrixdotorg/dendrite-eduserver:${TAG}
docker push matrixdotorg/dendrite:keyserver docker push matrixdotorg/dendrite-federationapi:${TAG}
docker push matrixdotorg/dendrite:mediaapi docker push matrixdotorg/dendrite-federationsender:${TAG}
docker push matrixdotorg/dendrite:roomserver docker push matrixdotorg/dendrite-keyserver:${TAG}
docker push matrixdotorg/dendrite:syncapi docker push matrixdotorg/dendrite-mediaapi:${TAG}
docker push matrixdotorg/dendrite:signingkeyserver docker push matrixdotorg/dendrite-roomserver:${TAG}
docker push matrixdotorg/dendrite:userapi docker push matrixdotorg/dendrite-syncapi:${TAG}
docker push matrixdotorg/dendrite-signingkeyserver:${TAG}
docker push matrixdotorg/dendrite-userapi:${TAG}

View file

@ -93,7 +93,7 @@ brew services start kafka
### SQLite database setup ### SQLite database setup
Dendrite can use the built-in SQLite database engine for small setups. Dendrite can use the built-in SQLite database engine for small setups.
The SQLite databases do not need to be preconfigured - Dendrite will The SQLite databases do not need to be pre-built - Dendrite will
create them automatically at startup. create them automatically at startup.
### Postgres database setup ### Postgres database setup
@ -109,7 +109,7 @@ Assuming that Postgres 9.5 (or later) is installed:
* Create the component databases: * Create the component databases:
```bash ```bash
for i in account device mediaapi syncapi roomserver signingkeyserver federationsender appservice e2ekey naffka; do for i in mediaapi syncapi roomserver signingkeyserver federationsender appservice keyserver userapi_account userapi_device naffka; do
sudo -u postgres createdb -O dendrite dendrite_$i sudo -u postgres createdb -O dendrite dendrite_$i
done done
``` ```
@ -135,8 +135,8 @@ Create config file, based on `dendrite-config.yaml`. Call it `dendrite.yaml`. Th
* The `server_name` entry to reflect the hostname of your Dendrite server * The `server_name` entry to reflect the hostname of your Dendrite server
* The `database` lines with an updated connection string based on your * The `database` lines with an updated connection string based on your
desired setup, e.g. replacing `component` with the name of the component: desired setup, e.g. replacing `database` with the name of the database:
* For Postgres: `postgres://dendrite:password@localhost/component` * For Postgres: `postgres://dendrite:password@localhost/database`
* For SQLite on disk: `file:component.db` or `file:///path/to/component.db` * For SQLite on disk: `file:component.db` or `file:///path/to/component.db`
* Postgres and SQLite can be mixed and matched. * Postgres and SQLite can be mixed and matched.
* The `use_naffka` option if using Naffka in a monolith deployment * The `use_naffka` option if using Naffka in a monolith deployment
@ -147,6 +147,10 @@ then configuring `key_perspectives` (like `matrix.org` in the sample) can
help to improve reliability considerably by allowing your homeserver to fetch help to improve reliability considerably by allowing your homeserver to fetch
public keys for dead homeservers from somewhere else. public keys for dead homeservers from somewhere else.
**WARNING:** Dendrite supports running all components from the same database in
Postgres mode, but this is **NOT** a supported configuration with SQLite. When
using SQLite, all components **MUST** use their own database file.
## Starting a monolith server ## Starting a monolith server
It is possible to use Naffka as an in-process replacement to Kafka when using It is possible to use Naffka as an in-process replacement to Kafka when using
@ -167,30 +171,17 @@ as shown below, it will also listen for HTTPS connections on port 8448.
The following contains scripts which will run all the required processes in order to point a Matrix client at Dendrite. The following contains scripts which will run all the required processes in order to point a Matrix client at Dendrite.
### Client proxy ### nginx (or other reverse proxy)
This is what Matrix clients will talk to. If you use the script below, point This is what your clients and federated hosts will talk to. It must forward
your client at `http://localhost:8008`. requests onto the correct API server based on URL:
```bash * `/_matrix/client` to the client API server
./bin/client-api-proxy \ * `/_matrix/federation` to the federation API server
--bind-address ":8008" \ * `/_matrix/key` to the federation API server
--client-api-server-url "http://localhost:7771" \ * `/_matrix/media` to the media API server
--sync-api-server-url "http://localhost:7773" \
--media-api-server-url "http://localhost:7774" \
```
### Federation proxy See `docs/nginx/polylith-sample.conf` for a sample configuration.
This is what Matrix servers will talk to. This is only required if you want
to support federation.
```bash
./bin/federation-api-proxy \
--bind-address ":8448" \
--federation-api-url "http://localhost:7772" \
--media-api-server-url "http://localhost:7774" \
```
### Client API server ### Client API server
@ -198,7 +189,7 @@ This is what implements CS API endpoints. Clients talk to this via the proxy in
order to send messages, create and join rooms, etc. order to send messages, create and join rooms, etc.
```bash ```bash
./bin/dendrite-client-api-server --config=dendrite.yaml ./bin/dendrite-client-api-server --config dendrite.yaml
``` ```
### Sync server ### Sync server
@ -239,7 +230,7 @@ contacted by other components. This includes the following components.
This is what implements the room DAG. Clients do not talk to this. This is what implements the room DAG. Clients do not talk to this.
```bash ```bash
./bin/dendrite-room-server --config=dendrite.yaml ./bin/dendrite-room-server --config dendrite.yaml
``` ```
#### Federation sender #### Federation sender