mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-16 18:43:10 -06:00
refresh latest dendrite main
This commit is contained in:
parent
34342934cc
commit
1683a17dbf
68
docs/caddy/monolith/CaddyFile
Normal file
68
docs/caddy/monolith/CaddyFile
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
# debug
|
||||||
|
admin off
|
||||||
|
email example@example.com
|
||||||
|
default_sni example.com
|
||||||
|
# Debug endpoint
|
||||||
|
# acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
# Snippets
|
||||||
|
#______________________________________________________________________
|
||||||
|
|
||||||
|
(handle_errors_maintenance) {
|
||||||
|
handle_errors {
|
||||||
|
@maintenance expression {http.error.status_code} == 502
|
||||||
|
rewrite @maintenance maintenance.html
|
||||||
|
root * "/path/to/service/pages"
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(matrix-well-known-header) {
|
||||||
|
# Headers
|
||||||
|
header Access-Control-Allow-Origin "*"
|
||||||
|
header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
|
||||||
|
header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization"
|
||||||
|
header Content-Type "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
example.com {
|
||||||
|
|
||||||
|
# ...
|
||||||
|
|
||||||
|
handle /.well-known/matrix/server {
|
||||||
|
import matrix-well-known-header
|
||||||
|
respond `{ "m.server": "matrix.example.com:443" }` 200
|
||||||
|
}
|
||||||
|
|
||||||
|
handle /.well-known/matrix/client {
|
||||||
|
import matrix-well-known-header
|
||||||
|
respond `{ "m.homeserver": { "base_url": "https://matrix.example.com" } }` 200
|
||||||
|
}
|
||||||
|
|
||||||
|
import handle_errors_maintenance
|
||||||
|
}
|
||||||
|
|
||||||
|
example.com:8448 {
|
||||||
|
# server<->server HTTPS traffic
|
||||||
|
reverse_proxy http://dendrite-host:8008
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix.example.com {
|
||||||
|
|
||||||
|
handle /_matrix/* {
|
||||||
|
# client<->server HTTPS traffic
|
||||||
|
reverse_proxy http://dendrite-host:8008
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_path /* {
|
||||||
|
# Client webapp (Element SPA or ...)
|
||||||
|
file_server {
|
||||||
|
root /path/to/www/example.com/matrix-web-client/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,57 +1,68 @@
|
||||||
# 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.
|
# debug
|
||||||
# email example@example.com
|
admin off
|
||||||
|
email example@example.com
|
||||||
# Turn off the admin endpoint if you don't need graceful config
|
default_sni example.com
|
||||||
# changes and/or are running untrusted code on your machine.
|
# Debug endpoint
|
||||||
# admin off
|
# acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
|
||||||
|
|
||||||
# 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,
|
# Snippets
|
||||||
# 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
|
(handle_errors_maintenance) {
|
||||||
# its own subdomain or hosted service).
|
handle_errors {
|
||||||
|
@maintenance expression {http.error.status_code} == 502
|
||||||
|
rewrite @maintenance maintenance.html
|
||||||
|
root * "/path/to/service/pages"
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(matrix-well-known-header) {
|
||||||
|
# Headers
|
||||||
|
header Access-Control-Allow-Origin "*"
|
||||||
|
header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
|
||||||
|
header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization"
|
||||||
|
header Content-Type "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
example.com {
|
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"}}`
|
handle /.well-known/matrix/server {
|
||||||
|
import matrix-well-known-header
|
||||||
|
respond `{ "m.server": "matrix.example.com:443" }` 200
|
||||||
|
}
|
||||||
|
|
||||||
|
handle /.well-known/matrix/client {
|
||||||
|
import matrix-well-known-header
|
||||||
|
respond `{ "m.homeserver": { "base_url": "https://matrix.example.com" } }` 200
|
||||||
|
}
|
||||||
|
|
||||||
|
import handle_errors_maintenance
|
||||||
}
|
}
|
||||||
|
|
||||||
# The actual domain name whereby your Matrix server is accessed.
|
example.com:8448 {
|
||||||
matrix.example.com {
|
# server<->server HTTPS traffic
|
||||||
# Set localhost:8008 to the address of your Dendrite server, if different
|
reverse_proxy http://dendrite-host:8008
|
||||||
reverse_proxy /_matrix/* localhost:8008
|
}
|
||||||
|
|
||||||
|
matrix.example.com {
|
||||||
|
|
||||||
|
handle /_matrix/* {
|
||||||
|
# client<->server HTTPS traffic
|
||||||
|
reverse_proxy http://dendrite-host:8008
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_path /* {
|
||||||
|
# Client webapp (Element SPA or ...)
|
||||||
|
file_server {
|
||||||
|
root /path/to/www/example.com/matrix-web-client/
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
71
docs/installation/10_optimisation.md
Normal file
71
docs/installation/10_optimisation.md
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
---
|
||||||
|
title: Optimise your installation
|
||||||
|
parent: Installation
|
||||||
|
has_toc: true
|
||||||
|
nav_order: 10
|
||||||
|
permalink: /installation/start/optimisation
|
||||||
|
---
|
||||||
|
|
||||||
|
# Optimise your installation
|
||||||
|
|
||||||
|
Now that you have Dendrite running, the following tweaks will improve the reliability
|
||||||
|
and performance of your installation.
|
||||||
|
|
||||||
|
## File descriptor limit
|
||||||
|
|
||||||
|
Most platforms have a limit on how many file descriptors a single process can open. All
|
||||||
|
connections made by Dendrite consume file descriptors — this includes database connections
|
||||||
|
and network requests to remote homeservers. When participating in large federated rooms
|
||||||
|
where Dendrite must talk to many remote servers, it is often very easy to exhaust default
|
||||||
|
limits which are quite low.
|
||||||
|
|
||||||
|
We currently recommend setting the file descriptor limit to 65535 to avoid such
|
||||||
|
issues. Dendrite will log immediately after startup if the file descriptor limit is too low:
|
||||||
|
|
||||||
|
```
|
||||||
|
level=warning msg="IMPORTANT: Process file descriptor limit is currently 1024, it is recommended to raise the limit for Dendrite to at least 65535 to avoid issues"
|
||||||
|
```
|
||||||
|
|
||||||
|
UNIX systems have two limits: a hard limit and a soft limit. You can view the soft limit
|
||||||
|
by running `ulimit -Sn` and the hard limit with `ulimit -Hn`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ulimit -Hn
|
||||||
|
1048576
|
||||||
|
|
||||||
|
$ ulimit -Sn
|
||||||
|
1024
|
||||||
|
```
|
||||||
|
|
||||||
|
Increase the soft limit before starting Dendrite:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ulimit -Sn 65535
|
||||||
|
```
|
||||||
|
|
||||||
|
The log line at startup should no longer appear if the limit is sufficient.
|
||||||
|
|
||||||
|
If you are running under a systemd service, you can instead add `LimitNOFILE=65535` option
|
||||||
|
to the `[Service]` section of your service unit file.
|
||||||
|
|
||||||
|
## DNS caching
|
||||||
|
|
||||||
|
Dendrite has a built-in DNS cache which significantly reduces the load that Dendrite will
|
||||||
|
place on your DNS resolver. This may also speed up outbound federation.
|
||||||
|
|
||||||
|
Consider enabling the DNS cache by modifying the `global` section of your configuration file:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
dns_cache:
|
||||||
|
enabled: true
|
||||||
|
cache_size: 4096
|
||||||
|
cache_lifetime: 600s
|
||||||
|
```
|
||||||
|
|
||||||
|
## Time synchronisation
|
||||||
|
|
||||||
|
Matrix relies heavily on TLS which requires the system time to be correct. If the clock
|
||||||
|
drifts then you may find that federation no works reliably (or at all) and clients may
|
||||||
|
struggle to connect to your Dendrite server.
|
||||||
|
|
||||||
|
Ensure that the time is synchronised on your system by enabling NTP sync.
|
||||||
Loading…
Reference in a new issue