Trött på övervakning och proprietära appar som skannar alla dina meddelanden? Det här är en guide för hur du installerar din egen Matrix-chattserver, så att du själv är i kontroll över din data och dina meddelanden. Med ände-till-ände kryptering (E2E), open source mjukvara och federering är det du som bestämmer.
Den här guiden går igenom installationen av Synapse (matrix-synapse) som chattmjukvara. Guiden förutsätter att du redan har en server med ett operativsystem installerat samt att du har satt upp brandväggar, SSH-åtkomst och liknande.
Guiden följer den officiella guiden på engelska, så om du vill kan du lika gärna följa den. Det går också att sätta upp allt med Ansible och Docker via matrix-docker-ansible-deploy, som kan ses som enklare, men för att hålla antalet abstraktionslager till ett minimum så kör denna guide barebones med systemd, synapse, postgresql och nginx.
Förhandskrav:
- Grundläggande Linux-kunskaper
- Ett domännamn (t.ex. minserver.se. Enbart en subdomän fungerar också som nödlösning)
- En publik IPv4-adress åt servern med DNS-poster uppsatta (t.ex. matrix.minserver.se och minserver.se, som båda pekar mot serverns IP-adress via A-records)
- En server/VPS med minst några GB fritt lagringsutrymme (som kör t.e.x operativsystemet Ubuntu Server LTS) som har nginx installerat och brandväggar m.m. uppsatt.
- En webbserver installerad på servern (nginx)
- Lite tid
Sammanfattad översikt:
1. Installera operativsystemet på servern
2. Peka om DNSen
3. Sätt upp en användare, SSH och brandväggar m.m.
4. Installera nödvändig mjukvara (matrix-synapse-py3, postgresql, m.fl.)
5. Kör igång allt och testa
1. Installera Synapse
Kör följande kommandon på servern:
sudo apt install -y lsb-release wget apt-transport-https
sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" |
sudo tee /etc/apt/sources.list.d/matrix-org.list
sudo apt update
sudo apt install matrix-synapse-py3Code language: PHP (php)
Detta installerar Synapse (via paketet matrix-synapse-py3). Ange ditt domännamn som du vill använda som ”hemserver-URL” och tryck enter.

Som exempel ovan har jag angett ”minserver.se”, vilket innebär att min användare på min hemserver kommer att ha användarnamn på formen <username>:minserver.se .
I nästa steg får du välja om du vill rapportera anonym statistik. Välj det du vill och tryck enter igen. Nu installeras paketet på servern.

Alla viktiga konfigurationsfiler har nu hamnat i katalogen /etc/matrix-synapse/

- conf.d: innehåller report_stags.yaml samt server_name.yaml. Den första innehåller konfigurationen för om du vill rapportera statistik till utvecklarna och den andra vilket servernamn du angav tidigare.
- homeserver.signing.key är din hemservers signeringsnyckel. Rör inte den.
- homeserver.yaml är den viktigaste. Det är i den som du anger dina serverinställningar och konfigurationer.
- log.yaml: vad som loggas av applikationen.
2. Förbered databasen
För bästa prestanda behövs PostgreSQL installeras. Kör följande kommando,
sudo apt install postgresql
och installera postgresql samt alla föreslagna paket.
Byt användare till postgres och skapa databasen:
sudo su - postgres
createuser --pwprompt synapse_user
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse
Detta skapar databasen synapse med ägaren synapse_user. Genom att lista alla databaser ser vi att synapse har skapats:

Öppna nu homeserver.yaml för redigering,
sudo nano homeserver.yamlCode language: CSS (css)
och ändra ”database:” sektionen så att den ser ut som nedan med ditt lösenord istället för <ditt lösenord>. Spara sedan och stäng filen.

Synapse lyssnar på port 8008 som standard (via localhost). För att du och andra ska kunna nå Synapse från internet behöver du sätta upp en reverse proxy, som nginx.
3. Sätt upp nginx
Sätt upp en konfigurationsfil för din Synapse-tjänst i nginx, t.ex. /etc/nginx/sites-enabled/minserver.se (helst ska du sätta upp filen i /etc/nginx/sites-available/ och sedan länka filen till /sites-enabled/). Den ska se ut ungefär som nedan,
server {
listen 443 ssl;
listen [::]:443 ssl;
# For the federation port
listen 8448 ssl default_server;
listen [::]:8448 ssl default_server;
server_name matrix.minserver.se;
keepalive_requests 10000;
error_log /var/log/nginx/matrix.minserver.se_error.log;
# access_log off;
# error_log off;
access_log /var/log/nginx/matrix.minserver.se_access.log;
ssl_certificate /etc/letsencrypt/live/matrix.minserver.se/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.minserver.se/privkey.pem;
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://127.0.0.1:8008;
proxy_set_header X-Forwarded-For $remote_addr_anon;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
# MAX FILE UPLOAD SIZE, 80 MB DEFAULT
client_max_body_size 80M;
}
location /.well-known/matrix/server {
return 200 '{"m.server": "matrix.minserver.se:8448"}';
add_header Content-Type application/json;
}
location /.well-known/matrix/client {
return 200 '{"im.vector.riot.e2ee": {"default": true},"io.element.e2ee": {"default": true,"secure_backup_required": false,"secure_backup_setup_methods": []},"m.homeserver": {"base_url": "https://matrix.minserver.se"},"im.vector.riot.jitsi": {"preferredDomain": "jitsi.minserver.se"},"org.matrix.msc3575.proxy": {"url": "https://matrix.minserver.se"}}';
add_header Content-Type application/json;
add_header "Access-Control-Allow-Origin" *;
}
}
Code language: PHP (php)
där du har ersatt [matrix.]minserver.se med ditt eget domännamn. Ange ditt SSL-certifkat för domänen under ssl_certificate och ssl_certificate_key. (SSL-certifikat kan fås via t.ex. certbot). Spara och stäng filen.
4. Konfigureringar
4.1. Brandväggsportar
Öppna följande portar i serverns brandvägg:
- 80/tcp: HTTP webserver
- 443/tcp och 443/udp: HTTPS webserver
- 3478/tcp: STUN/TURN över TCP (för coturn)
- 3478/udp: STUN/TURN över UDP (för coturn)
- 5349/tcp: TURN över TCP (för coturn)
- 5349/udp: TURN över UDP (för coturn)
- 8448/tcp och 8448/udp
- 49152-49172/udp: TURN över UDP (för coturn)
För ufw är detta,
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw allow 5349/udp
sudo ufw allow 8448/tcp
sudo ufw allow 8448/udp
sudo ufw allow 49152:49172/udp
4.2. (valfritt) En TURN-server
Följ guiden på https://element-hq.github.io/synapse/latest/turn-howto.html
Behövs ibland för röstsamtal/VOIP.
4.3. (valfritt) Ytterliggare homeserver.yaml konfigureringar
Följande rader är helt valfria, men kan vara bra för ökad säkerhet, mindre loggning och liknande. Se kommentarerna ovanför varje rad för information om vad dom gör.
# If users should be allowed to create new users themselves, i.e. open registration
enable_registration: true
# If registration requires a token
# registration_requires_token: true
# The registration shared secret
# registration_shared_secret:
# D1i2dxcBRyd1al24f17dhQ7B0XaAC7VMmKIZzzaehhgrs5FkfJdOFz87ATj3D3uM
# Number of bcrypt rounds for password hashing, default 12 (2^12)
bcrypt_rounds: 14
# How long redacted messages should be stored in the database
redaction_retention_period: 1s
# How long to track users' last seen time and IPs in the database.
user_ips_max_age: 1s
# Controls whether local media and entries in the remote media cache (media that is downloaded from other homeservers) should be removed under certain conditions, typically for the purpose of saving space.
media_retention:
local_media_lifetime: 90d
remote_media_lifetime: 14d
# If user presence should be enabled (online/offline status, last seen)
presence:
enabled: true
# If set to true, allows any other homeserver to fetch the server's public rooms directory via federation. Defaults to false.
allow_public_rooms_over_federation: false
# Explicitly disable asking for MSISDNs from the registration flow (overrides registrations_require_3pid if MSISDNs are set as required).
disable_msisdn_registration: true
# Enable 3PIDs lookup requests to identity servers from this server. Defaults to true.
enable_3pid_lookup: false
# Whether users can change the third-party IDs associated with their accounts (email address and msisdn).
enable_3pid_changes: false
# Whether to require authentication to retrieve profile data (avatars, display names) of other users through the client API. Defaults to false. Note that profile data is also available via the federation API, unless allow_profile_lookup_over_federation is set to false.
require_auth_for_profile_requests: true
# How to reach the server admin, used in ResourceLimitError. Defaults to none.
admin_contact: 'mailto:root@minserver.se'
# Set to true to enable collection and rendering of performance metrics. Defaults to false.
enable_metrics: false
# When set to true, all subsequent media uploads will be marked as authenticated, and will not be available over legacy unauthenticated media endpoints
enable_authenticated_media: true
Code language: PHP (php)
5. Sätt upp och starta tjänsterna
1. Sätt upp synapse-tjänsten för systemd
Skapa eller öppna filen /usr/lib/systemd/system/matrix-synapse.service och klistra in följande:
[Unit]
Description=Synapse Matrix homeserver
[Service]
Type=notify
User=matrix-synapse
WorkingDirectory=/var/lib/matrix-synapse
ExecStartPre=/opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/ --generate-keys
ExecStart=/opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=3
SyslogIdentifier=matrix-synapse
# The environment file is not shipped by default anymore and the below directive
# is for backwards compatibility only. Please use your homeserver.yaml if
# possible.
EnvironmentFile=-/etc/default/matrix-synapse
[Install]
WantedBy=multi-user.target
Code language: PHP (php)
Spara och stäng filen. Kör sedan följande kommandon:
sudo systemctl daemon-reload
sudo systemctl enable matrix-synapse.serviceCode language: CSS (css)
2. Starta tjänsterna
Nu är det dags att starta (om) tjänsterna som du har konfigurerat och installerat.
sudo systemctl start matrix-synapse
sudo systemctl restart nginx
sudo systemctl enable matrix-synapse nginx postgresql
Får du inga felmeddelanden ska tjänsterna nu vara uppe och snurra.
6. Sätt upp en användare
Gå till /etc/matrix-synapse/ och kör följande kommando:
sudo register_new_matrix_user -c homeserver.yamlCode language: CSS (css)
till exempel,
sudo register_new_matrix_user -c homeserver.yaml
New user localpart [root]: admin
Password:
Confirm password:
Make admin [no]: yes
Success!Code language: CSS (css)
Nu ska du ha en användare kallad admin som är administratör!
7. Logga in!
Öppna valfri Matrix-app i mobil, webbläsare eller på datorns, till exempel Element-appen, eller en offentlig Element Web-instans på https://app.element.io/
När du loggar in måste du byta från standardservern matrix.org till din egna hemserver som du skapade, t.ex. minserver.se;



och logga in med administratörskontot du precis skapade.
Nu ska du vara ansluten till din egen krypterade chattserver!
8. Extra tips
- När du har lyckats logga in och verifiera att allt fungerar så måste du antingen stänga av öppen registrering (genom att sätta enable_registration: false i homeserver.yaml och sedan starta om matrix-synapse.service), eller kräva t.ex. en registreringstoken vid skapande av nytt konto, annars kommer du snart få spam-registreringar som missbrukar din hemserver, vilket kan leda till att du blir blockerad av andra hemservrar.
- För att enklare hantera konton och registreringstokens är synapse-admin eller synapse-admin av etkecc bra verktyg.
- Vill du hosta en webb-baserad Matrix-klient som du kommer åt överallt utan att behöva ha ett program installerat i mobilen/datorn kan du installera t.ex. Element Web eller Cinny.
- Glöm inte att sätta upp backuper! Både för PostgreSQL-databasen men även för uppladdade filer i /var/lib/matrix-synapse/, dina konfig-filer i /etc/matrix-synapse samt nginx-filer i /etc/nginx/sites-enabled!
- Använd https://matrixrooms.info/ för att enkelt hitta offentliga rum!
- Gå inte med i för stora rum (>10k användare), det kan ta ett tag eller krascha din server om du har för klen server 😉
Det var allt! Frågor? Behöver du hjälp? Kontakta mig eller skicka en kommentar nedan, alternativt be om hjälp i Synapse Admins-gruppen #synapse:matrix.org 🙂
Matrix-loggan och Matrix-varumärket ägs av The Matrix.org Foundation
Version 0.1 – guiden uppdateras kontinuerligt
