[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80475":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":18,"compositeScore":19,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":8,"pushedAt":8,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":14,"starSnapshotCount":14,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},80475,"olcrtc-manager-panel","BigDaddy3334\u002Folcrtc-manager-panel","BigDaddy3334",null,"Go",111,11,3,24,0,4,13,27,12,54.44,false,"main",true,[],"2026-06-12 04:01:28","# olcrtc-manager-panel\n\nВеб-панель и менеджер процессов для запуска нескольких экземпляров сервера `olcrtc`.\n\nВерсия 2 включает:\n\n- админ-панель по адресу `\u002Fadmin`;\n- настройку пароля при первом запуске;\n- создание, редактирование и удаление клиентов, ротацию комнат\u002Fключей, перезапуск, логи, QR и экспорт подписок;\n- подписки для каждого клиента по адресу `\u002F\u003Cclient-id>\u002F`;\n- метаданные квот трафика в подписках;\n- автоматический учет входящего трафика;\n- блокировку при превышении лимита трафика и по сроку действия;\n- ограничения скорости через отдельный для клиента `network namespace` + `veth`;\n- по одному изолированному процессу `olcrtc` на каждую локацию клиента.\n\n## Требования\n\nМенеджер должен запускаться в Linux с правами root, потому что v2 создает сетевые пространства имен, veth-интерфейсы, маршруты, правила iptables и ограничения `tc` qdisc.\n\nНеобходимые инструменты на сервере:\n\n```sh\nip\niptables\ntc\nsystemctl\n```\n\nФайлы времени выполнения, ожидаемые стандартным systemd unit:\n\n- `\u002Fusr\u002Flocal\u002Fbin\u002Folcrtc-manager`\n- `\u002Fusr\u002Flocal\u002Fbin\u002Folcrtc`, собранный из ветки `master` репозитория `openlibrecommunity\u002Folcrtc`\n- `\u002Fetc\u002Folcrtc-manager\u002Fconfig.json`\n- необязательный `\u002Fetc\u002Folcrtc-manager\u002Fpanel.env`\n\nНе создавайте `panel.env` при чистой установке, если хотите пройти настройку первого запуска. При первом открытии панель попросит создать пароль администратора.\n\n## Сборка\n\nСначала соберите фронтенд-ассеты, затем Go-бинарник, чтобы панель была встроена в менеджер:\n\n```sh\npnpm install\npnpm build\nCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o olcrtc-manager .\u002Fcmd\u002Folcrtc-manager\n```\n\nЕсли вы изменяли только Go-код и `cmd\u002Folcrtc-manager\u002Fweb\u002Fdist` уже существует, достаточно выполнить `go build`.\n\n## Установка\n\n### Установка одной командой\n\nЧистая установка на Debian\u002FUbuntu VPS:\n\n```sh\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FBigDaddy3334\u002Folcrtc-manager-panel\u002Fmain\u002Fscripts\u002Finstall.sh | sudo bash\n```\n\nУстановщик:\n\n- устанавливает необходимые пакеты;\n- устанавливает Go, если системный Go отсутствует или слишком старый;\n- собирает и устанавливает `olcrtc` из ветки `master`;\n- собирает и устанавливает `olcrtc-manager`;\n- создает `\u002Fetc\u002Folcrtc-manager\u002Fconfig.json` без начальных комнат, если файл еще не существует;\n- сохраняет существующие `config` и `panel.env`;\n- устанавливает и запускает `olcrtc-manager.service`.\n\nПо умолчанию сервис слушает `127.0.0.1:8888`. Чтобы привязать панель напрямую к публичному интерфейсу VPS:\n\n```sh\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FBigDaddy3334\u002Folcrtc-manager-panel\u002Fmain\u002Fscripts\u002Finstall.sh | sudo env PANEL_ADDR=0.0.0.0 bash\n```\n\nУ чистой установки нет пароля по умолчанию. Откройте `\u002Fadmin` и создайте пароль администратора при первом запуске. Если вы привязываете панель к `0.0.0.0`, сделайте это сразу или сначала поместите панель за nginx\u002Fфайрвол.\nВ чистой установке также нет комнат; после входа создайте клиентов и вставьте ID комнат вручную.\n\nОпции установщика можно передавать через переменные окружения:\n\n```sh\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FBigDaddy3334\u002Folcrtc-manager-panel\u002Fmain\u002Fscripts\u002Finstall.sh | \\\n  sudo env PANEL_PORT=9443 bash\n```\n\n### Ручная установка\n\nСкопируйте бинарники и конфигурацию:\n\n```sh\nsudo install -m 0755 olcrtc-manager \u002Fusr\u002Flocal\u002Fbin\u002Folcrtc-manager\nsudo install -m 0755 olcrtc \u002Fusr\u002Flocal\u002Fbin\u002Folcrtc\nsudo install -d -m 0755 \u002Fetc\u002Folcrtc-manager\nsudo install -m 0600 config.json \u002Fetc\u002Folcrtc-manager\u002Fconfig.json\n```\n\nУстановите и запустите systemd-сервис:\n\n```sh\nsudo install -m 0644 packaging\u002Fsystemd\u002Folcrtc-manager.service \u002Fetc\u002Fsystemd\u002Fsystem\u002Folcrtc-manager.service\nsudo systemctl daemon-reload\nsudo systemctl enable --now olcrtc-manager\n```\n\nПроверьте статус:\n\n```sh\nsudo systemctl status olcrtc-manager\nsudo journalctl -u olcrtc-manager -f\n```\n\nМенеджер слушает `127.0.0.1:\u003Cconfig.port>`. В примерах по умолчанию используется порт `8888`.\n\n## Первый запуск\n\nОткройте панель:\n\n```text\nhttp:\u002F\u002FSERVER:8888\u002Fadmin\n```\n\nЕсли `\u002Fetc\u002Folcrtc-manager\u002Fpanel.env` не существует или не содержит пароль, панель запускается в режиме первого запуска и предлагает задать пароль администратора.\n\nПосле настройки менеджер записывает:\n\n```sh\n\u002Fetc\u002Folcrtc-manager\u002Fpanel.env\n```\n\nПример содержимого:\n\n```sh\nOLCRTC_MANAGER_USER='admin'\nOLCRTC_MANAGER_PASS='your-password'\n```\n\nПосле этого панель использует cookie-сессии для входа. Позже пароль можно изменить кнопкой `Пароль` в заголовке панели.\n\n## Reverse Proxy\n\nПо умолчанию менеджер привязывается к `127.0.0.1`. Чтобы опубликовать его через nginx:\n\n```nginx\nserver {\n    listen 9443 ssl http2;\n    server_name example.com;\n\n    ssl_certificate \u002Fpath\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fpath\u002Fprivkey.pem;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:8888;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n\nЗатем откройте:\n\n```text\nhttps:\u002F\u002Fexample.com:9443\u002Fadmin\n```\n\n## Конфигурация\n\nМинимальная конфигурация:\n\n```json\n{\n  \"version\": 1,\n  \"name\": \"OlcRTC VPS\",\n  \"port\": 8888,\n  \"refresh\": \"10m\",\n  \"clients\": [\n    {\n      \"client-id\": \"default\",\n      \"refresh\": \"5m\",\n      \"quota\": {\n        \"speed_mbps\": 10,\n        \"traffic_gb\": 100,\n        \"expires_at\": \"2026-12-31\"\n      },\n      \"locations\": [\n        {\n          \"name\": \"Current VPS\",\n          \"endpoint\": {\n            \"room_id\": \"https:\u002F\u002Fmeet1.arbitr.ru\u002Froom\",\n            \"key\": \"e830d36f7be8cfb04a741fc1a5e2ddf8ff04f30985dc070616483f939ad5fafe\"\n          },\n          \"carrier\": \"jitsi\",\n          \"transport\": {\n            \"type\": \"datachannel\"\n          },\n          \"link\": \"direct\",\n          \"data\": \"data\",\n          \"dns\": \"1.1.1.1:53\",\n          \"proxy\": {\n            \"addr\": \"127.0.0.1\",\n            \"port\": 1080,\n            \"user\": \"optional-user\",\n            \"pass\": \"optional-password\"\n          }\n        }\n      ]\n    }\n  ]\n}\n```\n\nПоля квоты:\n\n- `speed_mbps`: ограничение скорости для локации клиента. `0` или отсутствие поля означает отсутствие ограничения.\n- `traffic_gb`: лимит трафика. `0` или отсутствие поля означает отсутствие ограничения.\n- `used_bytes`: автоматически обновляется менеджером.\n- `used_gb`: производное\u002Fустаревшее значение для отображения.\n- `expires_at`: необязательная дата окончания срока действия в формате `YYYY-MM-DD`.\n\nПоля подписки:\n\n- `refresh`: интервал автообновления подписки в формате `5s`, `10m`, `6h` или `1d`.\n- `refresh` на верхнем уровне применяется ко всем подпискам.\n- `refresh` внутри клиента переопределяет глобальное значение только для подписки этого клиента.\n\nСтарый формат с `locations` на верхнем уровне по-прежнему принимается и нормализуется в `clients`.\n\nКонфигурация менеджера остается JSON-файлом для данных панели, квот и подписок. Для каждой запущенной локации менеджер записывает временную runtime-конфигурацию `olcrtc` в YAML и запускает `olcrtc \u003Cconfig.yaml>`.\n\n`carrier` сопоставляется с новым полем `auth.provider` в `olcrtc`. Поддерживаемые провайдеры: `jitsi`, `wbstream` и `telemost`. Для `jitsi` значение `endpoint.room_id` — это полный URL комнаты, например `https:\u002F\u002Fmeet1.arbitr.ru\u002Froom`. Для остальных провайдеров это ID комнаты провайдера. Значение `any` отклоняется.\n\n`proxy` необязателен. Если он задан, менеджер пробрасывает его в runtime YAML как `socks.proxy_addr`, `socks.proxy_port`, `socks.proxy_user` и `socks.proxy_pass`. Это upstream SOCKS5-прокси, через который серверная сторона `olcrtc` будет открывать исходящие подключения; `user`\u002F`pass` используются для RFC 1929-аутентификации.\n\n## Сетевая изоляция и лимиты\n\nДля каждой запущенной локации менеджер создает:\n\n- сетевое пространство имен: `olc-*`;\n- host veth: `olh*`;\n- namespace veth: `oln*`;\n- NAT-правило для исходящего трафика из namespace;\n- DNS-файл в `\u002Fetc\u002Fnetns\u002F\u003Cnamespace>\u002Fresolv.conf`;\n- необязательное ограничение скорости `tc tbf` на обеих сторонах veth.\n\nПолезные проверки:\n\n```sh\nip netns list\nip -br link | grep olh\ntc qdisc show dev olhXXXXXXXX\nip netns exec olc-XXXXXXXX tc qdisc show\niptables -t nat -S POSTROUTING | grep olcrtc-manager-netns\n```\n\nУчет трафика использует `tx_bytes` host veth, что соответствует трафику, отправленному с VPS в сторону namespace клиента. Когда настроенная квота трафика превышена, менеджер останавливает локацию этого клиента. Если увеличить `traffic_gb` выше `used_bytes`, reload\u002Frestart снова запустит ее.\n\n## Подписки\n\nПодписка клиента:\n\n```text\nhttp:\u002F\u002F127.0.0.1:8888\u002Fsub\u002F\u003Cclient-id>\u002F\n```\n\nЕсли задан интервал обновления, подписка включает глобальное поле формата `sub.md`:\n\n```text\n#refresh: 5m\n```\n\nЕсли квота настроена, подписка включает ее метаданные:\n\n```text\n#quota-speed-mbps: 10\n#quota-traffic-gb: 100\n#quota-used-gb: 5\n#quota-used-bytes: 5368709120\n#quota-expires-at: 2026-12-31\n#quota-status: active\n```\n\nВозможные статусы квоты:\n\n- `active`\n- `expired`\n- `traffic_exceeded`\n\n## Перезагрузка\n\nПерезагрузите конфигурацию и примените изменения клиентов без перезапуска неизмененных процессов:\n\n```sh\nsudo systemctl reload olcrtc-manager\n```\n\nИли локально:\n\n```sh\ncurl -X POST http:\u002F\u002F127.0.0.1:8888\u002F-\u002Freload\n```\n\n## API и авторизация панели\n\nВ чистой установке нет пароля по умолчанию. Настройку первого запуска нужно завершить из `\u002Fadmin`.\n\nПосле настройки:\n\n- вход в UI использует cookie-сессию;\n- Basic auth по-прежнему работает для скриптов и curl;\n- пароль можно изменить из панели.\n\n## Вспомогательные скрипты\n\nВ `scripts\u002F` доступны небольшие вспомогательные скрипты для редактирования JSON-конфига:\n\n```sh\nscripts\u002Fadd-user.sh \u002Fetc\u002Folcrtc-manager\u002Fconfig.json alice --from default\nscripts\u002Fmodify-user.sh \u002Fetc\u002Folcrtc-manager\u002Fconfig.json alice --location-name Germany --room-prefix alice-room\nscripts\u002Fdelete-user.sh \u002Fetc\u002Folcrtc-manager\u002Fconfig.json alice\n```\n\nПередайте `--reload http:\u002F\u002F127.0.0.1:8888\u002F-\u002Freload`, чтобы перезагрузить работающий менеджер после сохранения конфигурации.\n","olcrtc-manager-panel 是一个用于管理和运行多个 `olcrtc` 服务器实例的 Web 管理面板。其核心功能包括通过 `\u002Fadmin` 页面进行管理、首次启动时设置管理员密码、创建与编辑客户端、房间\u002F密钥轮换、重启服务、查看日志、生成 QR 码和导出订阅等，并支持每个客户端独立的流量配额、自动流量统计以及基于网络命名空间的速度限制。该项目特别适合需要在 Linux 环境下（需 root 权限）部署并管理多个 `olcrtc` 实例的场景，如提供虚拟专用网络服务。它利用 Go 语言编写，确保了高性能与跨平台能力。",2,"2026-06-11 04:00:54","CREATED_QUERY"]