Tuwunel — это self-hosted сервер Matrix, который можно использовать вместо matrix-synapse, но написан на Rust вместо Python.
Это максимально упрощенный гайд по установке и настройке, основное:
- tuwunel + element web (веб клиент) через докер
- с проксирование через nginx (reverse proxy на один домен)
- wireguard как связка домашнего сервера с внешним миром, гайд по wireguard тут
0. Переменные, которые стоит будет менять под себя (или оставить если ок)#
10.0.3.197- это мой внутренний айпи сервера, меняете на свое, если все делается на одном сервере, то можно127.0.0.1next-way.by- мой домен, по которому происходит доступ, меняете на свой/opt/matrix- мой путь на сервере, где распологаются все файлы для Tuwuneldff315b705ce-CONTAINER IDмоего инстансаjevolk/tuwunel:mainна домашнем сервере, у вас будет другой id
1. Установка и настройка докер#
Если докер старой версии, то может быть сложность при скачивании контейнера (будет ошибка что-то про TAR). Чуть что если у вас старая версия docker, например 20ая, то обновите ее, гайд тут или офф https://docs.docker.com/engine/install/ubuntu/
2. Поднимаем tuwunel + element web#
Создаем файл для docker-compose, например как tuwunel.yaml в папке /opt/matrix. Чтобы не было проблем, сразу поработаем с правами на папку (поменяем владельца на текущего пользователя) командой:
sudo chown -R $USER:$USER /opt/
Далее создаем файл nano /opt/matrix/tuwunel.yaml где необходимо только поменять TUWUNEL_SERVER_NAME и TUWUNEL_REGISTRATION_TOKEN
services:
homeserver:
### If you already built the tuwunel image with 'docker build' or want to use a registry image,
### then you are ready to go.
image: jevolk/tuwunel:main
restart: unless-stopped
ports:
- 8008:6167
volumes:
- /opt/matrix/tuwunel:/var/lib/tuwunel
#- ./tuwunel.toml:/etc/tuwunel.toml
environment:
TUWUNEL_SERVER_NAME: next-way.by # EDIT THIS
TUWUNEL_DATABASE_PATH: /var/lib/tuwunel
TUWUNEL_PORT: 6167
TUWUNEL_MAX_REQUEST_SIZE: 20000000 # in bytes, ~20 MB
TUWUNEL_ALLOW_REGISTRATION: 'true'
TUWUNEL_REGISTRATION_TOKEN: 'change-it' # A registration token is required when registration is allowed.
#TUWUNEL_YES_I_AM_VERY_VERY_SURE_I_WANT_AN_OPEN_REGISTRATION_SERVER_PRONE_TO_ABUSE: 'true'
TUWUNEL_ALLOW_FEDERATION: 'true'
TUWUNEL_TRUSTED_SERVERS: '["matrix.org"]'
#TUWUNEL_LOG: warn,state_res=warn
TUWUNEL_ADDRESS: 0.0.0.0
#TUWUNEL_CONFIG: '/etc/tuwunel.toml' # Uncomment if you mapped config toml above
element-web:
image: vectorim/element-web:latest
restart: unless-stopped
ports:
- 8009:80
volumes:
- /opt/matrix/element_config.json:/app/config.json
depends_on:
- homeserver
2.1. Настройка element-web#
Чтобы element-web заработал для него необходимо создать конфиг nano /opt/matrix/element_config.json, где необходимо поменять для себя значения в m.homeserver
{
"default_server_config": {
"m.homeserver": {
"base_url": "https://next-way.by",
"server_name": "next-way.by"
},
"m.identity_server": {
"base_url": "https://vector.im"
}
},
"disable_custom_urls": false,
"disable_guests": false,
"disable_login_language_selector": false,
"disable_3pid_login": false,
"force_verification": false,
"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"
],
"default_widget_container_height": 280,
"default_country_code": "GB",
"show_labs_settings": false,
"features": {},
"default_federate": true,
"default_theme": "light",
"room_directory": {
"servers": [
"matrix.org"
]
},
"enable_presence_by_hs_url": {
"https://matrix.org": false,
"https://matrix-client.matrix.org": false
},
"setting_defaults": {
"breadcrumbs": true
},
"jitsi": {
"preferred_domain": "meet.element.io"
},
"element_call": {
"url": "https://call.element.io",
"brand": "Element Call"
},
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx"
}
2.2. Сам запуск#
docker compose -f tuwunel.yaml up -d
# -f - указывает на файл
# up -d - запускает в бекграунде
Можем с помощью docker ps проверить что все запустилось без ошибок
3. Настройка nginx#
Необходимо также завести VPS и создать
Aзапись на домен, но это уже выходит за пределы гайда, все действия по настройке nginx происходят на VPS с внешним айпишником и на котором уже установленwireguardдля связи VPS + домашний сервер
Первым делом сгенерируем сертификаты для Let's Encrypt с помощью cerbot (Установку cerbot найдете тут https://certbot.eff.org/instructions/)
certbot --nginx -d next-way.by
После чего нужно будет удалить лишнее, что добавил cerbot, единственное запомните пути к публичному и приватному ключу, мало ли cerbot будет распологать эти ключи в каком-то другом месте чем у меня по гайду.
Создадим конфиг для проксирования на Tuwunel и element web nano /etc/nginx/sites-enabled/next-way.by
upstream tuwunel {
server 10.0.3.197:8008; # IP and port where tuwunel is listening
}
server {
# Client-Server API over HTTPS (port 443)
listen 443 ssl;
listen [::]:443 ssl;
# Matrix Federation over HTTPS (port 8448)
# Only needed if you want to federate with other homeservers
# Don't forget to open port 8448 in your firewall!
listen 8448 ssl;
listen [::]:8448 ssl;
# http2 on;
server_name next-way.by;
# Nginx standard body size is 1MB, which is quite small for media uploads
# Increase this to match the max_request_size in your tuwunel.toml
client_max_body_size 100M;
location / {
proxy_pass http://10.0.3.197:8009;
# Preserve host and scheme - critical for proper Matrix operation
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
# Forward requests to Tuwunel
location ~ ^(/_matrix|/_synapse/client|/_synapse/admin|/_synapse/mas) {
proxy_pass http://10.0.3.197:8008;
# Preserve host and scheme - critical for proper Matrix operation
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
# TLS configuration (Let's Encrypt example using certbot)
ssl_certificate /etc/letsencrypt/live/next-way.by/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/next-way.by/privkey.pem; # managed by Certbot
}
server {
if ($host = next-way.by) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name next-way.by;
return 404; # managed by Certbot
}
У меня конфиг не отрабатывал с
http2 on;, но у вас возможно все заведется, моя проблема скорее всего в том что я менял глобальные настройки ранее. Правило дляelement webвзял из https://habr.com/ru/articles/1028012/.
Проверяем конфиг командой
nginx -t
и если все хорошо, то применяем командой
service nginx reload
Если все хорошо, то при открытии своего домена вы увидите element-web
4. Заведение пользователя#
Т.к. мы запустили Tuwunel в docker, то прямого доступа к cli у нас нет и для этого необходимо запускать cli из под докер контейнера. Для этого на домашнем сервере выполняем docker ps чтобы узнать CONTAINER ID для jevolk/tuwunel:main и создаем юзера с админ правами:
# проверяем что доступ к cli есть
docker exec -it dff315b705ce tuwunel -h
# создаем юзера
docker exec -it dff315b705ce tuwunel --execute "users create_user your_user_name"
После чего вам в ответе придет логин и пароль. Лично у меня были в последующем проблемы с логином, но все это починилось простой перезагрузкой контейнера docker restart dff315b705ce
Послесловие#
Клиент я использую FluffyChat https://matrix.org/ecosystem/clients/fluffychat/, он немного неудобный, но зато поддерживает Multi Account.
После логина вы попадете в комнату (чат) где также будет находиться бот @conduit:next-way.by (у вас будет с вашим доменом), который может выполнять команды cli через команды в чат. Для получения справки можете написать в чате:
!admin --help