Локальная панель для управления Telegram MTProto proxy-серверами.
MTProxy Control - локальная панель для операторов Telegram MTProto proxy-серверов.
Панель подключается к серверам по SSH, помогает проверить состояние хоста, подготовить конфигурацию Telemt, выполнить deploy и просматривать состояние сервера в одном интерфейсе.
Этот README описывает пользовательскую установку панели на сервер и работу с ней через браузер.
Перед установкой панели подготовьте:
- Docker Engine
- Docker Compose plugin
- доступ по SSH к серверам, которыми будет управлять панель
Скачайте docker-compose.yml и шаблон .env.
mkdir -p /opt/mtproxy-control
cd /opt/mtproxy-control
curl -fsSL "https://raw.githubusercontent.com/Informativus/MTProtoControl/main/deploy/docker-compose.release.yml" -o docker-compose.yml
curl -fsSL "https://raw.githubusercontent.com/Informativus/MTProtoControl/main/deploy/release.env.example" -o .env
mkdir -p sshОткройте .env и замените значения под свой сервер.
docker compose --env-file .env up -d --pull alwaysДля остановки:
docker compose --env-file .env down- контейнер
apiзапускает миграции SQLite и поднимает Go API на:8080 - контейнер
apiостаётся во внутренней docker-сети и по умолчанию не публикуется наружу - контейнер
webотдаёт React UI через nginx на:80, проксирует/api/*в контейнерapiи отдаёт/healthнаружу - named volume
mtproxy-control-dataхранит SQLite базу между перезапусками - если ты хочешь использовать
private_key_path, положи SSH-ключи иknown_hostsв папку./sshрядом с releasedocker-compose.yml; эта папка монтируется в контейнер API только на чтение как/root/.ssh
IMAGE_REGISTRY: Docker Hub namespace, по умолчаниюdocker.io/informativusIMAGE_TAG: тег образов, обычно менять не нужноWEB_PORT: внешний порт web UI на сервере, по умолчанию8081HEALTHCHECK_INTERVAL: как часто панель делает автоматические health checksAPP_ENV: оставляйтеproductionдля серверной установкиDATABASE_PATH: обычно не меняйте, если хотите хранить SQLite в стандартном docker volume
Проверка health после установки будет доступна через http://<host>:<WEB_PORT>/health.
Если в панели будете указывать путь к приватному ключу, сначала положите его в ./ssh, а потом используйте путь внутри контейнера, например /root/.ssh/id_ed25519.
Если панель установлена на том же сервере, которым она управляет, отдельный режим не нужен: добавьте этот хост в инвентарь как обычный сервер по SSH.
- В поле
hostможно указатьlocalhostили127.0.0.1. - В docker-установке API-контейнер сам переведет loopback SSH на хост сервера через
host.docker.internal. - Для
private_key_pathиспользуйте путь внутри контейнера, например/root/.ssh/id_ed25519. - Для docker-установки сначала положите SSH-ключ в
./sshрядом с releasedocker-compose.yml, а потом укажите его в панели как/root/.ssh/<имя_ключа>. - Панель проверяет SSH host key, поэтому заранее положите запись в
./ssh/known_hosts, напримерssh-keyscan <server-ip> localhost 127.0.0.1 > ./ssh/known_hosts. - Если удобнее, вместо
localhostможно по-прежнему указывать обычный IP или DNS-имя сервера.
Короткий same-host рецепт:
mkdir -p ./ssh
cp ~/.ssh/id_ed25519 ./ssh/id_ed25519
ssh-keyscan <server-ip> localhost 127.0.0.1 > ./ssh/known_hosts
chmod 600 ./ssh/id_ed25519 ./ssh/known_hostsПотом в панели укажите:
host = localhostssh_user = <ваш SSH user>private_key_path = /root/.ssh/id_ed25519remote_base_path = /opt/mtproto-panel/telemt
Если панель запущена на удалённом сервере и вы не хотите открывать доступ к интерфейсу извне, используйте SSH-туннель.
На своём компьютере выполните:
ssh -N -L 8081:127.0.0.1:8081 -L 8080:127.0.0.1:8080 user@your-serverПосле этого откройте локально:
- Web UI:
http://127.0.0.1:8081 - API health:
http://127.0.0.1:8080/health
Если локальные порты заняты, используйте другие:
ssh -N -L 18081:127.0.0.1:8081 -L 18080:127.0.0.1:8080 user@your-serverТогда будут доступны адреса:
- Web UI:
http://127.0.0.1:18081 - API health:
http://127.0.0.1:18080/health


