Доступна обновленная версия
В наше время стало не приятно вести переписки в обычных мессенджерах, такие как Whatsapp, Viber и пр. им просто нет доверия, ведь если они до сих пор работают, значит никому не мешают и сливают данные для рекламы вам же товаров и услуг.
Раньше была только 1 альтернатива это Jabber. Следующая статья будет посвещена ему в 2019 году, когда решены проблемы с передачей файлов и замороченной конфигурацией.
Сегодня будем ставить альтернативу, которая из коробки по этой инструкции позволит совершать видео конференции, видео звонки, аудио звонки и поддерживает шифрование E2E по алгоритму подобному в мессенжере Signal и работающей федерацией для связи с другими пользователями matrix на других серверах. Отличное решение для android и веб, постоянно развивается и допиливается, но у меня возникли проблемы с клиентами для iOS где я не смог сделать видео звонок и создать коференцию. Именно по этой причине я отказался это этого решения, так как у многих моих iPhone. Плюс сам по себе клиент не такой красивый и удобный как например Conversations для android под jabber. Но сама по себе сеть очень перспективная, и клиенты скоро смогут стать более юзабельными.
В итоге получим:
Сервер Synapse + Веб-клиент на этом же сервере + работающие звонки видео и аудио p2p и конференции на основе jitsi, который встроен в клиенты, а так же работающую федерацию + весь трафик даже до федераций проксируется через Nginx оборачивая то все в TLS шифрованный слой.
Все сделано на Ubuntu 18.04
Обновляем порты
sudo apt update && sudo apt upgrade && reboot
Ставим БД (нужна, что бы вы смогли находить пользователей в БД своей лишь напечатав 2 символа первых его логина, без БД не будет это работать ну и производительность будет ниже).
sudo apt-get install postgresql postgresql-contrib
В конфиге ставим слушать только 127.0.0.1
nano /etc/postgresql/10/main/postgresql.conf
listen_addresses = '127.0.0.1'
Делаем пользака для БД:
su - postgres
createuser --pwprompt synapse_user
Создаем БД
su - postgres
psql
Втыкаем команды ему:
CREATE DATABASE synapse
ENCODING 'UTF8'
LC_COLLATE='C'
LC_CTYPE='C'
template=template0
OWNER synapse_user;
Не забываем пароль, он нужен будет для конфига сервера матрикс.
Добавляем репозиторий matrix
wget -qO - https://matrix.org/packages/debian/repo-key.asc | sudo apt-key add -
sudo add-apt-repository https://matrix.org/packages/debian/
wget -qO - https://matrix.org/packages/debian/repo-key.asc | sudo apt-key add -
sudo add-apt-repository https://matrix.org/packages/debian/
Ставим сервер:
sudo apt install matrix-synapse -y
sudo systemctl start matrix-synapse
sudo systemctl enable matrix-synapse
Проверяем слушает ли 8008 порт
netstat -plntu
Генерируем секретый код:
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
Получаем сохраняем его себе в блокнот, скоро пригодится для конфига matrix-synapse
Правим конфиг сервера:
nano /etc/matrix-synapse/homeserver.yaml
Находим поиском по строке каждый параметр если он закоментин втыкам в том месте, что бы не потерять, там есть мануалы по каждому.
- port: 8008
tls: false
bind_addresses: ['127.0.0.1']
type: http
x_forwarded: true
resources:
- names: [client, webclient]
compress: false
- port: 8449
tls: false
bind_addresses: ['127.0.0.1']
type: http
x_forwarded: true
resources:
- names: [federation]
compress: false
enable_registration: False
registration_shared_secret: "ВАШ КОД"
max_upload_size: 4194304000
web_client_location: "/var/www/html/"
public_baseurl: https://Ваш домен
user_directory:
enabled: true
search_all_users: true
email:
riot_base_url: "https://ваш домен"
trust_identity_server_for_password_resets: true
validation_token_lifetime: 1h
database:
name: psycopg2
args:
user: synapse_user
password: Пароль
database: synapse
host: 127.0.0.1
cp_min: 5
cp_max: 10
SSL
Ставим сертификаты:
sudo apt install letsencrypt -y
certbot certonly --rsa-key-size 2048 --standalone --agree-tos --no-eff-email --email вашемайл -d ваш домен
Ставим Nginx
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
Правим конфиг Nginx
cd /etc/nginx/
nano sites-available/matrix
server {
listen 80;
server_name ваш домен;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name ваш домен;
ssl_certificate /etc/letsencrypt/live/ваш домен/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ваш домен/privkey.pem;
# If you don't wanna serve a site, comment this out
root /var/www/html;
index index.php index.html index.htm;
location /_matrix {
proxy_pass http://127.0.0.1:8008;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 8448 ssl;
server_name ваш домен;
ssl_certificate /etc/letsencrypt/live/ваш домен/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ваш домен/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8449;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Делаем симлинк на конфигурацию виртуального домена
ln -s /etc/nginx/sites-available/matrix /etc/nginx/sites-enabled/
nginx -t
Прописываем в Nginx размер максимальный файлов, которые можно передавать.
nano /etc/nginx/nginx.conf
В раздел http добавляем:
client_max_body_size 5000m;
Рестарт nginx
service nginx restart
Уставим TURN, что бы у клиентов из-за NAT не было проблем с конференциями видео и аудио.
apt install coturn pwgen
Геренируем секретный ключ
pwgen -s 64 1
сохранить код в блокнот.
Правим конфиг
nano /etc/turnserver.conf
Втыкаем
use-auth-secret
static-auth-secret=ВАШ КОД который нагерели шаг назад
realm=ваш домен
# VoIP traffic is all UDP. There is no reason to let users connect to arbitrary TCP endpoints via the relay.
no-tcp-relay
# don't let the relay ever try to connect to private IP address ranges within your network (if any)
# given the turn server is likely behind your firewall, remember to include any privileged public IPs too.
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
# special case the turn server itself so that client->TURN->TURN->client flows work
allowed-peer-ip=10.0.0.1
# consider whether you want to limit the quota of relayed streams per user (or total) to avoid risk of DoS.
user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user.
total-quota=1200
Включаем TURN
nano /etc/default/coturn
Раскоментируйте
TURNSERVER_ENABLED=1
Рестарт
/etc/init.d/coturn restart
Правим конфиг сервера под TURN
nano /etc/matrix-synapse/homeserver.yaml
Втыкаем в конце
turn_uris: [ "turn:вашдомен:3478?transport=udp", "turn:вашдомен:3478?transport=tcp" ]
turn_shared_secret: ваш секретный код который сгенерили шаг назад
turn_user_lifetime: 86400000
turn_allow_guests: True
Рестарт сервера
sudo systemctl restart matrix-synapse
Настраиваем DNS для работы федерации это надо прописать в вашем ДНС сервере в домене создать запись SRV:
_matrix._tcp.вашдомен 3600 IN SRV 10 5 443 вашдомен
После прописания должна быть успешная проверка на
https://matrix.org/federationtester
Впишите свой домен и получить надо УСПЕХ зеленый.
Настраиваем файрвол:
ufw allow ssh
ufw allow http
ufw allow https
ufw allow 3478
ufw allow 8448
Включаем
ufw enable
жмем тут «y»
ufw status
Проверяем.
Регаем первого пользака:
register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml https://ваш домен:443
Устанавливаем веб-клиента:
https://github.com/vector-im/riot-web/releases
Качать TAR.GZ
wget урл архива актуального
Распаковать в /var/www/html
tar -cvzf riot-v1.xxxxxxxx
Дать права пользаку www-data:
chown -R www-data:www-data /var/www/html
В конфиг веб-клиента записать:
{
"default_server_config": {
"m.homeserver": {
"base_url": "https://ваш домен",
"server_name": "ваш домен"
},
"m.identity_server": {
"base_url": "https://vector.im"
}
},
"disable_custom_urls": true,
"disable_guests": true,
"disable_login_language_selector": false,
"disable_3pid_login": true,
"brand": "Matrix",
"integrations_ui_url": "https://scalar.vector.im/",
"integrations_rest_url": "https://scalar.vector.im/api",
"integrations_jitsi_widget_url": "https://scalar.vector.im/api/widgets/jitsi.html",
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
"defaultCountryCode": "RU",
"showLabsSettings": false,
"features": {
"feature_pinning": "labs",
"feature_custom_status": "labs",
"feature_custom_tags": "labs",
"feature_state_counters": "labs",
"default_federate": true,
"default_theme": "dark"
},
"piwik": false,
"enable_presence_by_hs_url": {
"https://ваш домен": false
}
}
У сервака пока нет в реализации удаления старых файлов, которые были переданы пользаками, они хранятся вечно, но место не резиновое, приходится удалять руками, поэтому сделаем скрипт.
cd /etc/cron.daily/
nano deloldfiles
Втыкаем (удаляеет старее 30 дней)
#!/bin/sh
find /var/lib/matrix-synapse/media/ -type f -mtime +30 -exec rm -v {} \;
Делаем файл исполняемым
chmod +x deloldfiles
Вот собственно и все, можно качать клиенты на мобилы Riot.im и пробовать подключаться.
Веб-морда доступна по адресу вашего домена через браузер.
Настройка и включение шифрования делается каждый раз руками в каждой комнате или чате, автоматом не включается.
P.S. Инструкция не содержит то, как включить открытую регистрацию пользователей на сервере и как подключить защиту от спама при регистрации с помощью гугл капчи, если захотите найдете ее в официальной документации по Synapse в гитхабе.