mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-16 18:43:10 -06:00
Remove mentions of polylith, more changes to wording etc
This commit is contained in:
parent
38d5a4495a
commit
47843e86b9
|
|
@ -24,7 +24,7 @@ No, although a good portion of the Matrix specification has been implemented. Mo
|
||||||
|
|
||||||
Dendrite development is currently supported by a small team of developers and due to those limited resources, the majority of the effort is focused on getting Dendrite to be
|
Dendrite development is currently supported by a small team of developers and due to those limited resources, the majority of the effort is focused on getting Dendrite to be
|
||||||
specification complete. If there are major features you're requesting (e.g. new administration endpoints), we'd like to strongly encourage you to join the community in supporting
|
specification complete. If there are major features you're requesting (e.g. new administration endpoints), we'd like to strongly encourage you to join the community in supporting
|
||||||
the development efforts through [contributing](https://matrix-org.github.io/dendrite/development/contributing).
|
the development efforts through [contributing](../development/contributing).
|
||||||
|
|
||||||
## Is there a migration path from Synapse to Dendrite?
|
## Is there a migration path from Synapse to Dendrite?
|
||||||
|
|
||||||
|
|
@ -103,7 +103,7 @@ This can be done by performing a room upgrade. Use the command `/upgraderoom <ve
|
||||||
|
|
||||||
## How do I reset somebody's password on my server?
|
## How do I reset somebody's password on my server?
|
||||||
|
|
||||||
Use the admin endpoint [resetpassword](https://matrix-org.github.io/dendrite/administration/adminapi#post-_dendriteadminresetpassworduserid)
|
Use the admin endpoint [resetpassword](./administration/adminapi#post-_dendriteadminresetpassworduserid)
|
||||||
|
|
||||||
## Should I use PostgreSQL or SQLite for my databases?
|
## Should I use PostgreSQL or SQLite for my databases?
|
||||||
|
|
||||||
|
|
@ -157,7 +157,7 @@ You may need to revisit the connection limit of your PostgreSQL server and/or ma
|
||||||
|
|
||||||
## VOIP and Video Calls don't appear to work on Dendrite
|
## VOIP and Video Calls don't appear to work on Dendrite
|
||||||
|
|
||||||
There is likely an issue with your STUN/TURN configuration on the server. If you believe your configuration to be correct, please see the [troubleshooting](administration/5_troubleshooting.md) for troubleshooting recommendations.
|
There is likely an issue with your STUN/TURN configuration on the server. If you believe your configuration to be correct, please see the [troubleshooting](administration/6_troubleshooting.md) for troubleshooting recommendations.
|
||||||
|
|
||||||
## What is being reported when enabling phone-home statistics?
|
## What is being reported when enabling phone-home statistics?
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,13 +50,17 @@ the room IDs of all affected rooms.
|
||||||
|
|
||||||
## POST `/_dendrite/admin/resetPassword/{userID}`
|
## POST `/_dendrite/admin/resetPassword/{userID}`
|
||||||
|
|
||||||
Reset the password of a local user.
|
Reset the password of a local user.
|
||||||
|
|
||||||
|
**If `logout_devices` is set to `true`, all `access_tokens` will be invalidated, resulting
|
||||||
|
in the potential loss of encrypted messages**
|
||||||
|
|
||||||
Request body format:
|
Request body format:
|
||||||
|
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"password": "new_password_here"
|
"password": "new_password_here",
|
||||||
|
"logout_devices": false
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -76,7 +80,7 @@ This endpoint instructs Dendrite to remove the given room from its database. Bef
|
||||||
## POST `/_synapse/admin/v1/send_server_notice`
|
## POST `/_synapse/admin/v1/send_server_notice`
|
||||||
|
|
||||||
Request body format:
|
Request body format:
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"user_id": "@target_user:server_name",
|
"user_id": "@target_user:server_name",
|
||||||
"content": {
|
"content": {
|
||||||
|
|
@ -89,7 +93,7 @@ Request body format:
|
||||||
Send a server notice to a specific user. See the [Matrix Spec](https://spec.matrix.org/v1.3/client-server-api/#server-notices) for additional details on server notice behaviour.
|
Send a server notice to a specific user. See the [Matrix Spec](https://spec.matrix.org/v1.3/client-server-api/#server-notices) for additional details on server notice behaviour.
|
||||||
If successfully sent, the API will return the following response:
|
If successfully sent, the API will return the following response:
|
||||||
|
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"event_id": "<event_id>"
|
"event_id": "<event_id>"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,11 +36,6 @@ connections it will open to the database.
|
||||||
**If you are using the `global` database pool** then you only need to configure the
|
**If you are using the `global` database pool** then you only need to configure the
|
||||||
`max_open_conns` setting once in the `global` section.
|
`max_open_conns` setting once in the `global` section.
|
||||||
|
|
||||||
**If you are defining a `database` config per component** then you will need to ensure that
|
|
||||||
the **sum total** of all configured `max_open_conns` to a given database server do not exceed
|
|
||||||
the connection limit. If you configure a total that adds up to more connections than are available
|
|
||||||
then this will cause database queries to fail.
|
|
||||||
|
|
||||||
You may wish to raise the `max_connections` limit on your PostgreSQL server to accommodate
|
You may wish to raise the `max_connections` limit on your PostgreSQL server to accommodate
|
||||||
additional connections, in which case you should also update the `max_open_conns` in your
|
additional connections, in which case you should also update the `max_open_conns` in your
|
||||||
Dendrite configuration accordingly. However be aware that this is only advisable on particularly
|
Dendrite configuration accordingly. However be aware that this is only advisable on particularly
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ be clues in the logs.
|
||||||
You can increase this log level to the more verbose `debug` level if necessary by adding
|
You can increase this log level to the more verbose `debug` level if necessary by adding
|
||||||
this to the config and restarting Dendrite:
|
this to the config and restarting Dendrite:
|
||||||
|
|
||||||
```
|
```yaml
|
||||||
logging:
|
logging:
|
||||||
- type: std
|
- type: std
|
||||||
level: debug
|
level: debug
|
||||||
|
|
@ -57,12 +57,7 @@ number of database connections does not exceed the maximum allowed by PostgreSQL
|
||||||
|
|
||||||
Open your `postgresql.conf` configuration file and check the value of `max_connections`
|
Open your `postgresql.conf` configuration file and check the value of `max_connections`
|
||||||
(which is typically `100` by default). Then open your `dendrite.yaml` configuration file
|
(which is typically `100` by default). Then open your `dendrite.yaml` configuration file
|
||||||
and ensure that:
|
and ensure that in the `global.database` section, `max_open_conns` does not exceed that number.
|
||||||
|
|
||||||
1. If you are using the `global.database` section, that `max_open_conns` does not exceed
|
|
||||||
that number;
|
|
||||||
2. If you are **not** using the `global.database` section, that the sum total of all
|
|
||||||
`max_open_conns` across all `database` blocks does not exceed that number.
|
|
||||||
|
|
||||||
## 5. File descriptors
|
## 5. File descriptors
|
||||||
|
|
||||||
|
|
@ -78,7 +73,7 @@ If there aren't, you will see a log lines like this:
|
||||||
level=warning msg="IMPORTANT: Process file descriptor limit is currently 65535, it is recommended to raise the limit for Dendrite to at least 65535 to avoid issues"
|
level=warning msg="IMPORTANT: Process file descriptor limit is currently 65535, it is recommended to raise the limit for Dendrite to at least 65535 to avoid issues"
|
||||||
```
|
```
|
||||||
|
|
||||||
Follow the [Optimisation](11_optimisation.md) instructions to correct the
|
Follow the [Optimisation](5_optimisation.md) instructions to correct the
|
||||||
available number of file descriptors.
|
available number of file descriptors.
|
||||||
|
|
||||||
## 6. STUN/TURN Server tester
|
## 6. STUN/TURN Server tester
|
||||||
|
|
|
||||||
|
|
@ -1,85 +0,0 @@
|
||||||
# Sample Caddyfile for using Caddy in front of Dendrite
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
# Customize email address and domain names
|
|
||||||
|
|
||||||
# Optional settings commented out
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
# BE SURE YOUR DOMAINS ARE POINTED AT YOUR SERVER FIRST
|
|
||||||
|
|
||||||
# Documentation: <https://caddyserver.com/docs/>
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
# Bonus tip: If your IP address changes, use Caddy's
|
|
||||||
|
|
||||||
# dynamic DNS plugin to update your DNS records to
|
|
||||||
|
|
||||||
# point to your new IP automatically
|
|
||||||
|
|
||||||
# <https://github.com/mholt/caddy-dynamicdns>
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
# Global options block
|
|
||||||
|
|
||||||
{
|
|
||||||
# In case there is a problem with your certificates.
|
|
||||||
# email example@example.com
|
|
||||||
|
|
||||||
# Turn off the admin endpoint if you don't need graceful config
|
|
||||||
# changes and/or are running untrusted code on your machine.
|
|
||||||
# admin off
|
|
||||||
|
|
||||||
# Enable this if your clients don't send ServerName in TLS handshakes.
|
|
||||||
# default_sni example.com
|
|
||||||
|
|
||||||
# Enable debug mode for verbose logging.
|
|
||||||
# debug
|
|
||||||
|
|
||||||
# Use Let's Encrypt's staging endpoint for testing.
|
|
||||||
# acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
|
|
||||||
|
|
||||||
# If you're port-forwarding HTTP/HTTPS ports from 80/443 to something
|
|
||||||
# else, enable these and put the alternate port numbers here.
|
|
||||||
# http_port 8080
|
|
||||||
# https_port 8443
|
|
||||||
}
|
|
||||||
|
|
||||||
# The server name of your matrix homeserver. This example shows
|
|
||||||
|
|
||||||
# "well-known delegation" from the registered domain to a subdomain
|
|
||||||
|
|
||||||
# which is only needed if your server_name doesn't match your Matrix
|
|
||||||
|
|
||||||
# homeserver URL (i.e. you can show users a vanity domain that looks
|
|
||||||
|
|
||||||
# nice and is easy to remember but still have your Matrix server on
|
|
||||||
|
|
||||||
# its own subdomain or hosted service)
|
|
||||||
|
|
||||||
example.com {
|
|
||||||
header /.well-known/matrix/*Content-Type application/json
|
|
||||||
header /.well-known/matrix/* Access-Control-Allow-Origin *
|
|
||||||
respond /.well-known/matrix/server `{"m.server": "matrix.example.com:443"}`
|
|
||||||
respond /.well-known/matrix/client `{"m.homeserver": {"base_url": "https://matrix.example.com"}}`
|
|
||||||
}
|
|
||||||
|
|
||||||
# The actual domain name whereby your Matrix server is accessed
|
|
||||||
|
|
||||||
matrix.example.com {
|
|
||||||
# Change the end of each reverse_proxy line to the correct
|
|
||||||
# address for your various services.
|
|
||||||
@sync_api {
|
|
||||||
path_regexp /_matrix/client/.*?/(sync|user/.*?/filter/?.*|keys/changes|rooms/.*?/(messages|.*?_?members|context/.*?|relations/.*?|event/.*?))$
|
|
||||||
}
|
|
||||||
reverse_proxy @sync_api sync_api:8073
|
|
||||||
|
|
||||||
reverse_proxy /_matrix/client* client_api:8071
|
|
||||||
reverse_proxy /_matrix/federation* federation_api:8071
|
|
||||||
reverse_proxy /_matrix/key* federation_api:8071
|
|
||||||
reverse_proxy /_matrix/media* media_api:8071
|
|
||||||
}
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
---
|
|
||||||
title: Experimental
|
|
||||||
has_children: true
|
|
||||||
nav_order: 5
|
|
||||||
permalink: /experimental
|
|
||||||
---
|
|
||||||
|
|
||||||
# Installation
|
|
||||||
|
|
||||||
This section contains documentation on experimental things in Dendrite.
|
|
||||||
|
|
@ -1,175 +0,0 @@
|
||||||
---
|
|
||||||
title: Installing as a polylith
|
|
||||||
parent: Experimental
|
|
||||||
nav_order: 1
|
|
||||||
permalink: /installation/experimental/polylith
|
|
||||||
---
|
|
||||||
|
|
||||||
# Installing as a polylith
|
|
||||||
|
|
||||||
## Using docker-compose
|
|
||||||
|
|
||||||
Dendrite provides an [example](https://github.com/matrix-org/dendrite/blob/main/build/docker/docker-compose.polylith.yml)
|
|
||||||
Docker compose file, which needs some preparation to start successfully.
|
|
||||||
Please note that this compose file has Postgres and NATS JetStream as a dependency, and you need to configure
|
|
||||||
a [reverse proxy](../planning#reverse-proxy).
|
|
||||||
|
|
||||||
### Preparations
|
|
||||||
|
|
||||||
Note that we're going to use the `dendrite-monolith` image in the next steps, as the `dendrite-polylith` image does
|
|
||||||
not provide the needed binaries to generate keys and configs.
|
|
||||||
|
|
||||||
#### Generate a private key
|
|
||||||
|
|
||||||
First we'll generate private key, which is used to sign events, the following will create one in `./config`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mkdir -p ./config
|
|
||||||
docker run --rm --entrypoint="/usr/bin/generate-keys" \
|
|
||||||
-v $(pwd)/config:/mnt \
|
|
||||||
matrixdotorg/dendrite-monolith:latest \
|
|
||||||
-private-key /mnt/matrix_key.pem
|
|
||||||
```
|
|
||||||
(**NOTE**: This only needs to be executed **once**, as you otherwise overwrite the key)
|
|
||||||
|
|
||||||
#### Generate a config
|
|
||||||
|
|
||||||
Similar to the command above, we can generate a config to be used, which will use the correct paths
|
|
||||||
as specified in the example docker-compose file. Change `server` to your domain and `db` according to your changes
|
|
||||||
to the docker-compose file (`services.postgres.environment` values):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mkdir -p ./config
|
|
||||||
docker run --rm --entrypoint="/bin/sh" \
|
|
||||||
-v $(pwd)/config:/mnt \
|
|
||||||
matrixdotorg/dendrite-monolith:latest \
|
|
||||||
-c "/usr/bin/generate-config \
|
|
||||||
-polylith \
|
|
||||||
-db postgres://dendrite:itsasecret@postgres/dendrite?sslmode=disable \
|
|
||||||
-server YourDomainHere > /mnt/dendrite.yaml"
|
|
||||||
```
|
|
||||||
|
|
||||||
We now need to modify the generated config, since `-polylith` generates one to be used on the same machine:
|
|
||||||
|
|
||||||
Set the Jetstream configuration to:
|
|
||||||
```yaml
|
|
||||||
global:
|
|
||||||
jetstream:
|
|
||||||
storage_path: /var/dendrite/
|
|
||||||
addresses:
|
|
||||||
- nats://jetstream:4222
|
|
||||||
topic_prefix: Dendrite
|
|
||||||
in_memory: false
|
|
||||||
disable_tls_validation: false # Required when using the example compose file
|
|
||||||
```
|
|
||||||
|
|
||||||
For each component defined, remove the `internal_api.listen` hostname (`localhost`) and change the `internal_api.connect` hostname
|
|
||||||
to the corresponding hostname from the `docker-compose.polylith.yml`, e.g. the result for `user_api`:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
user_api:
|
|
||||||
internal_api:
|
|
||||||
listen: http://:7781
|
|
||||||
connect: http://user_api:7781
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
#### Starting Dendrite
|
|
||||||
|
|
||||||
Once you're done changing the config, you can now start up Dendrite with
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose -f docker-compose.polylith.yml up
|
|
||||||
```
|
|
||||||
|
|
||||||
## Manual installation
|
|
||||||
|
|
||||||
You can install the Dendrite polylith binary into `$GOPATH/bin` by using `go install`:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
go install ./cmd/dendrite-polylith-multi
|
|
||||||
```
|
|
||||||
|
|
||||||
Alternatively, you can specify a custom path for the binary to be written to using `go build`:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
go build -o /usr/local/bin/ ./cmd/dendrite-polylith-multi
|
|
||||||
```
|
|
||||||
|
|
||||||
The `dendrite-polylith-multi` binary is a "multi-personality" binary which can run as
|
|
||||||
any of the components depending on the supplied command line parameters.
|
|
||||||
|
|
||||||
### Reverse proxy
|
|
||||||
|
|
||||||
A reverse proxy such as [Caddy](https://caddyserver.com), [NGINX](https://www.nginx.com) or
|
|
||||||
[HAProxy](http://www.haproxy.org) is required for polylith deployments.
|
|
||||||
Configuring those not covered in this documentation, although sample configurations
|
|
||||||
for [Caddy](https://github.com/matrix-org/dendrite/blob/main/docs/caddy) and
|
|
||||||
[NGINX](https://github.com/matrix-org/dendrite/blob/main/docs/nginx) are provided.
|
|
||||||
|
|
||||||
|
|
||||||
### NATS Server
|
|
||||||
|
|
||||||
Polylith deployments currently need a standalone NATS Server installation with JetStream
|
|
||||||
enabled.
|
|
||||||
|
|
||||||
To do so, follow the [NATS Server installation instructions](https://docs.nats.io/running-a-nats-service/introduction/installation) and then [start your NATS deployment](https://docs.nats.io/running-a-nats-service/introduction/running). JetStream must be enabled, either by passing the `-js` flag to `nats-server`,
|
|
||||||
or by specifying the `store_dir` option in the the `jetstream` configuration.
|
|
||||||
|
|
||||||
### Starting the polylith
|
|
||||||
|
|
||||||
Once you have completed all preparation and installation steps,
|
|
||||||
you can start your Dendrite polylith deployment by starting the various components
|
|
||||||
using the `dendrite-polylith-multi` personalities.
|
|
||||||
|
|
||||||
### Starting the components
|
|
||||||
|
|
||||||
Each component must be started individually:
|
|
||||||
|
|
||||||
#### Client API
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./dendrite-polylith-multi -config /path/to/dendrite.yaml clientapi
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Sync API
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./dendrite-polylith-multi -config /path/to/dendrite.yaml syncapi
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Media API
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./dendrite-polylith-multi -config /path/to/dendrite.yaml mediaapi
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Federation API
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./dendrite-polylith-multi -config /path/to/dendrite.yaml federationapi
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Roomserver
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./dendrite-polylith-multi -config /path/to/dendrite.yaml roomserver
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Appservice API
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./dendrite-polylith-multi -config /path/to/dendrite.yaml appservice
|
|
||||||
```
|
|
||||||
|
|
||||||
#### User API
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./dendrite-polylith-multi -config /path/to/dendrite.yaml userapi
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Key server
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./dendrite-polylith-multi -config /path/to/dendrite.yaml keyserver
|
|
||||||
```
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
# Depending on which port is used for federation (.well-known/matrix/server or SRV record),
|
|
||||||
# ensure there's a binding for that port in the configuration. Replace "FEDPORT" with port
|
|
||||||
# number, (e.g. "8448"), and "IPV4" with your server's ipv4 address (separate binding for
|
|
||||||
# each ip address, e.g. if you use both ipv4 and ipv6 addresses).
|
|
||||||
|
|
||||||
Binding {
|
|
||||||
Port = FEDPORT
|
|
||||||
Interface = IPV4
|
|
||||||
TLScertFile = /path/to/fullchainandprivkey.pem
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VirtualHost {
|
|
||||||
...
|
|
||||||
# route requests to:
|
|
||||||
# /_matrix/client/.*/sync
|
|
||||||
# /_matrix/client/.*/user/{userId}/filter
|
|
||||||
# /_matrix/client/.*/user/{userId}/filter/{filterID}
|
|
||||||
# /_matrix/client/.*/keys/changes
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/messages
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/context/{eventID}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/event/{eventID}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/relations/{eventID}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/relations/{eventID}/{relType}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/relations/{eventID}/{relType}/{eventType}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/members
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/joined_members
|
|
||||||
# to sync_api
|
|
||||||
ReverseProxy = /_matrix/client/.*?/(sync|user/.*?/filter/?.*|keys/changes|rooms/.*?/(messages|.*?_?members|context/.*?|relations/.*?|event/.*?))$ http://localhost:8073 600
|
|
||||||
ReverseProxy = /_matrix/client http://localhost:8071 600
|
|
||||||
ReverseProxy = /_matrix/federation http://localhost:8072 600
|
|
||||||
ReverseProxy = /_matrix/key http://localhost:8072 600
|
|
||||||
ReverseProxy = /_matrix/media http://localhost:8074 600
|
|
||||||
...
|
|
||||||
}
|
|
||||||
|
|
@ -7,29 +7,13 @@ permalink: /installation/planning
|
||||||
|
|
||||||
# Planning your installation
|
# Planning your installation
|
||||||
|
|
||||||
## Modes
|
## Database
|
||||||
|
|
||||||
Dendrite consists of several components, each responsible for a different aspect of the Matrix protocol.
|
|
||||||
Users can run Dendrite in one of two modes which dictate how these components are executed and communicate.
|
|
||||||
|
|
||||||
* **Monolith mode** runs all components in a single process. Components communicate through an internal NATS
|
|
||||||
server with generally low overhead. This mode dramatically simplifies deployment complexity and offers the
|
|
||||||
best balance between performance and resource usage for low-to-mid volume deployments.
|
|
||||||
|
|
||||||
* **Polylith mode** runs all components in isolated processes. Components communicate through an external NATS
|
|
||||||
server and HTTP APIs, which incur considerable overhead. While this mode allows for more granular control of
|
|
||||||
resources dedicated toward individual processes, given the additional communications overhead, it is only
|
|
||||||
necessary for very large deployments.
|
|
||||||
|
|
||||||
Given our current state of development, **we recommend monolith mode** for all deployments.
|
|
||||||
|
|
||||||
## Databases
|
|
||||||
|
|
||||||
Dendrite can run with either a PostgreSQL or a SQLite backend. There are considerable tradeoffs
|
Dendrite can run with either a PostgreSQL or a SQLite backend. There are considerable tradeoffs
|
||||||
to consider:
|
to consider:
|
||||||
|
|
||||||
* **PostgreSQL**: Needs to run separately to Dendrite, needs to be installed and configured separately
|
* **PostgreSQL**: Needs to run separately to Dendrite, needs to be installed and configured separately
|
||||||
and and will use more resources over all, but will be **considerably faster** than SQLite. PostgreSQL
|
and will use more resources over all, but will be **considerably faster** than SQLite. PostgreSQL
|
||||||
has much better write concurrency which will allow Dendrite to process more tasks in parallel. This
|
has much better write concurrency which will allow Dendrite to process more tasks in parallel. This
|
||||||
will be necessary for federated deployments to perform adequately.
|
will be necessary for federated deployments to perform adequately.
|
||||||
|
|
||||||
|
|
@ -86,18 +70,17 @@ If using the PostgreSQL database engine, you should install PostgreSQL 12 or lat
|
||||||
### NATS Server
|
### NATS Server
|
||||||
|
|
||||||
Dendrite comes with a built-in [NATS Server](https://github.com/nats-io/nats-server) and
|
Dendrite comes with a built-in [NATS Server](https://github.com/nats-io/nats-server) and
|
||||||
therefore does not need this to be manually installed. If you are planning a monolith installation, you
|
therefore does not need this to be manually installed.
|
||||||
do not need to do anything.
|
|
||||||
|
|
||||||
|
|
||||||
### Reverse proxy
|
### Reverse proxy
|
||||||
|
|
||||||
A reverse proxy such as [Caddy](https://caddyserver.com), [NGINX](https://www.nginx.com) or
|
A reverse proxy such as [Caddy](https://caddyserver.com), [NGINX](https://www.nginx.com) or
|
||||||
[HAProxy](http://www.haproxy.org) is useful for deployments. Configuring those is not covered in this documentation, although sample configurations
|
[HAProxy](http://www.haproxy.org) is useful for deployments. Configuring this is not covered in this documentation, although sample configurations
|
||||||
for [Caddy](https://github.com/matrix-org/dendrite/blob/main/docs/caddy) and
|
for [Caddy](https://github.com/matrix-org/dendrite/blob/main/docs/caddy) and
|
||||||
[NGINX](https://github.com/matrix-org/dendrite/blob/main/docs/nginx) are provided.
|
[NGINX](https://github.com/matrix-org/dendrite/blob/main/docs/nginx) are provided.
|
||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
|
|
||||||
Finally, if you want to build Dendrite on Windows, you will need need `gcc` in the path. The best
|
Finally, if you want to build Dendrite on Windows, you will need `gcc` in the path. The best
|
||||||
way to achieve this is by installing and building Dendrite under [MinGW-w64](https://www.mingw-w64.org/).
|
way to achieve this is by installing and building Dendrite under [MinGW-w64](https://www.mingw-w64.org/).
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ Matrix servers usually discover each other when federating using the following m
|
||||||
well-known file to connect to the remote homeserver;
|
well-known file to connect to the remote homeserver;
|
||||||
2. If a DNS SRV delegation exists on `example.com`, use the IP address and port from the DNS SRV
|
2. If a DNS SRV delegation exists on `example.com`, use the IP address and port from the DNS SRV
|
||||||
record to connect to the remote homeserver;
|
record to connect to the remote homeserver;
|
||||||
3. If neither well-known or DNS SRV delegation are configured, attempt to connect to the remote
|
3. If neither well-known nor DNS SRV delegation are configured, attempt to connect to the remote
|
||||||
homeserver by connecting to `example.com` port TCP/8448 using HTTPS.
|
homeserver by connecting to `example.com` port TCP/8448 using HTTPS.
|
||||||
|
|
||||||
The exact details of how server name resolution works can be found in
|
The exact details of how server name resolution works can be found in
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ permalink: /installation/docker/install
|
||||||
|
|
||||||
# Installing Dendrite using Docker Compose
|
# Installing Dendrite using Docker Compose
|
||||||
|
|
||||||
Dendrite provides an [example](https://github.com/matrix-org/dendrite/blob/main/build/docker/docker-compose.monolith.yml)
|
Dendrite provides an [example](https://github.com/matrix-org/dendrite/blob/main/build/docker/docker-compose.yml)
|
||||||
Docker compose file, which needs some preparation to start successfully.
|
Docker compose file, which needs some preparation to start successfully.
|
||||||
Please note that this compose file only has Postgres as a dependency, and you need to configure
|
Please note that this compose file only has Postgres as a dependency, and you need to configure
|
||||||
a [reverse proxy](../planning#reverse-proxy).
|
a [reverse proxy](../planning#reverse-proxy).
|
||||||
|
|
@ -53,5 +53,5 @@ You can then change `config/dendrite.yaml` to your liking.
|
||||||
Once you're done changing the config, you can now start up Dendrite with
|
Once you're done changing the config, you can now start up Dendrite with
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose -f docker-compose.monolith.yml up
|
docker-compose -f docker-compose.yml up
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -15,31 +15,22 @@ may need to perform some manual steps outlined below.
|
||||||
## PostgreSQL
|
## PostgreSQL
|
||||||
|
|
||||||
Dendrite can automatically populate the database with the relevant tables and indexes, but
|
Dendrite can automatically populate the database with the relevant tables and indexes, but
|
||||||
it is not capable of creating the databases themselves. You will need to create the databases
|
it is not capable of creating the database itself. You will need to create the database
|
||||||
manually.
|
manually.
|
||||||
|
|
||||||
The databases **must** be created with UTF-8 encoding configured or you will likely run into problems
|
The database **must** be created with UTF-8 encoding configured, or you will likely run into problems
|
||||||
with your Dendrite deployment.
|
with your Dendrite deployment.
|
||||||
|
|
||||||
At this point, you can choose to either use a single database for all Dendrite components,
|
You will need to create a single PostgreSQL database. Deployments
|
||||||
or you can run each component with its own separate database:
|
can use a single global connection pool, which makes updating the configuration file much easier.
|
||||||
|
Only one database connection string to manage and likely simpler to back up the database. All
|
||||||
|
components will be sharing the same database resources (CPU, RAM, storage).
|
||||||
|
|
||||||
* **Single database**: You will need to create a single PostgreSQL database. Monolith deployments
|
You will most likely want to:
|
||||||
can use a single global connection pool, which makes updating the configuration file much easier.
|
|
||||||
Only one database connection string to manage and likely simpler to back up the database. All
|
|
||||||
components will be sharing the same database resources (CPU, RAM, storage).
|
|
||||||
|
|
||||||
* **Separate databases**: You will need to create a separate PostgreSQL database for each
|
|
||||||
component. You will need to configure each component that has storage in the Dendrite
|
|
||||||
configuration file with its own connection parameters. Allows running a different database engine
|
|
||||||
for each component on a different machine if needs be, each with their own CPU, RAM and storage —
|
|
||||||
almost certainly overkill unless you are running a very large Dendrite deployment.
|
|
||||||
|
|
||||||
For either configuration, you will want to:
|
|
||||||
|
|
||||||
1. Configure a role (with a username and password) which Dendrite can use to connect to the
|
1. Configure a role (with a username and password) which Dendrite can use to connect to the
|
||||||
database;
|
database;
|
||||||
2. Create the database(s) themselves, ensuring that the Dendrite role has privileges over them.
|
2. Create the database itself, ensuring that the Dendrite role has privileges over them.
|
||||||
As Dendrite will create and manage the database tables, indexes and sequences by itself, the
|
As Dendrite will create and manage the database tables, indexes and sequences by itself, the
|
||||||
Dendrite role must have suitable privileges over the database.
|
Dendrite role must have suitable privileges over the database.
|
||||||
|
|
||||||
|
|
@ -73,27 +64,6 @@ Create the database itself, using the `dendrite` role from above:
|
||||||
sudo -u postgres createdb -O dendrite -E UTF-8 dendrite
|
sudo -u postgres createdb -O dendrite -E UTF-8 dendrite
|
||||||
```
|
```
|
||||||
|
|
||||||
### Multiple database creation
|
|
||||||
|
|
||||||
The following eight components require a database. In this example they will be named:
|
|
||||||
|
|
||||||
| Appservice API | `dendrite_appservice` |
|
|
||||||
| Federation API | `dendrite_federationapi` |
|
|
||||||
| Media API | `dendrite_mediaapi` |
|
|
||||||
| MSCs | `dendrite_mscs` |
|
|
||||||
| Roomserver | `dendrite_roomserver` |
|
|
||||||
| Sync API | `dendrite_syncapi` |
|
|
||||||
| Key server | `dendrite_keyserver` |
|
|
||||||
| User API | `dendrite_userapi` |
|
|
||||||
|
|
||||||
... therefore you will need to create eight different databases:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
for i in appservice federationapi mediaapi mscs roomserver syncapi keyserver userapi; do
|
|
||||||
sudo -u postgres createdb -O dendrite -E UTF-8 dendrite_$i
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
## SQLite
|
## SQLite
|
||||||
|
|
||||||
**WARNING:** The Dendrite SQLite backend is slower, less reliable and not recommended for
|
**WARNING:** The Dendrite SQLite backend is slower, less reliable and not recommended for
|
||||||
|
|
|
||||||
|
|
@ -79,12 +79,7 @@ You do not need to configure the `storage_path` when using a standalone NATS Ser
|
||||||
In the case that you are connecting to a multi-node NATS cluster, you can configure more than
|
In the case that you are connecting to a multi-node NATS cluster, you can configure more than
|
||||||
one address in the `addresses` field.
|
one address in the `addresses` field.
|
||||||
|
|
||||||
## Database connections
|
## Database connection using a global connection pool
|
||||||
|
|
||||||
Configuring database connections varies based on the [database configuration](database)
|
|
||||||
that you chose.
|
|
||||||
|
|
||||||
### Global connection pool (with a single PostgreSQL database only)
|
|
||||||
|
|
||||||
If you want to use a single connection pool to a single PostgreSQL database,
|
If you want to use a single connection pool to a single PostgreSQL database,
|
||||||
then you must uncomment and configure the `database` section within the `global` section:
|
then you must uncomment and configure the `database` section within the `global` section:
|
||||||
|
|
@ -104,38 +99,6 @@ configuration file, e.g. under the `app_service_api`, `federation_api`, `key_ser
|
||||||
`media_api`, `mscs`, `relay_api`, `room_server`, `sync_api` and `user_api` blocks, otherwise
|
`media_api`, `mscs`, `relay_api`, `room_server`, `sync_api` and `user_api` blocks, otherwise
|
||||||
these will override the `global` database configuration.
|
these will override the `global` database configuration.
|
||||||
|
|
||||||
### Per-component connections (all other configurations)
|
|
||||||
|
|
||||||
If you are using SQLite databases or separate PostgreSQL databases per component,
|
|
||||||
then you must instead configure the `database` sections under each
|
|
||||||
of the component blocks ,e.g. under the `app_service_api`, `federation_api`, `key_server`,
|
|
||||||
`media_api`, `mscs`, `relay_api`, `room_server`, `sync_api` and `user_api` blocks. Make sure the **sum** of all
|
|
||||||
`max_open_conns` does **not** exceed the `max_connections` configured for Postgres.
|
|
||||||
|
|
||||||
For example, with PostgreSQL:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
room_server:
|
|
||||||
# ...
|
|
||||||
database:
|
|
||||||
connection_string: postgres://user:pass@hostname/dendrite_component?sslmode=disable
|
|
||||||
max_open_conns: 10
|
|
||||||
max_idle_conns: 2
|
|
||||||
conn_max_lifetime: -1
|
|
||||||
```
|
|
||||||
|
|
||||||
... or with SQLite:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
room_server:
|
|
||||||
# ...
|
|
||||||
database:
|
|
||||||
connection_string: file:roomserver.db
|
|
||||||
max_open_conns: 10
|
|
||||||
max_idle_conns: 2
|
|
||||||
conn_max_lifetime: -1
|
|
||||||
```
|
|
||||||
|
|
||||||
## Full-text search
|
## Full-text search
|
||||||
|
|
||||||
Dendrite supports full-text indexing using [Bleve](https://github.com/blevesearch/bleve). It is configured in the `sync_api` section as follows.
|
Dendrite supports full-text indexing using [Bleve](https://github.com/blevesearch/bleve). It is configured in the `sync_api` section as follows.
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@ permalink: /installation/manual/start
|
||||||
# Starting Dendrite
|
# Starting Dendrite
|
||||||
|
|
||||||
Once you have completed all preparation and installation steps,
|
Once you have completed all preparation and installation steps,
|
||||||
you can start your Dendrite deployment by starting the `dendrite-monolith-server`:
|
you can start your Dendrite deployment by executing the `dendrite` binary:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./dendrite-monolith-server -config /path/to/dendrite.yaml
|
./dendrite -config /path/to/dendrite.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, Dendrite will listen HTTP on port 8008. If you want to change the addresses
|
By default, Dendrite will listen HTTP on port 8008. If you want to change the addresses
|
||||||
|
|
@ -20,7 +20,7 @@ or ports that Dendrite listens on, you can use the `-http-bind-address` and
|
||||||
`-https-bind-address` command line arguments:
|
`-https-bind-address` command line arguments:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./dendrite-monolith-server -config /path/to/dendrite.yaml \
|
./dendrite -config /path/to/dendrite.yaml \
|
||||||
-http-bind-address 1.2.3.4:12345 \
|
-http-bind-address 1.2.3.4:12345 \
|
||||||
-https-bind-address 1.2.3.4:54321
|
-https-bind-address 1.2.3.4:54321
|
||||||
```
|
```
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
server {
|
|
||||||
listen 443 ssl; # IPv4
|
|
||||||
listen [::]:443 ssl; # IPv6
|
|
||||||
server_name my.hostname.com;
|
|
||||||
|
|
||||||
ssl_certificate /path/to/fullchain.pem;
|
|
||||||
ssl_certificate_key /path/to/privkey.pem;
|
|
||||||
ssl_dhparam /path/to/ssl-dhparams.pem;
|
|
||||||
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_read_timeout 600;
|
|
||||||
|
|
||||||
location /.well-known/matrix/server {
|
|
||||||
return 200 '{ "m.server": "my.hostname.com:443" }';
|
|
||||||
}
|
|
||||||
|
|
||||||
location /.well-known/matrix/client {
|
|
||||||
# If your sever_name here doesn't match your matrix homeserver URL
|
|
||||||
# (e.g. hostname.com as server_name and matrix.hostname.com as homeserver URL)
|
|
||||||
# add_header Access-Control-Allow-Origin '*';
|
|
||||||
return 200 '{ "m.homeserver": { "base_url": "https://my.hostname.com" } }';
|
|
||||||
}
|
|
||||||
|
|
||||||
# route requests to:
|
|
||||||
# /_matrix/client/.*/sync
|
|
||||||
# /_matrix/client/.*/user/{userId}/filter
|
|
||||||
# /_matrix/client/.*/user/{userId}/filter/{filterID}
|
|
||||||
# /_matrix/client/.*/keys/changes
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/messages
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/context/{eventID}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/event/{eventID}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/relations/{eventID}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/relations/{eventID}/{relType}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/relations/{eventID}/{relType}/{eventType}
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/members
|
|
||||||
# /_matrix/client/.*/rooms/{roomId}/joined_members
|
|
||||||
# to sync_api
|
|
||||||
location ~ /_matrix/client/.*?/(sync|user/.*?/filter/?.*|keys/changes|rooms/.*?/(messages|.*?_?members|context/.*?|relations/.*?|event/.*?))$ {
|
|
||||||
proxy_pass http://sync_api:8073;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /_matrix/client {
|
|
||||||
proxy_pass http://client_api:8071;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /_matrix/federation {
|
|
||||||
proxy_pass http://federation_api:8072;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /_matrix/key {
|
|
||||||
proxy_pass http://federation_api:8072;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /_matrix/media {
|
|
||||||
proxy_pass http://media_api:8074;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in a new issue