Веб-панель и менеджер процессов для запуска нескольких экземпляров сервера olcrtc.
Версия 2 включает:
- админ-панель по адресу
/admin; - авторизацию администратора через сгенерированный или заданный пароль;
- создание, редактирование и удаление клиентов, ротацию комнат/ключей, перезапуск, логи, QR и экспорт подписок;
- подписки для каждого клиента по адресу
/<client-id>/; - метаданные квот трафика в подписках;
- автоматический учет входящего трафика;
- блокировку при превышении лимита трафика и по сроку действия;
- ограничения скорости через отдельный для клиента
network namespace+veth; - по одному изолированному процессу
olcrtcна каждую локацию клиента.
Менеджер должен запускаться в Linux с правами root, потому что v2 создает сетевые пространства имен, veth-интерфейсы, маршруты, правила iptables и ограничения tc qdisc.
Необходимые инструменты на сервере:
ip
iptables
tc
systemctlФайлы времени выполнения, ожидаемые стандартным systemd unit:
/usr/local/bin/olcrtc-manager/usr/local/bin/olcrtc, собранный из веткиmasterрепозиторияopenlibrecommunity/olcrtc/etc/olcrtc-manager/config.json- необязательный
/etc/olcrtc-manager/panel.env
Установщик создает panel.env сам и выводит сгенерированные логин/пароль. При ручной установке можно не создавать panel.env; тогда при первом открытии панель попросит создать пароль администратора.
Сначала соберите фронтенд-ассеты, затем Go-бинарник, чтобы панель была встроена в менеджер:
pnpm install
pnpm build
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o olcrtc-manager ./cmd/olcrtc-managerЕсли вы изменяли только Go-код и cmd/olcrtc-manager/web/dist уже существует, достаточно выполнить go build.
Чистая установка на Debian/Ubuntu VPS:
curl -fsSL https://raw.githubusercontent.com/BigDaddy3334/olcrtc-manager-panel/main/scripts/install.sh | sudo bashУстановщик:
- устанавливает необходимые пакеты;
- устанавливает Go, если системный Go отсутствует или слишком старый;
- собирает и устанавливает
olcrtcиз веткиmaster; - собирает и устанавливает
olcrtc-manager; - создает
/etc/olcrtc-manager/config.jsonбез начальных комнат, если файл еще не существует; - сохраняет существующие
configиpanel.env; - устанавливает и запускает
olcrtc-manager.service.
По умолчанию сервис слушает 0.0.0.0:<random-port>, включает HTTPS с самоподписанным сертификатом и сразу доступен по внешнему IP VPS. Чтобы оставить панель только на localhost для nginx/reverse proxy:
curl -fsSL https://raw.githubusercontent.com/BigDaddy3334/olcrtc-manager-panel/main/scripts/install.sh | sudo env PANEL_ADDR=127.0.0.1 bashУстановщик создает случайные логин и пароль администратора и выводит их в конце установки. Откройте выведенный установщиком URL и войдите с этими данными. Если панель опубликована напрямую, смените пароль после входа и ограничьте доступ файрволом при необходимости. Браузер может предупредить о самоподписанном сертификате; это нормально для установки без домена и Let's Encrypt. В чистой установке также нет комнат; после входа создайте клиентов и вставьте ID комнат вручную.
Опции установщика можно передавать через переменные окружения:
curl -fsSL https://raw.githubusercontent.com/BigDaddy3334/olcrtc-manager-panel/main/scripts/install.sh | \
sudo env PANEL_PORT=9443 bashСкопируйте бинарники и конфигурацию:
sudo install -m 0755 olcrtc-manager /usr/local/bin/olcrtc-manager
sudo install -m 0755 olcrtc /usr/local/bin/olcrtc
sudo install -d -m 0755 /etc/olcrtc-manager
sudo install -m 0600 config.json /etc/olcrtc-manager/config.jsonУстановите и запустите systemd-сервис:
sudo install -m 0644 packaging/systemd/olcrtc-manager.service /etc/systemd/system/olcrtc-manager.service
sudo systemctl daemon-reload
sudo systemctl enable --now olcrtc-managerПроверьте статус:
sudo systemctl status olcrtc-manager
sudo journalctl -u olcrtc-manager -fПри установке через скрипт менеджер слушает 0.0.0.0:<config.port> по HTTPS. При ручном запуске без OLCRTC_MANAGER_ADDR бинарь слушает 127.0.0.1:<config.port> по HTTP, если не заданы OLCRTC_MANAGER_TLS_CERT и OLCRTC_MANAGER_TLS_KEY. В примерах по умолчанию используется порт 8888.
Откройте панель:
https://SERVER:8888/admin
При установке через скрипт логин и пароль уже записаны в /etc/olcrtc-manager/panel.env и выведены в консоль установщика. Если при ручной установке panel.env не существует или не содержит пароль, панель запускается в режиме первого запуска и предлагает задать пароль администратора.
После настройки менеджер записывает:
/etc/olcrtc-manager/panel.envПример содержимого:
OLCRTC_MANAGER_USER='admin'
OLCRTC_MANAGER_PASS='your-password'После этого панель использует cookie-сессии для входа. Позже пароль можно изменить кнопкой Пароль в заголовке панели.
Для nginx/reverse proxy установите панель локально с PANEL_ADDR=127.0.0.1 и проксируйте на неё:
server {
listen 9443 ssl http2;
server_name example.com;
ssl_certificate /path/fullchain.pem;
ssl_certificate_key /path/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Затем откройте:
https://example.com:9443/admin
Минимальная конфигурация:
{
"version": 1,
"name": "OlcRTC VPS",
"port": 8888,
"refresh": "10m",
"clients": [
{
"client-id": "default",
"refresh": "5m",
"quota": {
"speed_mbps": 10,
"traffic_gb": 100,
"expires_at": "2026-12-31"
},
"locations": [
{
"name": "Current VPS",
"endpoint": {
"room_id": "https://meet.handyweb.org/room",
"key": "e830d36f7be8cfb04a741fc1a5e2ddf8ff04f30985dc070616483f939ad5fafe"
},
"carrier": "jitsi",
"transport": {
"type": "datachannel"
},
"link": "direct",
"data": "data",
"dns": "1.1.1.1:53",
"proxy": {
"addr": "127.0.0.1",
"port": 1080,
"user": "optional-user",
"pass": "optional-password"
}
}
]
}
]
}Поля квоты:
speed_mbps: ограничение скорости для локации клиента.0или отсутствие поля означает отсутствие ограничения.traffic_gb: лимит трафика.0или отсутствие поля означает отсутствие ограничения.used_bytes: автоматически обновляется менеджером.used_gb: производное/устаревшее значение для отображения.expires_at: необязательная дата окончания срока действия в форматеYYYY-MM-DD.
Поля подписки:
refresh: интервал автообновления подписки в формате5s,10m,6hили1d.refreshна верхнем уровне применяется ко всем подпискам.refreshвнутри клиента переопределяет глобальное значение только для подписки этого клиента.
Старый формат с locations на верхнем уровне по-прежнему принимается и нормализуется в clients.
Конфигурация менеджера остается JSON-файлом для данных панели, квот и подписок. Для каждой запущенной локации менеджер записывает временную runtime-конфигурацию olcrtc в YAML и запускает olcrtc <config.yaml>.
carrier сопоставляется с новым полем auth.provider в olcrtc. Поддерживаемые провайдеры: jitsi, wbstream и telemost. Для jitsi значение endpoint.room_id — это полный URL комнаты, например https://meet.handyweb.org/room. Для остальных провайдеров это ID комнаты провайдера. Значение any отклоняется.
proxy необязателен. Если он задан, менеджер пробрасывает его в runtime YAML как socks.proxy_addr, socks.proxy_port, socks.proxy_user и socks.proxy_pass. Это upstream SOCKS5-прокси, через который серверная сторона olcrtc будет открывать исходящие подключения; user/pass используются для RFC 1929-аутентификации.
Для каждой запущенной локации менеджер создает:
- сетевое пространство имен:
olc-*; - host veth:
olh*; - namespace veth:
oln*; - NAT-правило для исходящего трафика из namespace;
- DNS-файл в
/etc/netns/<namespace>/resolv.conf; - необязательное ограничение скорости
tc tbfна обеих сторонах veth.
Полезные проверки:
ip netns list
ip -br link | grep olh
tc qdisc show dev olhXXXXXXXX
ip netns exec olc-XXXXXXXX tc qdisc show
iptables -t nat -S POSTROUTING | grep olcrtc-manager-netnsУчет трафика использует tx_bytes host veth, что соответствует трафику, отправленному с VPS в сторону namespace клиента. Когда настроенная квота трафика превышена, менеджер останавливает локацию этого клиента. Если увеличить traffic_gb выше used_bytes, reload/restart снова запустит ее.
Подписка клиента:
http://127.0.0.1:8888/sub/<client-id>/
Если задан интервал обновления, подписка включает глобальное поле формата sub.md:
#refresh: 5m
Если квота настроена, подписка включает ее метаданные:
#quota-speed-mbps: 10
#quota-traffic-gb: 100
#quota-used-gb: 5
#quota-used-bytes: 5368709120
#quota-expires-at: 2026-12-31
#quota-status: active
Возможные статусы квоты:
activeexpiredtraffic_exceeded
Перезагрузите конфигурацию и примените изменения клиентов без перезапуска неизмененных процессов:
sudo systemctl reload olcrtc-managerИли локально:
curl -X POST http://127.0.0.1:8888/-/reloadПри установке через скрипт используйте логин и пароль, которые установщик вывел в конце. При ручной установке без panel.env настройку первого запуска нужно завершить из /admin.
После настройки:
- вход в UI использует cookie-сессию;
- Basic auth по-прежнему работает для скриптов и curl;
- пароль можно изменить из панели.
В scripts/ доступны небольшие вспомогательные скрипты для редактирования JSON-конфига:
scripts/add-user.sh /etc/olcrtc-manager/config.json alice --from default
scripts/modify-user.sh /etc/olcrtc-manager/config.json alice --location-name Germany --room-prefix alice-room
scripts/delete-user.sh /etc/olcrtc-manager/config.json aliceadd-user.sh без --room генерирует только Jitsi-комнаты. Для wbstream и telemost комнату нужно создать вручную у провайдера и передать её через --room.
Передайте --reload http://127.0.0.1:8888/-/reload, чтобы перезагрузить работающий менеджер после сохранения конфигурации.