Add selfhostedsynapse.adoc
This commit is contained in:
parent
0c2062acf4
commit
012c987853
|
@ -0,0 +1,100 @@
|
|||
# Self-hosting a Matrix server
|
||||
Lukáš Kucharczyk
|
||||
:toc: left
|
||||
:doctype: book
|
||||
:source-highlighter: highlightjs
|
||||
|
||||
== Assumptions
|
||||
This article will be using:
|
||||
|
||||
- Docker containers to host the below software
|
||||
- the https://matrix.org/docs/projects/server/synapse[Synapse] Matrix server
|
||||
- PostgreSQL database for the Synapse server
|
||||
- NGINX as the reverse proxy
|
||||
|
||||
You will also need:
|
||||
|
||||
- a domain name and SSL certificate for it
|
||||
|
||||
== Create PostgreSQL user and database
|
||||
Reference: https://matrix-org.github.io/synapse/latest/postgres.html#set-up-database
|
||||
|
||||
Log into the container:
|
||||
```bash
|
||||
docker exec -it postgres bash
|
||||
```
|
||||
Create the user `synapse_user` and use $ADMIN to connect:
|
||||
```bash
|
||||
createuser --pwprompt -U $ADMIN synapse_user
|
||||
```
|
||||
Create the database `synapse` and set `synapse_user` as the owner:
|
||||
```bash
|
||||
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user -U lukas synapse
|
||||
```
|
||||
== Synapse
|
||||
=== Generate a config file
|
||||
Reference: https://github.com/matrix-org/synapse/blob/develop/docker/README.md#generating-a-configuration-file
|
||||
|
||||
=== Register a user
|
||||
Reference: https://matrix-org.github.io/synapse/latest/setup/installation.html#registering-a-user
|
||||
|
||||
Log into the container and create the new user:
|
||||
```bash
|
||||
register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008
|
||||
```
|
||||
You will be asked for the `localpart` (as in `localpart@yourserver.tld`), password, and whether to make the user an admin.
|
||||
|
||||
=== Delegation
|
||||
Reference: https://matrix-org.github.io/synapse/latest/delegate.html
|
||||
|
||||
You need to use delegation if the API of your server is not accessible using the default port of 8448 and the provided `server_name`footnote:[https://matrix-org.github.io/synapse/latest/delegate.html#when-do-i-need-delegation].
|
||||
|
||||
Not using the default `server_name` is particularly useful for cleaner usernames: instead of `user.subdomain.domain.tld`, you can use `user.domain.tld`.
|
||||
|
||||
Delegation is done by providing JSON files at two locations on your serverfootnote:[https://matrix-org.github.io/synapse/latest/setup/installation.html#client-well-known-uri]:
|
||||
|
||||
1. https://domain.tld/.well-known/matrix/server
|
||||
2. https://domain.tld/.well-known/matrix/client
|
||||
|
||||
The `server` part should return this JSON:
|
||||
```json
|
||||
{
|
||||
"m.server": "subdomain.domain.tld:443"
|
||||
}
|
||||
```
|
||||
The `client` part should return this JSON:
|
||||
```json
|
||||
{
|
||||
"m.homeserver": {
|
||||
"base_url": "https://subdomain.tld"
|
||||
}
|
||||
}
|
||||
```
|
||||
A simple way to provide these two JSON files using NGINX is to directly return them as a JSON upon request instead of making them actual files on disk:
|
||||
|
||||
```nginx
|
||||
location /.well-known/matrix/server {
|
||||
add_header Access-Control-Allow-Origin *;
|
||||
default_type application/json;
|
||||
return 200 '{"m.server":"subdomain.domain.tld:443"}';
|
||||
}
|
||||
location /.well-known/matrix/client {
|
||||
add_header Access-Control-Allow-Origin *;
|
||||
default_type application/json;
|
||||
return 200 '{"m.homeserver":{"base_url":"https://subdomain.tld"}}';
|
||||
}
|
||||
```
|
||||
|
||||
=== Federation
|
||||
Reference: https://matrix-org.github.io/synapse/latest/federate.html
|
||||
|
||||
To make sure federation is working, you need to redirect certain URL patterns to be handled by the Synapse server, and you also need to use <<Delegation>> in case the Synapse server does not match your base URL.
|
||||
|
||||
To redirect the URL patterns to your Synapse server using NGINX, add this configurationfootnote:[https://github.com/matrix-org/synapse/blob/develop/docs/reverse_proxy.md#nginx]:
|
||||
```nginx
|
||||
location ~* ^(\/_matrix|\/_synapse\/client) {
|
||||
proxy_pass http://$host:$port;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header Host $host;
|
||||
```
|
Loading…
Reference in New Issue