Самостоятельная редакция мессенджера Duga. Ставится на свой сервер одной командой, и дальше связь работает независимо от кого бы то ни было — в том числе от автора Duga.
свой сервер работает без общего интернета docker, одна команда TLS обязателен версия 2.4.0
Duga Остров — это тот же мессенджер Duga, но без сервера автора. Пакет разворачивает на вашей машине четыре службы (шлюз связи, приём вложений, TLS-обёртку и узел радиосети), и с этого момента переписка ходит между вашими людьми напрямую — через ваш сервер, а не через duga.pw.
Если сервер выключить общий интернет — переписка внутри вашей сети продолжает работать: клиенты соединяются с вашим шлюзом напрямую, ему для этого чужие серверы не нужны. Это и есть «островок»: у сети радиосвязи внутри пакета (Reticulum) нет ни одного чужого адреса — ни узлов автора, ни публичных точек входа. Автообнаружение выключено. Кто захочет соединить свой островок с чужим — сделает это сам, зная, что делает.
Не входят: Магазин, Игры и мини-приложения, Кошелёк, Duga Premium и звёзды, подарки, платные каналы, ассистент с языковой моделью и песочница ботов. Это редакция «только связь» — и без извинений: платное и лишнее осталось в основном сервисе.
Звонки (голос и видео) — есть, но по умолчанию выключены и включаются отдельным вопросом при установке. У звонков своя цена: нужен пятый сервис (медиасервер) и два открытых порта наружу (7881/tcp и 7882/udp) — если у собеседника наружу открыт только 443 (строгий фаервол, часть мобильных операторов), звонок не соединится; переписка и вложения при этом работают как обычно.
Это решение автора: платные возможности остаются в основном сервисе duga.pw, а свободная редакция даёт связь — и даёт её целиком, без урезаний в переписке, группах, каналах, вложениях и уведомлениях.
Что нужно: сервер с Linux, docker и docker compose, 2 ГБ памяти,
5 ГБ на диске плюс место под вложения, доступ снаружи на порты 80 и 443.
tar xzf duga-ostrov-2.4.0.tar.gz cd duga-ostrov-2.4.0
sudo ./ustanovit.sh
Он спросит три вещи и дальше всё сделает сам: соберёт образ, создаст ключи, поднимет четыре службы.
| Вопрос | Что отвечать |
|---|---|
| Как открывают мессенджер | 1 — свой домен · 2 — белый IP без домена · 3 — сеть без интернета |
| Порты наружу | 80 и 443, если они свободны |
| Кого пускать | open — всех · invite — по коду · closed — никого |
В конце установщик напечатает одноразовый код владельца установки:
Пример вида кода — настоящий будет другим и появится только один раз.
Если потерялся — он лежит в dannye/gateway/kod_vladeltsa.txt, пока не использован.
Откройте адрес в браузере, нажмите «Создать аккаунт», введите имя и этот код в поле «Код приглашения». Учётная запись станет владельцем установки, а код погаснет — второй раз им воспользоваться нельзя.
В режиме invite:
./priglasit.sh 5 # выдать пять кодов ./priglasit.sh spisok # посмотреть невыданные
Каждый код одноразовый. Человек вводит его при создании учётной записи.
| Способ | Когда выбирать | Что происходит |
|---|---|---|
| Свой домен | у вас есть домен, указывающий на сервер | сертификат получает и продлевает сам Let's Encrypt |
| Белый IP без домена | есть внешний IP, домена нет и покупать не хочется | адрес вида 1-2-3-4.sslip.io — тоже настоящий сертификат Let's Encrypt, бесплатно |
| Полностью офлайн | сети без интернета вообще нет | сервер выпускает сертификат себе сам; установщик печатает его отпечаток SHA-256 |
В офлайн-режиме проверять сертификат цепочкой доверия негде — интернета нет. Тогда браузер
перестанет ругаться, если поставить в доверенные корневой сертификат установки
(dannye/caddy/caddy/pki/authorities/local/root.crt); настольное приложение доверяет
по отпечатку SHA-256, который печатает установщик.
Это не строгость ради строгости — два независимых запрета, и оба не обходятся:
crypto.subtle — браузер даёт странице только по
https://. По простому http:// на чужом адресе этой возможности в браузере
попросту нет, и приложению нечем завести ключи.https, не может подключиться к незашифрованному ws:// — правило
WebView MIXED_CONTENT_NEVER_ALLOW. Открыть по обычному http тоже не
выход: тогда сработает запрет №1.| Где | Что делать |
|---|---|
| Браузер | ничего прописывать не нужно — приложение само берёт адрес того
сайта, с которого открылось. Если открываете общий клиент и хотите указать чужой шлюз — на экране
входа есть поле «Адрес шлюза», формат wss://ваш-адрес/ws |
| Настольное приложение (Windows / macOS) | меню «Сервер» → «Добавить сервер…»,
поле принимает wss://moy-server.ru/ws или, в локальной сети, ws://192.168.1.10:8765.
Кнопка «Сохранить» включится только после успешной проверки связи |
| Android | то же поле адреса шлюза, но обязательно wss:// —
по причине из раздела о TLS выше, ws:// с телефона по обычному интернету WebView не даст |
Пример адреса: wss://duga.moyaset.ru/ws. Если порт нестандартный — с портом:
wss://192.168.1.10:8443/ws.
Скачать duga-ostrov-2.4.0.tar.gz
sha256sum duga-ostrov-2.4.0.tar.gz # должно совпасть с 498f3ba12febfb3ce3f2203f8af336aef4753a1be678eb175bec0f09525227af
Пакет ещё и подписан — публичный ключ лежит прямо внутри архива
(ostrov-podpis-public.asc), отдельно скачивать не нужно. Проверка одной командой (нужен
GnuPG), сразу после скачивания .tar.gz и .sig рядом с ним:
tar xzf duga-ostrov-2.4.0.tar.gz duga-ostrov-2.4.0/ostrov-podpis-public.asc && gpg --import duga-ostrov-2.4.0/ostrov-podpis-public.asc && gpg --verify duga-ostrov-2.4.0.tar.gz.sig duga-ostrov-2.4.0.tar.gz
«Good signature» значит: архив собран владельцем
этого ключа и не подменён по дороге. Ключ подписи (короткий вид) — 65F992E39EF0C398.
| Что | Сколько |
|---|---|
| Операционная система | любой современный Linux |
| Память | от 2 ГБ |
| Диск | от 5 ГБ плюс место под вложения |
| Софт | docker и docker compose |
| Сеть | порты 80 и 443 открыты наружу |
cd duga-ostrov-2.4.0 tar czf ../duga-kopiya-$(date +%F).tar.gz dannye .env # сначала копия! docker compose down # распакуйте новую версию поверх, каталог dannye/ и .env НЕ трогайте docker compose build docker compose up -d docker compose logs -f shlyuz
Данные живут в dannye/, настройки — в .env. Обновление ни то, ни
другое не переписывает. Проверить, что обновление доехало:
docker compose ps
curl -s -o /dev/null -w '%{http_code}\n' https://ваш-адрес/cd duga-ostrov-2.4.0 docker compose stop shlyuz zagruzka # чтобы копия была целостной tar czf ../duga-kopiya-$(date +%F).tar.gz dannye .env docker compose start shlyuz zagruzka
| Каталог | Что там |
|---|---|
dannye/gateway | учётные записи, переписка, группы, каналы, приглашения |
dannye/uploads | вложения |
dannye/nastroyki | ключ владельца установки, ключи уведомлений |
dannye/caddy | сертификаты |
.env | адрес, режим TLS, режим приёма |
dannye/nastroyki/keys
значит, что вы больше не сможете подписать список серверов, и людям придётся вписывать адрес
руками — а не то, что переписка потеряна.Восстановление: распакуйте архив в каталог с пакетом, chown -R 10001:10001 dannye,
затем docker compose up -d.