Свій захищений месенджер безкоштовно: Matrix-сервер Conduit на Oracle Cloud і міст із Telegram

Цей посібник для тих, хто хоче свій захищений месенджер на власному сервері: повний контроль над даними й доступом, спілкування з друзями та родиною, своя частина децентралізованої мережі Matrix — і все це безкоштовно. Ми піднімемо Matrix-сервер Conduit на безкоштовній віртуальній машині Oracle Cloud, підключимо до нього Element на комп'ютері й телефоні та встановимо міст, який забирає ваші розмови з Telegram у той самий застосунок.

Що вийде в кінці: сервер на вашому домені на кшталт matrix.example.org, ваш обліковий запис @admin:matrix.example.org, кімнати й простори для друзів із наскрізним шифруванням, за бажанням — федерація з matrix.org та іншими серверами, і бот-міст @telegrambot:matrix.example.org, через який чати Telegram з'являються в Element.

Знадобиться 30–60 хвилин і базове знайомство з терміналом. Основну роботу виконують три готові скрипти: установка Conduit, міст і збір діагностики. Платити не потрібно: машина — з Oracle Always Free, домен — безкоштовний, сертифікат — від Let's Encrypt, програми — відкриті.

Факти звірено в жовтні 2026 року: Conduit v0.10.15 (реліз від 30.09.2026), міст mautrix-telegram v26.09 (тег v0.2609.0 від 16.09.2026, версія на Go). Скриншоти консолі Oracle зроблено в серпні 2025 року — інтерфейс міг трохи змінитися, але кроки ті самі.

Matrix — відкритий протокол обміну повідомленнями, а не сервіс однієї компанії. Як з електронною поштою: у кожного може бути свій сервер, і сервери спілкуються між собою.

  • Контроль і доступ. Облікові записи, історія, файли й ключі зберігаються на вашій машині. Ви вирішуєте, хто може зареєструватися, і не залежите від того, чи заблокують або закриють чужий сервіс.
  • Кімнати й простори. Кімната — чат будь-якого розміру; особисте листування теж кімната. Простори групують кімнати в «спільноту» з ієрархією та запрошеннями: наприклад, «Родина» з кімнатами «Загальне», «Фото», «Поїздки».
  • Наскрізне шифрування. У приватних кімнатах Element шифрування (Olm/Megolm) вмикається за замовчуванням: сервер зберігає повідомлення, але не читає їхній текст. Пристрої підтверджуються перехресним підписом, ключі зберігаються в зашифрованій резервній копії.
  • Федерація. Якщо її увімкнути, сервер спілкується з matrix.org та іншими серверами Matrix. Або навпаки — сервер ізольований лише для своїх.
  • Клієнти для всього. Element працює на Windows, macOS, Linux і в браузері; Element X — на Android та iOS. Є й інші клієнти: FluffyChat, Cinny, Nheko.
  • Мости. До Matrix можна підключити Telegram, WhatsApp, Signal, Discord та інші мережі, щоб збирати листування в одному застосунку. У цьому посібнику — міст із Telegram.

Чому Conduit. Це легкий Matrix-сервер на Rust: один статичний бінарний файл і вбудована база (RocksDB або SQLite), без PostgreSQL, Python чи Docker. Розробники позиціонують його як сервер для родини й друзів, який запускається навіть на Raspberry Pi. Ліцензія — Apache-2.0.

Чесно про статус. Розробники позначають Conduit як beta: він бере участь у більшості кімнат, але частини функцій бракує (наприклад, порівняння емодзі для підтвердження шифрування через федерацію, вихідні сповіщення про прочитання, набір тексту та присутність через федерацію). З грудня 2025 по вересень 2026 вийшло шість релізів, і чотири з них виправляли серйозні вразливості — зокрема v0.10.14 від 26.09.2026, де обліковий запис міг отримати доступ до чужих облікових записів на тому самому сервері. Тому головне правило свого сервера: оновлюйте Conduit одразу після виходу релізу (як — у розділі про оновлення).

Який софт використовується

Element

Element — безкоштовний настільний месенджер для Windows на відкритому протоколі Matrix: наскрізне шифрування, кімнати, дзвінки й вибір власного сервера.

Дзвінки та відеозв'язок 199 МБ
клієнт

Element X

Element X — поточний застосунок Element для Android: месенджер на відкритому протоколі Matrix з наскрізним шифруванням, групами, дзвінками й вибором сервера.

Месенджери
клієнт

Claude

Claude для Windows — офіційний настільний застосунок Anthropic для роботи зі штучним інтелектом: чат, файли, браузер і підключення сервісів через MCP. Є безкоштовний план із лімітами.

Штучний інтелект 281 МБ
помічник

ChatGPT

ChatGPT для Windows — офіційний застосунок OpenAI з Microsoft Store, що поєднує чат із режимами роботи й програмування Codex. Базовий доступ безкоштовний із лімітами.

Штучний інтелект 901 МБ
помічник

DeepSeek

DeepSeek — безкоштовний чат-бот зі штучним інтелектом, який працює в браузері: відповідає на питання, пише тексти й код. Потрібна реєстрація.

Штучний інтелект
помічник
ІнструментРольПосилання
Conduit Matrix-сервер (Rust, один бінарник, вбудована база RocksDB) Сайт Документація GitLab
mautrix-telegram міст Telegram ↔ Matrix (Go, bridgev2) Сайт GitHub
nginx зворотний проксі та HTTPS перед Conduit Сайт GitHub
Certbot сертифікати Let's Encrypt з автооновленням Сайт GitHub
Oracle Cloud Always Free безкоштовна ARM-машина Ampere A1 (2 OCPU, 12 ГБ) Сайт Документація
Element Web веб-клієнт app.element.io для першого входу Сайт GitHub
Element X iOS клієнт для iPhone (картки в каталозі немає) Сайт GitHub
FreeDNS (afraid.org) безкоштовний піддомен, якщо свого домену немає Сайт
Matrix.org специфікація протоколу, federation tester Сайт Документація

Що знадобиться

ЩоДе взятиНавіщо
Акаунт Oracle Cloudoracle.com/cloud/freeБезкоштовна віртуальна машина Ampere A1
Банківська карткаВаша дебетова або кредитнаЛише верифікація; передплачені та віртуальні картки Oracle не приймає
ДоменFreeDNS (безкоштовно) або власнийАдреса сервера й частина кожного ідентифікатора користувача
SSH-клієнтВбудований у Windows 10/11, macOS, LinuxПідключення до сервера
Обліковий запис TelegramУже є, і він увійшов хоча б в одному застосункуКлючі API та вхід через міст
Час30–60 хвилинПлюс до години очікування DNS, якщо не пощастить

Два обмеження заздалегідь. Ім'я сервера (server_name) після першого запуску змінити не можна — воно входить у кожен ідентифікатор, тож оберіть домен надовго. І Oracle може забрати машину, що простоює: якщо за 7 днів завантаження процесора (95-й перцентиль), мережі й пам'яті (для A1) нижче 20 %. Сервер для кількох людей під цей поріг потрапляє — робіть резервні копії.

Крок 1. Безкоштовна віртуальна машина в Oracle Cloud

Зареєструйтеся в Oracle Cloud. Під час реєстрації обирається домашній регіон — змінити його потім не можна, і безкоштовні машини створюються лише в ньому. Один безкоштовний акаунт дозволено на одну людину.

Що дає Always Free для нашої задачі (за офіційною сторінкою Oracle, жовтень 2026):

  • Ampere A1 (ARM): 1500 OCPU-годин і 9000 ГБ-годин на місяць, тобто 2 OCPU і 12 ГБ пам'яті постійно — одна машина або дві по 1 OCPU.
  • AMD: до двох машин VM.Standard.E2.1.Micro з 1/8 OCPU та 1 ГБ пам'яті.
  • Диск: 200 ГБ сумарно на завантажувальні та блокові томи, 5 бекапів томів.
  • Трафік: 10 ТБ вихідного на місяць.

Для Conduit і моста обираємо Ampere A1 — ресурсів із великим запасом. Нижче — усі скриншоти створення машини по порядку, а далі кожен крок окремо.

Створення інстансу та вибір образу

У консолі відкрийте Compute → Instances і натисніть Create instance. Задайте ім'я машини, у блоці Placement залиште запропонований availability domain. У розділі Image and shape за замовчуванням стоїть Oracle Linux — натисніть Change image, оберіть плитку Ubuntu і в списку образів Canonical Ubuntu візьміть версію для своєї архітектури: для Ampere — збірку aarch64, для AMD — звичайну x86_64. Скрипти посібника працюють на Ubuntu 22.04 та 24.04. Підтвердіть кнопкою Select image.

Список образів Canonical Ubuntu 20.04, 22.04, 24.04 з позначками aarch64 і x86
5. Для Ampere беріть збірку aarch64, для AMD — x86_64, потім натисніть Select image.

Форма машини: Ampere A1.Flex і ліміти

У блоці Shape натисніть Change shape, оберіть тип Virtual machine, серію Ampere і форму VM.Standard.A1.Flex з позначкою «Always Free-eligible». Повзунками задайте кількість OCPU та пам'яті. Офіційний безкоштовний ліміт сьогодні — 2 OCPU і 12 ГБ на акаунт; для Conduit і моста вистачить і 1 OCPU з 6 ГБ, якщо хочете залишити ресурси для другої машини.

Форма VM.Standard.A1.Flex з повзунками кількості OCPU і обсягу пам'яті
8. Повзунками задайте OCPU і пам'ять у межах безкоштовного ліміту.

Якщо перевищити ліміт, консоль із затримкою покаже попередження Service limits status. У серпні 2025 року авторові вдалося створити машину з 3 OCPU і 18 ГБ (при 3 / 20 ГБ з'являлося попередження), але зараз офіційно діє 2 OCPU / 12 ГБ. Перевіряйте ліміт на сторінці Oracle і не вірте старим інструкціям із 4 OCPU / 24 ГБ.

Попередження Service limits status при перевищенні лімітів Always Free
9. Таке попередження означає, що ресурсів забагато, — зменште OCPU або пам'ять.

Натисніть Select shape, потім Next. На кроці Security параметр Shielded instance можна залишити вимкненим.

Мережа і SSH-ключі

На кроці Networking усе можна залишити за замовчуванням: Oracle створить мережу (VCN) з публічною підмережею, а машина отримає публічну адресу IPv4. Найважливіше на цьому кроці — блок Add SSH keys. Оберіть Generate a key pair for me і натисніть обидві кнопки: Download private key і Download public key. Ключ показується один раз — без нього ви не зайдете на сервер. Збережіть обидва файли в надійне місце. Якщо у вас уже є свій SSH-ключ, можна вставити його публічну частину.

Крок Networking, блок Add SSH keys: кнопки Download private key і Download public key
11. Завантажте обидва ключі зараз — Oracle показує їх лише один раз.

Диск і створення

На кроці Storage завантажувальний том за замовчуванням близько 47 ГБ. Автор матеріалу радить 90–100 ГБ на машину — так у межах безкоштовних 200 ГБ поміститься дві машини, а медіафайли чатів не впруться в стелю. Шифрування під час передачі залиште увімкненим.

Крок Storage: розмір завантажувального тому та шифрування під час передачі
12. Збільште завантажувальний том до 90–100 ГБ у межах безкоштовних 200 ГБ.

На останньому кроці Review перевірте, що публічна IPv4-адреса буде призначена (Public IPv4: Yes), ключі додано, розмір диска правильний, і натисніть Create. Коли статус машини зміниться на Running, скопіюйте її Public IP — далі в прикладах це 203.0.113.10.

Крок Review: Public IPv4 Yes, SSH-ключі, диск і кнопка Create
13. Перевірте зведення й натисніть Create.

Out of host capacity. Якщо при створенні з'являється це повідомлення, у регіоні тимчасово закінчилися машини Ampere. Спробуйте інший availability domain або повторіть спробу пізніше — це не помилка вашого акаунта.

Відкриваємо порти в Security List

В Oracle два файрволи: iptables усередині машини (їх відкриє скрипт) і Security List хмарної мережі — лише в консолі. Без нього ззовні до сервера ніхто не достукається; це найчастіша причина «все налаштував, а не працює».

  1. Відкрийте Networking → Virtual Cloud Networks і свою VCN.
  2. Перейдіть у Subnets, відкрийте підмережу, далі Security Lists → Default Security List.
  3. Натисніть Add Ingress Rules і додайте правила з джерелом 0.0.0.0/0, протокол TCP: порт 80 (перевірка Let's Encrypt), порт 443 (HTTPS і Matrix API), порт 8448 (федерація; необов'язково, пояснення — у кроці 3).

Підключення по SSH і оновлення системи

На своєму комп'ютері відкрийте термінал (у Windows — PowerShell) і підключіться, вказавши шлях до завантаженого приватного ключа. Користувач в образах Ubuntu від Oracle — ubuntu.

bash
ssh -i key.pem [email protected]

На Linux і macOS SSH відмовиться від ключа з надто відкритими правами — виправте їх командою chmod 600 key.pem. Після входу оновіть систему:

bash
sudo apt update && sudo apt upgrade -y

Не вмикайте UFW. Oracle офіційно не рекомендує UFW на своєму образі Ubuntu: він може порушити обов'язкові правила файрвола (зокрема для дисків iSCSI), і машина перестане завантажуватися. Порти відкриваються правилами iptables — їх додасть скрипт установлення. Не видаляйте наявні правила образу.

Крок 2. Домен і DNS

Matrix вимагає HTTPS із дійсним сертифікатом, а сертифікат видається на домен — тож без доменного імені не обійтися. Домен стане ім'ям сервера й частиною кожного ідентифікатора, тому коротший — зручніший.

Варіант A: безкоштовний піддомен FreeDNS

На freedns.afraid.org зареєструйтеся й підтвердіть e-mail. У розділі Subdomains натисніть Add і заповніть: Type — A, Subdomain — наприклад matrix, Domain — один із загальнодоступних доменів зі списку (вийде адреса вигляду matrix.mooo.com), Destination — публічна IP-адреса вашої машини. Збережіть запис.

Варіант B: свій домен

У панелі реєстратора або DNS-провайдера додайте A-запис: ім'я matrix (або @ для кореня домену), значення — IP машини, TTL — 300 або Auto. У прикладах далі домен — matrix.example.org; підставляйте свій.

Перевірка DNS

Запис оновлюється від кількох хвилин до години. Перевірте зі свого комп'ютера або із сервера:

bash
dig matrix.example.org +short

Команда має повернути IP вашої машини, наприклад 203.0.113.10. Якщо відповідь порожня — зачекайте. Скрипт установлення теж перевірить DNS і, якщо домен ще не працює, запропонує тимчасовий варіант без сертифіката.

FreeDNS і Cloudflare

Піддомен FreeDNS не вийде додати в Cloudflare як окрему зону: базові домени FreeDNS не входять до Public Suffix List, а Cloudflare потрібне керування NS-записами всього домену. Для цього посібника Cloudflare не потрібен — nginx і Let's Encrypt на самій машині працюють із будь-яким доменом. Якщо ж вам потрібен проксі Cloudflare (приховування IP, захист від DDoS), купіть недорогий власний домен і підключіть його до Cloudflare. У цьому разі пам'ятайте, що безкоштовний план Cloudflare не проксує порт 8448 — федерація має йти через делегування на 443, яке скрипт уже налаштовує.

Крок 3. Встановлюємо Conduit одним скриптом

Скрипт setup-conduit.sh робить усе, що зазвичай розписують на кілька сторінок: завантажує Conduit, створює користувача, конфіг і службу systemd, ставить nginx і отримує сертифікат Let's Encrypt, відкриває порти в iptables і перевіряє результат. Працює на Ubuntu 22.04 і 24.04, на процесорах aarch64 і x86_64.

  • setup-conduit.sh

    Встановлення Conduit: бінарник, systemd, nginx, Let's Encrypt, файрвол

    скрипт bash · 0,1 МБ · SHA-256 f68f41490bc9…
    Скачати

Як завантажити скрипт на сервер

Найпростіше — скопіювати файл зі свого комп'ютера командою scp (виконується на комп'ютері, не на сервері):

bash
scp -i key.pem setup-conduit.sh [email protected]:~/

Інший спосіб — створити файл прямо на сервері в редакторі nano, вставити вміст скрипта, зберегти (Ctrl+O, Enter) і вийти (Ctrl+X). Якщо в мінімальному образі nano немає, встановіть його: sudo apt install -y nano.

bash
nano ~/setup-conduit.sh

Потім зробіть скрипт виконуваним і запустіть від імені адміністратора:

bash
chmod +x ~/setup-conduit.sh
bash
sudo ~/setup-conduit.sh

Що питає скрипт

Усі параметри задаються відповідями в терміналі. Значення за замовчуванням показано у квадратних дужках — натисніть Enter, щоб його прийняти. Повідомлення скрипта кольорові й мають позначки [INFO], [WARN], [ERROR].

  1. Спосіб установки. 1 — завантажити готовий статичний бінарний файл Conduit із GitLab (рекомендовано); 2 — використати свій бінарний файл, якщо ви зібрали Conduit самі (скрипт попросить шлях до нього).
  2. Домен (FQDN). Введіть точно той домен, який налаштували в кроці 2, наприклад matrix.example.org. Він стане server_name і змінити його потім не можна.
  3. Registration token. Це «пароль на реєстрацію»: без нього ніхто не створить обліковий запис на вашому сервері. Скрипт пропонує випадковий — прийміть його або введіть свій. Запишіть токен: він знадобиться вам і друзям.
  4. Увімкнути федерацію? [y/N]. N — ізольований сервер лише для ваших користувачів; y — спілкування з matrix.org та іншими серверами. Федерацію можна увімкнути пізніше (крок 6).

Далі — зведення параметрів, підтвердження і e-mail для Let's Encrypt (за замовчуванням admin@ плюс домен). Сюди приходять повідомлення про сертифікат, тож краще вказати справжню адресу, наприклад [email protected].

Що робить скрипт

  • Ставить утиліти (wget, curl, dnsutils, openssl) і кладе Conduit у /usr/local/bin/matrix-conduit.
  • Створює користувача conduit, каталог даних /var/lib/matrix-conduit/, конфіг /etc/matrix-conduit/conduit.toml і службу conduit.service, запускає її й перевіряє API на 127.0.0.1:6167.
  • Ставить nginx і certbot, відкриває в iptables порти 80 і 443 (і 8448 з федерацією) вище за правило reject образу Oracle й зберігає їх (netfilter-persistent save).
  • Звіряє DNS домену із зовнішньою IP машини, отримує сертифікат і пише повний конфіг nginx.
  • Перевіряє служби, API локально і через домен, .well-known, таймер certbot.timer; параметри зберігає в /etc/matrix-conduit/.install-params для скрипта моста.

Робота займає 2–5 хвилин.

Якщо DNS ще не готовий. Скрипт помітить, що домен не вказує на сервер, і запропонує поки налаштувати nginx лише по HTTP. Погодьтеся, дочекайтеся, поки dig покаже правильну адресу, і отримайте сертифікат однією командою, наведеною нижче. Без HTTPS клієнти Matrix до сервера не підключаться, тому цей крок не пропускайте.

bash
sudo certbot --nginx -d matrix.example.org

Що всередині: конфіг, служба, nginx

Знати це не обов'язково, але корисно, коли щось доведеться змінити вручну. Ключові рядки конфігу Conduit:

/etc/matrix-conduit/conduit.toml toml
[global]
server_name = "matrix.example.org"
database_backend = "rocksdb"
database_path = "/var/lib/matrix-conduit/"
address = "127.0.0.1"
port = 6167
max_request_size = 20_000_000
allow_registration = true
registration_token = "<registration_token>"
allow_federation = false
trusted_servers = ["matrix.org"]

[global.well_known]
client = "https://matrix.example.org"
server = "matrix.example.org:443"

Conduit слухає лише локальну адресу 127.0.0.1, а назовні його виставляє nginx. trusted_servers — сервери, яким Conduit довіряє при отриманні ключів інших серверів; документація попереджає, що вони дуже привілейовані, тож додавайте туди лише ті, яким довіряєте повністю. Блок [global.well_known] змушує Conduit самого віддавати адреси /.well-known/matrix/*, і тоді федерація працює через звичайний порт 443.

Служба systemd читає конфіг зі змінної оточення CONDUIT_CONFIG і працює від окремого користувача з обмеженнями. Приблизно так:

/etc/systemd/system/conduit.service ini
[Unit]
Description=Conduit Matrix Server
After=network.target

[Service]
Environment="CONDUIT_CONFIG=/etc/matrix-conduit/conduit.toml"
User=conduit
Group=conduit
ExecStart=/usr/local/bin/matrix-conduit
Restart=always
ProtectSystem=strict
ReadWritePaths=/var/lib/matrix-conduit
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

У конфігу nginx головне — передати Conduit адреси /_matrix/ і /.well-known/matrix/, підняти ліміт розміру запиту (у nginx за замовчуванням лише 1 МБ, а файли в чатах більші) і не склеювати подвійні скісні риски в адресах:

/etc/nginx/sites-available/matrix nginx
server {
    listen 443 ssl http2;
    server_name matrix.example.org;

    ssl_certificate /etc/letsencrypt/live/matrix.example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.example.org/privkey.pem;

    client_max_body_size 20M;
    merge_slashes off;

    location /_matrix/ {
        proxy_pass http://127.0.0.1:6167;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_read_timeout 300;
    }

    location /.well-known/matrix/ {
        proxy_pass http://127.0.0.1:6167;
        proxy_set_header Host $host;
    }
}

Перевірка

Після скрипта перевірте сервер із будь-якого комп'ютера. Перша команда має повернути JSON зі списком версій API Matrix, друга — адресу вашого сервера для клієнтів:

bash
curl https://matrix.example.org/_matrix/client/versions
bash
curl https://matrix.example.org/.well-known/matrix/client

Якщо локально API відповідає, а через домен — ні, причина майже завжди одна з двох: DNS ще не оновився або в Security List не відкрито порти 80 і 443.

Порт 8448. Сервери Matrix традиційно спілкуються через 8448, але скрипт налаштовує /.well-known/matrix/server з адресою на 443, тож інші сервери прийдуть туди, і 8448 не обов'язковий.

Крок 4. Перший користувач і admin-кімната

Створимо обліковий запис адміністратора. Для першого входу зручно скористатися веб-версією Element за адресою app.element.io або програмою Element для Windows.

  1. На екрані входу оберіть створення облікового запису (Create account).
  2. Біля назви сервера натисніть Edit (змінити домашній сервер) і введіть https://matrix.example.org.
  3. Введіть ім'я користувача, наприклад admin, і надійний пароль.
  4. Коли Element попросить registration token, вставте токен, який показав скрипт.

Перший зареєстрований користувач стає адміністратором: Conduit автоматично додає його в кімнату адміністраторів #admins, де працює службовий бот @conduit:matrix.example.org. Звертайтеся до бота на початку повідомлення:

text
@conduit:matrix.example.org: help

Основні команди admin-кімнати:

КомандаЩо робить
helpСписок усіх команд
list-usersКористувачі сервера
disable-registrationВимкнути реєстрацію без перезапуску
enable-registrationУвімкнути реєстрацію знову
register-appserviceЗареєструвати міст (крок 5)
list-appservicesЗареєстровані мости
unregister-appservice <id>Видалити реєстрацію моста

Порада. Коли друзі зареєструються, вимкніть реєстрацію командою disable-registration. Токен — це захист від сторонніх, але закрита реєстрація надійніша. Для нового друга її можна тимчасово увімкнути знову.

Крок 5. Міст із Telegram

Міст — це окрема програма, яка з одного боку входить у Telegram як ще один ваш пристрій, а з іншого — під'єднується до Matrix-сервера як appservice (службовий застосунок із розширеними правами). Кожен чат Telegram стає кімнатою Matrix, співрозмовники з Telegram — «віртуальними» користувачами вашого сервера, а ваші відповіді з Element ідуть у Telegram від вашого імені.

Ми ставимо mautrix-telegram на Go. Стара версія на Python більше не підтримується (останній реліз — v0.15.3), а нова вийшла у квітні 2026 року й оновлюється щомісяця. Інструкції з pip, venv, командами !tg і файлом реєстрації в каталозі сервера — про стару версію: Conduit не читає файли appservice з диска, міст реєструється лише через admin-кімнату.

Нова версія підтримує особисті чати, групи, канали, медіа, реакції, редагування й видалення, теми (topics) у групах та імпорт стікерів і емодзі. Ваші повідомлення з Telegram-клієнта в Matrix виглядатимуть як ваші.

Ключі API Telegram

Мосту потрібні власні ключі застосунку Telegram — api_id і api_hash. Токен бота від BotFather для цієї схеми не потрібен.

  1. Відкрийте my.telegram.org/apps і увійдіть за номером телефону — код підтвердження прийде в застосунок Telegram.
  2. Відкрийте API development tools і заповніть форму: назва застосунку та коротке ім'я — будь-які (наприклад, Matrix Bridge і matrixbridge), платформа — Other.
  3. Натисніть Create application і збережіть два значення: api_id (число) і api_hash (рядок із літер і цифр).

Нікому не передавайте ці ключі й не публікуйте їх: вони прив'язані до вашого облікового запису Telegram.

Запуск скрипта моста

Скрипт setup-bridge.sh запускається лише після успішної установки Conduit: він перевіряє, що сервер працює, і бере домен із збережених параметрів. Завантажте й запустіть його так само, як перший.

  • setup-bridge.sh

    Міст Telegram (mautrix-telegram на Go): бінарник, конфіг, реєстрація, systemd

    скрипт bash · 0,1 МБ · SHA-256 ab98664194f7…
    Скачати
bash
scp -i key.pem setup-bridge.sh [email protected]:~/
bash
chmod +x ~/setup-bridge.sh
bash
sudo ~/setup-bridge.sh

Скрипт запитає:

  • Домен — за замовчуванням підставляється з параметрів установки Conduit, достатньо натиснути Enter.
  • Matrix ID адміністратора — за замовчуванням @admin:matrix.example.org; якщо ви реєструвалися під іншим іменем, впишіть своє.
  • Telegram api_id і api_hash — значення з my.telegram.org.
  • Порт моста — за замовчуванням 29317; міст слухає його лише локально.

Після підтвердження скрипт:

  • завантажує з GitHub останній реліз mautrix-telegram під вашу архітектуру й звіряє контрольну суму з sha256sums.txt;
  • створює користувача mautrix-telegram і каталог /opt/mautrix-telegram/ (бінарний файл, config.yaml, registration.yaml, база SQLite);
  • виставляє в конфігу адресу Conduit http://127.0.0.1:6167, домен, бота telegrambot, ключі Telegram, права (ваш сервер — користувачі, ваш ID — адміністратор), дозвіл на шифровані кімнати та relay для адміністратора;
  • генерує реєстрацію appservice і чекає, поки ви зареєструєте міст у Conduit;
  • створює службу mautrix-telegram.service, запускає її й перевіряє порт.

Робота займає 1–3 хвилини, не рахуючи реєстрації.

Реєстрація моста в admin-кімнаті

У певний момент скрипт виведе вміст registration.yaml і готове повідомлення для admin-кімнати та чекатиме відповіді. Не закривайте термінал. Відкрийте Element, зайдіть у кімнату адміністраторів і надішліть одним повідомленням: перший рядок — команда, далі — YAML у блоці коду між рядками з трьома зворотними лапками. Element перетворить їх на блок коду, і Conduit прочитає реєстрацію. Виглядає це приблизно так:

text
@conduit:matrix.example.org: register-appservice
```
id: telegram
url: http://127.0.0.1:29317
as_token: <as_token>
hs_token: <hs_token>
sender_localpart: <sender_localpart>
rate_limited: false
namespaces:
  users:
  - regex: ^@telegrambot:matrix\.example\.org$
    exclusive: true
  - regex: ^@telegram_.*:matrix\.example\.org$
    exclusive: true
```

Копіюйте текст зі свого терміналу, а не з цього прикладу. Токени as_token і hs_token генеруються на вашому сервері й мають точно збігатися з тими, що записані в конфігу моста. Не пересилайте це повідомлення нікуди, крім admin-кімнати свого сервера.

Перевірте, що реєстрація пройшла:

text
@conduit:matrix.example.org: list-appservices

Бот має відповісти, що зареєстровано один appservice — telegram. Перезапускати Conduit після реєстрації не потрібно. Поверніться в термінал і відповідайте y — скрипт запустить міст. Стан служби можна перевірити так:

bash
sudo systemctl status mautrix-telegram

Якщо помилилися з реєстрацією, видаліть її командою unregister-appservice telegram і надішліть повідомлення знову. Якщо міст запущено, але він не відповідає, перезапустіть Conduit, поки міст працює: sudo systemctl restart conduit.

Вхід у Telegram через міст

В Element почніть особистий чат із ботом @telegrambot:matrix.example.org (кнопка нового повідомлення, введіть повний ідентифікатор бота). Список команд бот покаже на help. Увійти можна двома способами.

За номером телефону. Надішліть боту команду з вашим номером у міжнародному форматі:

text
login phone +380XXXXXXXXX

Код підтвердження прийде не SMS, а повідомленням в іншому застосунку Telegram, де ви вже увійшли, — тому на момент входу тримайте під рукою телефон або комп'ютер із Telegram. Надішліть код боту. Якщо в Telegram увімкнено двоетапну перевірку, бот попросить хмарний пароль — надішліть його в ту саму кімнату.

За QR-кодом. Надішліть боту:

text
login qr

Бот покаже QR-код. У застосунку Telegram на телефоні відкрийте Settings → Devices → Link Desktop Device (в українському інтерфейсі — налаштування, розділ пристроїв, підключення пристрою) і відскануйте код.

Після входу чати Telegram з'являться в Element як кімнати із запрошеннями від моста. Новий обліковий запис Telegram через міст не зареєструвати — лише в офіційному застосунку. Вхід ботом (login bot з токеном BotFather) теж є, але чати тоді синхронізуються лише після повідомлення боту.

Друзі без Telegram: режим relay

Щоб друг без Telegram міг писати в Telegram-групу, є режим relay: команда set-relay у мостовій кімнаті робить ваш обліковий запис ретранслятором, і повідомлення інших учасників ідуть у Telegram через нього. Команда bridge пов'язує наявний чат Telegram з наявною кімнатою Matrix. Скрипт дозволяє relay для адміністратора; старий relaybot Python-версії не переноситься. Подробиці — у документації моста.

Шифрування і приватність

Скрипт дозволяє мосту працювати в зашифрованих кімнатах (encryption.allow: true): з боку Matrix листування мостових кімнат можна шифрувати так само, як звичайних. Щоб шифрування вмикалося в усіх нових мостових кімнатах автоматично, у config.yaml є параметр encryption.default.

Межі варто розуміти: міст — це ще один ваш пристрій Telegram. Сесія зберігається в базі моста на вашому сервері, а повідомлення, як і раніше, проходять через сервери Telegram. Захищайте сервер (SSH лише за ключем, оновлення, обмежений доступ до /opt/mautrix-telegram/). Сесію моста видно в Telegram у списку пристроїв — там її можна завершити.

Якщо міст не стартує або бот мовчить — розділ «Якщо щось не працює» і скрипт collect-logs.sh.

Крок 6. Клієнти: Element на ПК і Element X на Android

Сервер працює — тепер підключимо постійні застосунки.

  • Комп'ютер: Element для Windows (є версії для macOS і Linux, а також веб-версія app.element.io).
  • Android: Element X для Android — новий клієнт на Rust SDK, що використовує sliding sync; Conduit підтримує його з версії 0.10.0.
  • iPhone: Element X для iOS з App Store.

При вході в кожному застосунку змініть сервер на matrix.example.org і увійдіть під своїм обліковим записом.

Ключі шифрування

Під час першого входу Element запропонує налаштувати безпечне резервне копіювання ключів і перехресний підпис. Не пропускайте цей крок: збережіть ключ відновлення (security key) у менеджері паролів або іншому надійному місці. Без нього на новому пристрої старі зашифровані повідомлення не розшифруються. Нові пристрої підтверджуйте з уже підтвердженого — сканом QR-коду або порівнянням емодзі.

Простір і кімнати для друзів

  1. Створіть простір (кнопка «+» біля списку просторів), дайте йому назву, оберіть приватний.
  2. Додайте в простір кімнати: загальний чат, кімнату для фото, для планів. Приватні кімнати Element шифрує за замовчуванням.
  3. Друзям надішліть адресу сервера та registration token, щоб вони зареєструвалися, а потім запросіть їх у простір за ідентифікатором @ім'я:matrix.example.org.
  4. Коли всі зареєструвалися, вимкніть реєстрацію в admin-кімнаті.

Федерація: увімкнути або вимкнути

Якщо під час установки ви відповіли N, сервер ізольований: писати можна лише користувачам вашого сервера. Щоб друзі з matrix.org та інших серверів могли спілкуватися з вами, увімкніть федерацію в конфігу й перезапустіть Conduit:

/etc/matrix-conduit/conduit.toml toml
allow_federation = true
bash
sudo systemctl restart conduit

Перевірте федерацію на federationtester.matrix.org: введіть свій домен — сервіс покаже, чи можуть інші сервери до вас достукатися. Вимикається федерація так само — значенням false і перезапуском.

Якщо щось не працює

Найшвидший шлях до причини — подивитися логи. Щоб не збирати їх вручну, є скрипт collect-logs.sh.

  • collect-logs.sh

    Збір логів і діагностики в архів із замаскованими секретами

    скрипт bash · 0,1 МБ · SHA-256 799fc2b5342d…
    Скачати
bash
chmod +x ~/collect-logs.sh
bash
sudo ~/collect-logs.sh

Скрипт складає в архів conduit-diag-<дата>.tar.gz: інформацію про систему, стан служб conduit, mautrix-telegram і nginx, логи journalctl (по 500 рядків і окремо Conduit за останню годину), конфіги, конфіг nginx і unit-файли служб, відкриті порти й правила iptables, перевірку DNS, сертифіката і .well-known, розміри даних і версії Conduit, моста, nginx і certbot. Усередині є README з описом файлів. Секрети в конфігах (registration_token, as_token, hs_token, api_hash, api_id) замінюються на ***MASKED***. Завантажте архів на свій комп'ютер:

bash
scp -i key.pem [email protected]:~/conduit-diag-*.tar.gz .

Розбір логів із ШІ-помічником

Архів зручно розібрати з чат-ботом: Claude, ChatGPT або DeepSeek. Готовий промпт нижче пояснює помічнику устрій сервера й просить спершу назвати ймовірну причину, а потім давати команди перевірки по одній, без «перевстановіть усе». Замініть {{ПРОБЛЕМА}} на опис симптому й додайте архів.

Промпт для ШІ-помічника
# Допоможи знайти причину збою Matrix-сервера Conduit

Ти — досвідчений адміністратор Linux, який добре знає Matrix, сервер Conduit, міст mautrix-telegram, nginx, certbot і Oracle Cloud.

## Як влаштовано мій сервер
- Ubuntu 22.04/24.04 на безкоштовній машині Oracle Cloud Always Free (Ampere A1, aarch64 або AMD x86_64); файрвол — Security List в Oracle та iptables на машині (UFW не використовується).
- Conduit: бінарний файл `/usr/local/bin/matrix-conduit`, конфіг `/etc/matrix-conduit/conduit.toml`, дані `/var/lib/matrix-conduit/`, служба `conduit.service`, слухає `127.0.0.1:6167`.
- nginx із сертифікатом Let's Encrypt (certbot) проксує `/_matrix/` і `/.well-known/matrix/` на Conduit; конфіг `/etc/nginx/sites-available/matrix`.
- Міст mautrix-telegram на Go (bridgev2): `/opt/mautrix-telegram/` (бінарний файл, `config.yaml`, `registration.yaml`, база SQLite), служба `mautrix-telegram.service`, слухає `127.0.0.1:29317`. Appservice зареєстровано через admin-кімнату Conduit командою `register-appservice`.

## Що я надсилаю
Архів `conduit-diag-<дата>.tar.gz` від скрипта `collect-logs.sh` (або вставлені фрагменти логів): системна інформація, статус служб, журнали journalctl, конфіги, порти й iptables, DNS, SSL, `.well-known`, версії. Секрети в архіві замасковані як `***MASKED***`.

## Проблема
{{ПРОБЛЕМА}}

## Що мені потрібно
1. Спершу за логами назви найімовірнішу причину і рядки, які на неї вказують.
2. Потім дай мінімальні команди перевірки та виправлення — по одній, з поясненням, що кожна має показати. Дочекайся мого результату, перш ніж давати наступну.
3. Не пропонуй перевстановлювати систему чи сервер, поки не перевірено простіші причини.
4. Не проси паролі, токени, ключі API чи коди входу — працюй із замаскованими даними.

> Нагадування для того, хто надсилає: не вставляйте токени та паролі; в архіві вони замасковані, але перегляньте файли перед відправкою.

Скопіюйте текст у Claude, ChatGPT або DeepSeek разом з архівом логів чи їх фрагментом; токени й паролі не вставляйте. · prompt-debug.uk.md

Спершу перегляньте архів самі. Скрипт маскує відомі токени й ключі, але логи можуть містити ваш домен, ідентифікатори користувачів і назви кімнат. Розпакуйте архів, перегляньте файли й видаліть те, чим не хочете ділитися. Ніколи не вставляйте в чат паролі, токени чи код входу Telegram.

Типові помилки

СимптомІмовірна причинаЩо зробити
Element: «Can't connect to homeserver»Адресу введено без https://, закритий порт 443 або не оновився DNSВідкрийте в браузері https://matrix.example.org/_matrix/client/versions; перевірте Security List і dig
Certbot не отримує сертифікатDNS вказує не на сервер, закритий порт 80, nginx не запущенийПеревірте dig, Security List, systemctl status nginx; спробуйте certbot --nginx -d matrix.example.org --dry-run
Conduit не запускається, «database_backend is required»У конфігу немає параметра базиДодайте database_backend = "rocksdb" у [global]
«Permission denied» при запуску ConduitБінарний файл не виконуванийsudo chmod +x /usr/local/bin/matrix-conduit
«Address already in use» на 6167Порт зайнятий іншим процесомsudo ss -tlnp і зупиніть зайвий процес
«Config error: unknown field»Застарілий формат конфігуБлок well-known має бути секцією [global.well_known]
Міст: M_UNKNOWN_TOKENТокени в реєстрації Conduit і в конфігу моста не збігаютьсяunregister-appservice telegram і зареєструйте актуальний registration.yaml заново
Міст: «connection refused» до 127.0.0.1:6167Conduit не запущенийsudo systemctl start conduit, потім логи Conduit
Бот @telegrambot не відповідаєМіст не запущений або не зареєстрованийlist-appservices, systemctl status mautrix-telegram; перезапустіть Conduit при запущеному мості
Код входу Telegram не приходитьКод надсилається в інший застосунок Telegram, а не SMSВідкрийте Telegram на іншому пристрої або увійдіть через login qr

Корисні команди

Логи в реальному часі (вихід — Ctrl+C):

bash
sudo journalctl -u conduit -f
bash
sudo journalctl -u mautrix-telegram -f

Останні 50 рядків логу без прокрутки:

bash
sudo journalctl -u conduit -n 50 --no-pager

Хто які порти слухає (мають бути 6167, 29317, 80, 443):

bash
sudo ss -tlnp

Перезапуск служб:

bash
sudo systemctl restart conduit
bash
sudo systemctl restart mautrix-telegram
bash
sudo systemctl restart nginx

Оновлення та резервні копії

Оновлення Conduit

Підпишіться на релізи репозиторію famedly/conduit на GitLab (сповіщення про нові релізи) — оновлення безпеки виходять регулярно. Оновлення — це заміна бінарного файлу: зупиніть службу, завантажте свіжу стабільну збірку для своєї архітектури й запустіть знову.

bash
sudo systemctl stop conduit
bash
sudo wget -O /usr/local/bin/matrix-conduit "https://gitlab.com/api/v4/projects/famedly%2Fconduit/jobs/artifacts/master/raw/$(uname -m)-unknown-linux-musl?job=artifacts"
bash
sudo chmod +x /usr/local/bin/matrix-conduit && sudo systemctl start conduit

Команда uname -m підставить aarch64 або x86_64. Міграції бази Conduit виконує автоматично під час запуску. Після оновлення перевірте systemctl status conduit і відповідь /_matrix/client/versions.

Оновлення моста

Міст оновлюється так само — заміною бінарного файлу й перезапуском. Релізи виходять щомісяця; список — на сторінці github.com/mautrix/telegram/releases. Для Ampere потрібен файл mautrix-telegram-arm64, для x86 — mautrix-telegram-amd64.

bash
sudo systemctl stop mautrix-telegram
bash
sudo wget -O /opt/mautrix-telegram/mautrix-telegram https://github.com/mautrix/telegram/releases/latest/download/mautrix-telegram-arm64
bash
sudo chmod +x /opt/mautrix-telegram/mautrix-telegram && sudo systemctl start mautrix-telegram

Перед оновленням моста прочитайте опис релізу: іноді в конфігу з'являються нові параметри.

Резервні копії

Усе цінне — у трьох місцях: дані Conduit (/var/lib/matrix-conduit/), конфіги (/etc/matrix-conduit/) і каталог моста (/opt/mautrix-telegram/). Найпростіша копія — архів при зупинених службах:

bash
sudo systemctl stop mautrix-telegram conduit
bash
sudo tar czf ~/matrix-backup-$(date +%F).tar.gz /var/lib/matrix-conduit /etc/matrix-conduit /opt/mautrix-telegram
bash
sudo systemctl start conduit mautrix-telegram

Архів скачайте на свій комп'ютер через scp — копія на тому самому сервері не врятує, якщо машину буде вилучено. Додатково Oracle дає безкоштовно 5 резервних копій томів: у консолі відкрийте завантажувальний том машини й створіть backup. Пам'ятайте, що в архіві є токени й сесія Telegram — зберігайте його як пароль.

Для захисту самої машини варто поставити fail2ban (захист SSH від підбору) і автоматичні оновлення безпеки unattended-upgrades.

Файли до інструкції

  • setup-conduit.sh

    Встановлення Conduit: бінарник, systemd, nginx, Let's Encrypt, файрвол

    скрипт bash · 0,1 МБ · SHA-256 f68f41490bc9…
    Скачати
  • setup-bridge.sh

    Міст Telegram (mautrix-telegram на Go): бінарник, конфіг, реєстрація, systemd

    скрипт bash · 0,1 МБ · SHA-256 ab98664194f7…
    Скачати
  • collect-logs.sh

    Збір логів і діагностики в архів із замаскованими секретами

    скрипт bash · 0,1 МБ · SHA-256 799fc2b5342d…
    Скачати
  • prompt-debug.uk.md

    Промпт-помічник для Claude / ChatGPT / DeepSeek: розбір логів

    промпт · 0,1 МБ · SHA-256 6777d0cc5a64…
    Скачати
  • prompt-debug.ru.md

    Промпт-помічник для Claude / ChatGPT / DeepSeek: розбір логів (рос.)

    промпт · 0,1 МБ · SHA-256 fe42fbaa7d3c…
    Скачати

Скрипти перед запуском перегляньте: вони виконуються від root. Промпти — текст для ШІ-помічника, без секретів.

Альтернативи

Conduit — не єдиний легкий сервер Matrix. У нього є форки з тим самим принципом установки (один бінарний файл, вбудована база):

Зверніть увагу: у форків команди admin-кімнати пишуться через підкреслення (register_appservice, list_appservices), а не через дефіс, як у Conduit. Сам conduwuit більше не підтримується.

Synapse (Python) і Dendrite (Go) потужніші, але важчі — на машині AMD з 1 ГБ це відчутно:

КритерійSynapseDendriteConduit
МоваPythonGoRust
Пам'ять у спокої (за спостереженнями автора матеріалу)300–500 МБ100–200 МБ15–50 МБ
База данихЗовнішній PostgreSQLЗовнішній PostgreSQLВбудована RocksDB або SQLite
ЗалежностіPython, PostgreSQLPostgreSQLОдин бінарний файл
Машина AMD 1 ГБНе вистачаєНа межіПрацює

На Ampere A1 з 12 ГБ поміститься будь-який, але Conduit простіший в обслуговуванні: немає окремої бази, яку треба оновлювати й копіювати.

Джерела

Запитання й відповіді

Це справді безкоштовно?
Так. Машина Ampere A1 входить у безкоштовний рівень Oracle Always Free (2 OCPU і 12 ГБ пам'яті), домен можна взяти на FreeDNS, сертифікат видає Let's Encrypt, а Conduit, mautrix-telegram і Element — відкрите програмне забезпечення. Картка потрібна лише для верифікації акаунта Oracle.
Conduit у статусі beta — чи можна ним користуватися?
Розробники позначають Conduit як beta: він бере участь у більшості кімнат, але частини функцій федерації бракує. За 2025–2026 роки вийшло кілька релізів із виправленням серйозних вразливостей, тому оновлюйте Conduit одразу після кожного релізу.
Чи можна потім змінити домен сервера?
Ні. Ім'я сервера (server_name) входить у кожен ідентифікатор користувача й кімнати, тож після першого запуску його не змінити. Оберіть домен, яким користуватиметеся довго.
Чи може Oracle забрати безкоштовну машину?
Може, якщо вона простоює: за 7 днів завантаження процесора (95-й перцентиль), мережі й пам'яті нижче 20 %. Невеликий Matrix-сервер під цей поріг потрапляє, тому регулярно робіть резервні копії даних і конфігів.
Чи бачить сервер мої повідомлення з Telegram?
Міст працює як ще один ваш пристрій Telegram: сесія зберігається на вашому сервері, а повідомлення, як і раніше, проходять через Telegram. У Matrix мостові кімнати можна шифрувати наскрізно, якщо в конфігу моста дозволено шифрування.
Чи потрібен порт 8448?
Не обов'язково. Скрипт налаштовує делегування через /.well-known/matrix/server на порт 443, тож інші сервери федерації під'єднуються через 443. Порт 8448 можна відкрити додатково.
Чи можна обійтися без домену?
Ні: клієнти Matrix вимагають HTTPS із дійсним сертифікатом, а він видається на доменне ім'я. Безкоштовний піддомен можна отримати на FreeDNS.
Скільки людей потягне такий сервер?
Офіційних вимог до заліза в документації Conduit немає; розробники позиціонують його як сервер для родини й друзів, який працює навіть на Raspberry Pi. Машина Ampere A1 дає ресурси з великим запасом для такого масштабу.

Опубліковано 11 жовтня 2026, оновлено 11 жовтня 2026

Розділ: Дзвінки та відеозв'язок