PCAtelegram_web
Отдельный проект PCAtelegram_web: MTProxy на базе telemt, Telegram-бот, локальная web-admin панель, статистика, backup/restore, шаблоны сайта.
Что умеет
- Web-admin для управления MTProxy без ручного редактирования TOML.
- Создание, отключение, удаление ключей и лимит IP на пользователя.
- Выбор публичного порта и сайта маскировки FakeTLS.
- Автоустановка
telemt, если прокси-ядро отсутствует при сохранении маршрута. - WARP / WARP+ настройки, backup/restore, статистика трафика.
- Session cookie переживает restart web-admin; auto-refresh не сбрасывает поля во время ввода.
Установка
На сервере под root:
curl -fsSL https://raw.githubusercontent.com/andrey271192/PCAtelegram_web/main/bootstrap.sh | bash
Если репозиторий private, первый curl тоже должен получить GitHub token:
curl -fsSL -H "Authorization: Bearer $GITHUB_TOKEN" \
https://raw.githubusercontent.com/andrey271192/PCAtelegram_web/main/bootstrap.sh | \
GITHUB_TOKEN="$GITHUB_TOKEN" bash
После установки команда доступна как:
pcatelegram_web
Локальная проверка без GitHub
rsync -a ./ root@SERVER:/opt/pcatelegram_web/
ssh root@SERVER 'chmod +x /opt/pcatelegram_web/install.sh /opt/pcatelegram_web/install_pcatelegram_web_bot.sh /opt/pcatelegram_web/lib/*.sh && ln -sf /opt/pcatelegram_web/install.sh /usr/local/bin/pcatelegram_web && pcatelegram_web'
Состав
| Путь | Назначение |
|---|---|
bootstrap.sh |
загружает файлы проекта в /opt/pcatelegram_web и запускает меню |
install.sh |
основное CLI-меню PCAtelegram_web |
install_pcatelegram_web_bot.sh |
отдельная установка Telegram-бота |
lib/ |
общие функции, telemt, nginx/site, stats, backup, i18n |
pcatelegram_web-bot/ |
Python Telegram bot |
admin-web/ |
локальная web-admin панель |
templates_catalog.json |
каталог HTML-шаблонов |
SECURITY.md |
правила по секретам, web-admin, backup |
CHANGELOG.md |
история изменений |
ROADMAP.md |
ближайшие улучшения |
Переменные
| Переменная | По умолчанию | Описание |
|---|---|---|
PCATELEGRAM_WEB_BASE |
https://raw.githubusercontent.com/andrey271192/PCAtelegram_web/main |
база загрузки файлов |
PCATELEGRAM_WEB_INSTALL_DIR |
/opt/pcatelegram_web |
путь установки |
GITHUB_TOKEN / GH_TOKEN |
пусто | token для private GitHub raw downloads |
PCATELEGRAM_WEB_ADMIN_HOST |
0.0.0.0 |
bind web-admin |
PCATELEGRAM_WEB_ADMIN_PORT |
1984 |
port web-admin |
PCATELEGRAM_WEB_ADMIN_USER |
admin |
Basic Auth login |
PCATELEGRAM_WEB_ADMIN_PASSWORD |
admin |
web-admin password |
PCATELEGRAM_WEB_WARP_CONFIG |
/opt/pcatelegram_web/warp.json |
WARP / WARP+ settings |
PCATELEGRAM_WEB_MIERU_CONFIG |
/opt/pcatelegram_web/mieru.json |
Mieru server settings |
PCATELEGRAM_WEB_MIERU_SERVER_CONFIG |
/opt/pcatelegram_web/mieru_server_config.json |
JSON applied by mita apply config |
PCATELEGRAM_WEB_SITE_ROOT |
/var/www/pcatelegram_web-site |
root публичного HTML-сайта на 80 |
PCATELEGRAM_WEB_NGINX_MASK_CONF |
/etc/nginx/sites-available/pcatelegram_web-mask |
nginx config сайта на 80 |
Поддержать проект
Если проект оказался полезным — буду рад поддержке. Это помогает развивать и поддерживать его дальше.
- Boosty
- Ozon СБП
- Telegram: @PCAdministration — вопросы, идеи, обратная связь
Web-admin
После первого запуска pcatelegram_web web-admin панель ставится как pcatelegram_web-admin.service и слушает публично:
http://SERVER:1984/
Логин и пароль по умолчанию: admin / admin. Данные можно сменить в web-admin Settings. Текущие данные хранятся на сервере:
sudo cat /root/pcatelegram_web-admin.password
Пароль хранится в root-only файле. В новых установках он не кладётся в systemd Environment.
Для своего пароля передайте env до установки:
PCATELEGRAM_WEB_ADMIN_PASSWORD='strong-password' bash bootstrap.sh
Без HTTPS Basic Auth гонит пароль открытым текстом. Для постоянного доступа лучше reverse proxy с TLS, но порт 1984 открыт по умолчанию по запросу проекта.
API записи требуют session cookie и заголовок X-PCAtelegram-Web-Admin: 1. Ответы web-admin содержат security headers: CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy.
WARP / WARP+
В web-admin Settings есть блок WARP / WARP+:
Off— WARP выключен.WARP— обычный Cloudflare WARP.WARP+— WARP+ с license key.All clients— еслиwarp-cliне установлен, web-admin ставитcloudflare-warp, затем применяет WARP на весь proxy-трафик черезwarp-cli.One client— еслиwarp-cliне установлен, web-admin ставитcloudflare-warp, затем сохраняет WARP/WARP+ профиль и key для выбранного клиента в/opt/pcatelegram_web/warp.json.
WARP+ key не отдается в API целиком: web показывает только маску. Файл warp.json хранится с правами 0600 и входит в backup.
Для real global WARP web-admin использует официальный Cloudflare Linux repo: добавляет GPG key, repo pkg.cloudflareclient.com, ставит пакет cloudflare-warp, затем выполняет регистрацию warp-cli registration new, WARP+ key warp-cli registration license <KEY>, подключение warp-cli connect.
Per-client runtime routing в текущем telemt не включается автоматически: публичные параметры telemt дают users/limits/quotas/ad tags, но не документируют привязку upstream к конкретному user. Для настоящего WARP только одному клиенту нужен отдельный telemt route/service или upstream-схема.
Mieru
В web-admin Settings есть блок Mieru:
Mieru port— отдельный публичный портmita, по умолчанию2999. Диапазон Mieru:1025-65535.Transport—TCPилиUDP.User/Password— учётка Mieru. Если пароль пустой, web-admin генерирует новый.Install / save Mieru— еслиmitaещё нет, web-admin скачивает свежий пакетmitaиз GitHub releaseenfein/mieru, ставит его, применяет JSON черезmita apply config, затем запускаетmita start.Client JSON— готовый конфиг для официальногоmieruclient.mihomo YAML— proxy block для клиентов с поддержкойtype: mieru.mihomo subscription URL— ссылка видаhttp://SERVER:1984/sub/mieru/<token>.yaml. Её нужно вставлять в iOS Clash/mihomo apps как subscription/profile URL.QR subscription— QR-код этого subscription URL для импорта с телефона.Clash import URL— deep linkclash://install-config?...для клиентов, которые умеют открывать Clash import links.
Не вставляйте сырой mihomo YAML в поле URL: iOS clients ожидают ссылку, иначе будет ошибка No host specified in URI proxies:. YAML нужен только для ручной вставки в config file.
Mieru не меняет telemt, nginx, WARP и сайт на 80. Перед сохранением web-admin проверяет выбранный порт через ss; чужой listener блокирует сохранение. Файлы mieru.json и mieru_server_config.json хранятся с правами 0600 и входят в backup.
Порт и маскировка
В web-admin Settings есть блок Port and mask site:
Public port— реальный портtelemt([server] port) и порт в tg-ссылках ([general.links] public_port).Mask site— сайт маскировки FakeTLS ([censorship] tls_domain), который вшивается вeesecret.- Перед сохранением web-admin проверяет порт через
ss. Если порт занят неtelemt(например, Xray / 3x-ui на 443), сохранение блокируется. - После сохранения обновляются
/etc/telemt/config.toml,/opt/pcatelegram_web/config.json, ссылки клиентов и перезапускаетсяtelemt.
Один telemt-инстанс имеет один публичный порт и один сайт маскировки для всех клиентов. Разные порты или разные сайты маскировки на разных клиентов требуют отдельные telemt services/configs.
Свой домен и сайт на 80
Чтобы домен открывал обычный публичный сайт:
- В панели регистратора домена создай DNS
Aзапись:@→ IP сервера. - Если нужен
www, создайAзаписьwww→ IP сервера. - Дождись DNS. Обычно от нескольких минут до нескольких часов.
- В web-admin открой
Settings→Domain and mask site. - Введи домен без
http://, напримерexample.ru. - Нажми
Install site on 80.
Если порт 80 свободен, web-admin поставит/настроит nginx и отдаст нейтральный одностраничный HTML-сайт без упоминаний proxy, VPN, MTProxy или PCAtelegram_web. Если порт занят чужим процессом, сохранение будет заблокировано.
Чтобы поставить свой HTML-сайт:
- В том же блоке выбери
.html/.htmфайл. - Нажми
Add HTML site. - Проверь
http://DOMAIN/.
Лимит файла: 1 MB. Не клади в HTML секреты, токены, ключи и внутренние ссылки. Кнопка Remove site удаляет nginx config сайта с порта 80, но не трогает telemt и ключи клиентов.
Ошибки и решения
Telegram пишет соединение и proxy не подключается
Причины:
telemtне запущен.- Порт закрыт firewall/VPS provider.
- В Telegram осталась старая ссылка со старым secret.
Проверка:
systemctl is-active telemt
ss -tulpn | grep -E ':(443|5443)\b'
journalctl -u telemt --since "10 min ago" -n 80 --no-pager
Решение:
- В web-admin открой
Keys, скопируй свежую ссылку нужного пользователя и заново добавь proxy в Telegram. - Если
telemtотсутствует, в web-admin сохраниPort and mask site: панель поставитtelemt, создастmain, запустит сервис. - Если порт не слушает, перезапусти:
systemctl restart telemt
systemctl status telemt --no-pager -l
unauthorized при создании ключа
Обычно это старая вкладка после restart web-admin.
Решение:
- Обнови страницу и войди снова.
- Начиная с cache
admin26session cookie переживает restart, а при настоящем401UI отправляет на login.
Проверка:
systemctl is-active pcatelegram_web-admin.service
journalctl -u pcatelegram_web-admin --since "10 min ago" -n 80 --no-pager
Не меняется Лимит IP, поле скачет или откатывается
Причина: auto-refresh перерисовал карточку пользователя во время ввода.
Решение:
- Начиная с cache
admin28background refresh не трогает страницу, пока курсор находится вinput,selectилиtextarea. - Сделай hard refresh браузера после обновления панели:
Ctrl+Shift+R/Cmd+Shift+R.
Проверка через API:
curl -b cookies.txt -H 'Content-Type: application/json' \
-H 'X-PCAtelegram-Web-Admin: 1' \
-d '{"max_unique_ips":2}' \
http://SERVER:1984/api/users/main/max-ips
Порт 443 занят
Проверка:
ss -tulpn | grep ':443'
Если там xray, 3x-ui, nginx или другой процесс, web-admin покажет конфликт и не даст сохранить telemt на этот порт. Выбери свободный порт, например 5443, либо освободи 443 вручную.
GitHub пишет Repository not found
Возможные причины:
- private repo удалён;
- GitHub token больше не имеет доступа;
GITHUB_TOKENне передан при установке private repo.
Проверка:
git ls-remote origin HEAD
Для private install:
curl -fsSL -H "Authorization: Bearer $GITHUB_TOKEN" \
https://raw.githubusercontent.com/andrey271192/PCAtelegram_web/main/bootstrap.sh | \
GITHUB_TOKEN="$GITHUB_TOKEN" bash
Web-admin не открывается на :1984
Проверка:
systemctl is-active pcatelegram_web-admin.service
ss -tulpn | grep ':1984'
journalctl -u pcatelegram_web-admin --since "10 min ago" -n 80 --no-pager
Если сервис работает, но порт не открывается снаружи, проверь firewall/VPS security group.
Проверки
bash -n bootstrap.sh install.sh install_pcatelegram_web_bot.sh lib/*.sh lib/lang/*.sh
rg -i "old-brand-name" .


