proot-distro, Ubuntu rootfs, Python 3 + venv, git, AstrBot, NapCat, аккаунт QQ, API-ключ LLM-провайдера (OpenAI-совместимый эндпоинт)Схема, которую собираем: Termux → PRoot (Ubuntu) → AstrBot (мозг + WebUI) ← WebSocket → NapCat (мост к QQ) → QQ-аккаунт.

base_url + api_key + имя модели). Без него AstrBot запустится, но отвечать не будет.Пример: на практике последовательность выглядит так — pkg install proot-distro → proot-distro install ubuntu → proot-distro login ubuntu → и вы уже в приглашении root@localhost:~#, где работают обычные apt и pip.
Чек-лист перед стартом:
pkg update проходит без ошибокbase_url, api_key и имя модели у LLM-провайдераЧто сделать: обновить Termux, поставить proot-distro, установить Ubuntu и войти в него.
Зачем: AstrBot и NapCat — обычные Linux-приложения с зависимостями (Python, Node.js, библиотеки сборки). В родном Termux они конфликтуют с системными пакетами; отдельный rootfs даёт чистую среду, которую можно снести одной командой.
pkg update && pkg upgrade -y
pkg install -y proot-distro git
proot-distro install ubuntu
proot-distro login ubuntu
Пример: после proot-distro install ubuntu в консоли идёт скачивание rootfs и строка вида Installing Ubuntu...; после login приглашение меняется на root@localhost:~# — это признак, что вы внутри Ubuntu, а не в Termux.
Как проверить: внутри Ubuntu выполните
cat /etc/os-release | head -n 2
Ожидаемый вывод — две строки с NAME="Ubuntu" и VERSION=.... Если видите Termux или Android — вы всё ещё снаружи, повторите proot-distro login ubuntu.
Дальше поставьте базовый набор (внутри Ubuntu, не в Termux):
apt update && apt upgrade -y
apt install -y python3 python3-pip python3-venv git curl nano
python3 --version
python3 --version печатает версию вида Python 3.x.y — номер сверьте с требованиями AstrBot в его документации, слишком старый Python ломает установку зависимостей.
Почему это работает: PRoot подменяет корень файловой системы (chroot-подобно) через ptrace, поэтому apt считает, что работает на обычном Ubuntu, хотя ядро — андроидное.

Два компонента ставятся в одном и том же Ubuntu-окружении.
Что сделать (2A — AstrBot): клонировать репозиторий, создать виртуальное окружение, поставить зависимости, запустить.
Зачем: venv (виртуальное окружение Python — изолированная папка с пакетами) защищает от конфликта версий библиотек между AstrBot и системным Python.
cd ~
git clone https://github.com/AstrBotDevs/AstrBot.git
cd AstrBot
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 main.py
Пример: при первом старте AstrBot создаёт папку data/ с конфигами и печатает в лог адрес WebUI. Порт по умолчанию — сверьтесь с логом и документацией (в разных сборках он может отличаться); в логе будет строка вида http://0.0.0.0:<порт>.
Как проверить: не закрывая Termux, откройте браузер на том же телефоне и зайдите на http://127.0.0.1:<порт-из-лога>. Откроется страница входа в WebUI. 127.0.0.1 работает потому, что PRoot использует сетевое пространство Android — веб-сервер внутри Ubuntu виден браузеру телефона как локальный. Логин/пароль по умолчанию указаны в документации AstrBot — смените их сразу после входа.
Что сделать (2B — NapCat): поставить Node.js и NapCat в том же Ubuntu, затем авторизовать QQ-аккаунт по QR.
apt install -y nodejs npm
node --version
git clone https://github.com/NapNeko/NapCatQQ.git
cd NapCatQQ
npm install
Зачем: NapCat — это реализация QQ-протокола на Node.js: он подключается к серверам QQ и транслирует сообщения в WebSocket, который слушает AstrBot.
Пример: запуск идёт скриптом из репозитория; точное имя файла запуска и флаги сверьтесь с README NapCat на момент установки — они меняются между релизами. При первом запуске в консоли печатается QR-код (ASCII-графика). Сканируете его приложением QQ: Настройки → сканер QR. Для headless-режима без графики может потребоваться виртуальный дисплей — сверьтесь с документацией.
Как проверить: после сканирования в логе появляется сообщение об успешном входе и строка с портом WebUI NapCat (по умолчанию часто указывают 6099 — сверьтесь с логом). Откройте http://127.0.0.1:<порт> в браузере телефона — увидите панель NapCat с информацией об аккаунте.
Связка компонентов:
| Компонент | Роль | Что делать с портом |
|---|---|---|
| AstrBot WebUI | панель настройки | открыть `http://127.0.0.1:<порт>` |
| AstrBot WS-сервер (aiocqhttp) | принимает сообщения от NapCat | указать в NapCat |
| NapCat | мост к QQ | указать `ws://127.0.0.1:<порт-сервера>` |
Точные номера портов сверьтесь с WebUI и документацией — в инструкции они намеренно даны как плейсхолдеры.

Что сделать: в WebUI AstrBot добавить платформу QQ (адаптер aiocqhttp) и указать хост/порт/токен, затем в NapCat прописать тот же адрес WebSocket.
Зачем: пока компоненты не соединены, AstrBot не получает ни одного сообщения — в панели всё выглядит рабочим, но бот молчит.
Пример конфигурации (значения — плейсхолдеры):
{
"platform": "aiocqhttp",
"ws_host": "127.0.0.1",
"ws_port": 6199,
"ws_token": "замените-на-длинную-случайную-строку"
}
Фрагмент иллюстративный: точные имена ключей и структуру файла конфига сверьтесь с документацией вашей версии AstrBot — проще заполнять те же поля через форму в WebUI, там они подписаны.
Как проверить:
1. В WebUI AstrBot статус платформы QQ должен смениться на «подключено/online» — сверьтесь с индикатором в интерфейсе.
2. В логах NapCat появляется строка об успешном подключении к WebSocket-серверу.
3. Отправьте с другого QQ-аккаунта сообщение боту: привет. Приходит ответ от LLM — значит, цепочка QQ → NapCat → AstrBot → LLM → AstrBot → NapCat → QQ работает.
Почему это работает: AstrBot выступает WebSocket-сервером, NapCat — клиентом. Оба в одном сетевом пространстве Android, поэтому 127.0.0.1 соединяет их без проброса портов и без внешнего IP.
Если нужен локальный LLM вместо облачного — варианты запуска на самом телефоне разобраны в гайде Как запустить ИИ-модель локально на Android: приложения и настройка.
Проблема. apt install не находит пакеты
E: Unable to locate package python3apt update, либо обновлялся список в другом окружении (например, в Termux, а не в Ubuntu).root@localhost (Ubuntu), затем выполнитеapt update
apt install -y python3 python3-pip python3-venv
Проблема. AstrBot падает при старте с жалобой на отсутствующий модуль
ModuleNotFoundError: No module named 'aiocqhttp' (или другое имя модуля)pip install -r requirements.txt выполнен вне venv либо запуск идёт системным python3, а не интерпретатором из окружения — пакеты поставились «не туда».venv:cd ~/AstrBot
source venv/bin/activate
pip install -r requirements.txt
which python3
python3 main.py
which python3 должен вывести путь, содержащий /AstrBot/venv/bin/python3.
Проблема. NapCat не подключается к AstrBot
Connection refused или websockets.exceptions.InvalidStatusCode: HTTP 403Connection refused) или несовпадающий ws_token (403).aiocqhttp) и в конфиге NapCat. Затем перезапустите NapCat и посмотрите лог:grep -i websocket ~/NapCatQQ/*.log
В строке подключения должны совпадать host, port и токен.
Вы получили автономный стек на телефоне: Ubuntu в PRoot, AstrBot с WebUI и NapCat, подключённый к QQ-аккаунту. Дальше имеет смысл настроить системный промпт и набор плагинов в WebUI AstrBot, а также проверить, что бот выживает при выключенном экране (Настройки → Батарея).
Нужен ли root на Android?
Нет. PRoot работает в userspace обычного пользователя, root-права не требуются.
Можно ли обойтись без ПК?
Да, вся установка выполняется в Termux и браузере на самом телефоне. ПК нужен только если вы хотите отлаживать код через IDE.
Будет ли бот работать при заблокированном экране?
Только если отключена оптимизация батареи для Termux. Иначе Android выгружает процесс, и соединение с QQ обрывается — симптом: бот перестаёт отвечать через несколько минут после блокировки.
Что делать, если QQ-аккаунт заблокировали за автоматизацию?
Используйте отдельный аккаунт для бота и не рассылайте массовые сообщения. Точные правила и ограничения — сверьтесь с документацией NapCat и условиями QQ; гарантий обхода блокировок не существует.