318 lines
8.1 KiB
Markdown
318 lines
8.1 KiB
Markdown
![]() |
---
|
||
|
title: 08 Matrix
|
||
|
description:
|
||
|
published: true
|
||
|
date: 2023-05-03T06:04:33.804Z
|
||
|
tags:
|
||
|
editor: markdown
|
||
|
dateCreated: 2023-05-03T01:58:48.449Z
|
||
|
---
|
||
|
|
||
|
# Matrix
|
||
|
WIP!
|
||
|
|
||
|
# Conduit
|
||
|
WIP!
|
||
|
|
||
|
# Synapse
|
||
|
Synapse is a Matrix server, It can be used for all sorts of things, but it is mainly used for private communication. I can certainly recommend it.
|
||
|
|
||
|
First we need to create a network
|
||
|
|
||
|
sudo docker network create --subnet=172.32.0.0/16 synapse
|
||
|
|
||
|
Now create the folder for the project
|
||
|
|
||
|
mkdir -p ~/docker/synapse
|
||
|
|
||
|
Now create the compose file
|
||
|
|
||
|
nano ~/docker/synapse/docker-compose.yml
|
||
|
|
||
|
Add in the following text
|
||
|
|
||
|
version: '3'
|
||
|
|
||
|
services:
|
||
|
synapse:
|
||
|
image: matrixdotorg/synapse:latest
|
||
|
container_name: synapse
|
||
|
restart: always
|
||
|
volumes:
|
||
|
- /data/synapse:/data
|
||
|
networks:
|
||
|
synapse:
|
||
|
ipv4_address: 172.32.0.10
|
||
|
|
||
|
networks:
|
||
|
synapse:
|
||
|
external: true
|
||
|
name: synapse
|
||
|
ipam:
|
||
|
config:
|
||
|
- subnet: 172.32.0.0/16
|
||
|
|
||
|
Now we need to create the database user, database and set the privileges First the user
|
||
|
|
||
|
sudo docker exec -it -u postgres postgres psql
|
||
|
create user synapse with encrypted password 'set your synapse user password here';
|
||
|
exit;
|
||
|
|
||
|
Now the database
|
||
|
|
||
|
sudo docker exec -it -u postgres postgres bash
|
||
|
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse synapse
|
||
|
exit
|
||
|
|
||
|
And finally the permissions
|
||
|
|
||
|
sudo docker exec -it -u postgres postgres psql
|
||
|
grant all privileges on database synapse to synapse;
|
||
|
exit;
|
||
|
|
||
|
Now we need to run the synapse config generation
|
||
|
|
||
|
sudo docker run -it --rm -v "/data/synapse:/data" -e SYNAPSE_SERVER_NAME=example.com -e SYNAPSE_REPORT_STATS=yes matrixdotorg/synapse:latest generate
|
||
|
|
||
|
Now we are going to adjust the config file a bit
|
||
|
|
||
|
sudo nano /data/synapse/homeserver.yaml
|
||
|
|
||
|
Here we comment in the sqlite database and uncomment the postgres settings so it looks like this
|
||
|
|
||
|
database:
|
||
|
name: psycopg2
|
||
|
txn_limit: 10000
|
||
|
args:
|
||
|
user: synapse
|
||
|
password: the password you set for the synapse user
|
||
|
database: synapse
|
||
|
host: 172.32.0.30
|
||
|
port: 5432
|
||
|
cp_min: 5
|
||
|
cp_max: 10
|
||
|
#database:
|
||
|
# name: sqlite3
|
||
|
# args:
|
||
|
# database: /data/homeserver.db
|
||
|
|
||
|
We can now start the synapse container
|
||
|
|
||
|
sudo docker-compose -f ~/docker/synapse/docker-compose.yml up -d
|
||
|
|
||
|
Now we need to add nginx to the synapse network (notice we already added synapse to postgres)
|
||
|
|
||
|
nano ~/docker/nginx/docker-compose.yml
|
||
|
|
||
|
Add the following bits in the correct place
|
||
|
|
||
|
- 8448:8448
|
||
|
|
||
|
synapse:
|
||
|
ipv4_address: 172.32.0.20
|
||
|
|
||
|
synapse:
|
||
|
external: true
|
||
|
name: synapse
|
||
|
|
||
|
Now we finally add the server block to the nginx config file
|
||
|
|
||
|
sudo nano /data/nginx/nginx.conf
|
||
|
|
||
|
Add in the following block
|
||
|
|
||
|
server {
|
||
|
listen 443 ssl http2;
|
||
|
listen [::]:443 ssl http2;
|
||
|
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
|
||
|
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
|
||
|
|
||
|
# For the federation port
|
||
|
listen 8448 ssl http2 default_server;
|
||
|
listen [::]:8448 ssl http2 default_server;
|
||
|
|
||
|
server_name example.com;
|
||
|
|
||
|
location ~ ^(/_matrix|/_synapse/client) {
|
||
|
# note: do not add a path (even a single /) after the port in `proxy_pass`,
|
||
|
# otherwise nginx will canonicalise the URI and cause signature verification
|
||
|
# errors.
|
||
|
proxy_pass http://synapse:8008;
|
||
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||
|
proxy_set_header Host $host;
|
||
|
|
||
|
# Nginx by default only allows file uploads up to 1M in size
|
||
|
# Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
|
||
|
client_max_body_size 50M;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
The last thing we need to do is open up port 8448 in our router.
|
||
|
|
||
|
Now Synapse should be up and running, as a last step we need to add a user.
|
||
|
|
||
|
sudo docker exec -it synapse bash
|
||
|
register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008
|
||
|
|
||
|
Simply follow the steps, give a name, give a password, and say wether it is an admin yes or no.
|
||
|
|
||
|
# Element
|
||
|
Element is a Web client for Matrix, You can use it to chat with other Matrix users
|
||
|
|
||
|
First we are going to create the network
|
||
|
|
||
|
sudo docker network create --subnet=172.33.0.0/16 element
|
||
|
|
||
|
Now we are going to create a folder for the compose file
|
||
|
|
||
|
mkdir ~/docker/element
|
||
|
|
||
|
Create the compose file
|
||
|
|
||
|
nano ~/docker/element/docker-compose.yml
|
||
|
|
||
|
Add in the following text
|
||
|
|
||
|
version: '3'
|
||
|
|
||
|
services:
|
||
|
element:
|
||
|
image: vectorim/element-web:latest
|
||
|
container_name: element
|
||
|
restart: always
|
||
|
volumes:
|
||
|
- /data/element/element-config.json:/app/config.json
|
||
|
networks:
|
||
|
element:
|
||
|
ipv4_address: 172.33.0.10
|
||
|
|
||
|
networks:
|
||
|
element:
|
||
|
external: true
|
||
|
name: element
|
||
|
ipam:
|
||
|
config:
|
||
|
- subnet: 172.33.0.0/16
|
||
|
|
||
|
Now we need to create the element folder for the data
|
||
|
|
||
|
sudo mkdir /data/element/
|
||
|
|
||
|
Now we are going to create element the config file
|
||
|
|
||
|
sudo nano /data/element/element-config.json
|
||
|
|
||
|
Add in the following text
|
||
|
|
||
|
{
|
||
|
"default_server_config": {
|
||
|
"m.homeserver": {
|
||
|
"base_url": "https://example.com",
|
||
|
"server_name": "example.com"
|
||
|
},
|
||
|
"m.identity_server": {
|
||
|
"base_url": "https://vector.im"
|
||
|
}
|
||
|
},
|
||
|
"brand": "Element",
|
||
|
"integrations_ui_url": "https://scalar.vector.im/",
|
||
|
"integrations_rest_url": "https://scalar.vector.im/api",
|
||
|
"integrations_widgets_urls": [
|
||
|
"https://scalar.vector.im/_matrix/integrations/v1",
|
||
|
"https://scalar.vector.im/api",
|
||
|
"https://scalar-staging.vector.im/_matrix/integrations/v1",
|
||
|
"https://scalar-staging.vector.im/api",
|
||
|
"https://scalar-staging.riot.im/scalar/api"
|
||
|
],
|
||
|
"hosting_signup_link": "https://element.io/matrix-services?utm_source=element-web&utm_medium=web",
|
||
|
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
|
||
|
"uisi_autorageshake_app": "element-auto-uisi",
|
||
|
"showLabsSettings": true,
|
||
|
"piwik": {
|
||
|
"url": "https://piwik.riot.im/",
|
||
|
"siteId": 1,
|
||
|
"policyUrl": "https://element.io/cookie-policy"
|
||
|
},
|
||
|
"roomDirectory": {
|
||
|
"servers": [
|
||
|
"matrix.org",
|
||
|
"gitter.im",
|
||
|
"libera.chat"
|
||
|
]
|
||
|
},
|
||
|
"enable_presence_by_hs_url": {
|
||
|
"https://matrix.org": false,
|
||
|
"https://matrix-client.matrix.org": false
|
||
|
},
|
||
|
"terms_and_conditions_links": [
|
||
|
{
|
||
|
"url": "https://element.io/privacy",
|
||
|
"text": "Privacy Policy"
|
||
|
},
|
||
|
{
|
||
|
"url": "https://element.io/cookie-policy",
|
||
|
"text": "Cookie Policy"
|
||
|
}
|
||
|
],
|
||
|
"hostSignup": {
|
||
|
"brand": "Element Home",
|
||
|
"cookiePolicyUrl": "https://element.io/cookie-policy",
|
||
|
"domains": [
|
||
|
"matrix.org"
|
||
|
],
|
||
|
"privacyPolicyUrl": "https://element.io/privacy",
|
||
|
"termsOfServiceUrl": "https://element.io/terms-of-service",
|
||
|
"url": "https://ems.element.io/element-home/in-app-loader"
|
||
|
},
|
||
|
"sentry": {
|
||
|
"dsn": "https://029a0eb289f942508ae0fb17935bd8c5@sentry.matrix.org/6",
|
||
|
"environment": "develop"
|
||
|
},
|
||
|
"posthog": {
|
||
|
"projectApiKey": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
|
||
|
"apiHost": "https://posthog.hss.element.io"
|
||
|
},
|
||
|
"features": {
|
||
|
"feature_spotlight": true
|
||
|
},
|
||
|
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx"
|
||
|
}
|
||
|
|
||
|
Now we are going to add the network to the nginx compose file
|
||
|
|
||
|
nano ~/docker/nginx/docker-compose.yml
|
||
|
|
||
|
Add the following to the correct place
|
||
|
|
||
|
element:
|
||
|
ipv4_address: 172.33.0.20
|
||
|
|
||
|
element:
|
||
|
external: true
|
||
|
name: element
|
||
|
|
||
|
Now we only need to edit the nginx config file
|
||
|
|
||
|
sudo nano /data/nginx/nginx.conf
|
||
|
|
||
|
Add in the following location block between the synapse server
|
||
|
|
||
|
location / {
|
||
|
proxy_pass http://element:80;
|
||
|
proxy_set_header Host $host;
|
||
|
proxy_set_header X-Real-IP $remote_addr;
|
||
|
proxy_set_header X-Forwarded-Proto https;
|
||
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||
|
proxy_set_header X-Forwarded-Host $remote_addr;
|
||
|
}
|
||
|
|
||
|
Now finally restart the nginx container and start the element container.
|
||
|
|
||
|
sudo docker-compose -f ~/docker/nginx/docker-compose.yml up -d
|
||
|
sudo docker-compose -f ~/docker/element/docker-compose.yml up -d
|
||
|
|
||
|
Element should be ready to use :)
|
||
|
|
||
|
# Synapse Admin
|
||
|
WIP!
|