Ваш смартфон — это сервер: Запускаем Telegram-бота на Android без root-прав и затрат

Привет, Хабр!

Наверняка у многих из вас, как и у меня, периодически возникают идеи для небольших пет-проектов. Например, написать простого Telegram-бота для автоматизации какой-нибудь рутины, для уведомлений или просто для развлечения. Идея есть, код пишется за полчаса, и вот тут возникает главный вопрос: а где его захостить?

Конечно, можно арендовать самый дешевый VPS за пару долларов в месяц. Но что, если проект совсем крошечный и не хочется тратить на него даже эти деньги? Или, может быть, вы только начинаете свой путь в разработке и хотите поэкспериментировать без лишних вложений?

Я предлагаю вам посмотреть на устройство, которое, скорее всего, прямо сейчас лежит у вас на столе или в кармане — ваш Android-смартфон. Что, если я скажу, что его можно превратить в полноценный Linux-сервер и запустить на нем нашего бота? Без root-прав, сложных манипуляций и абсолютно бесплатно.

В этой статье мы пошагово пройдем весь путь: от установки Linux-окружения на ваш телефон с помощью замечательного приложения UserLAnd до написания и запуска простого эхо-бота на Python, который будет работать 24/7 (ну, или пока ваш телефон не разрядится).

К концу этого туториала у вас будет свой собственный, работающий прямо с телефона, Telegram-бот.

Заинтересовались? Тогда поехали

2. Что нам понадобится? (Технический стек)

Прелесть этого метода в его минимализме. Нам не понадобится дорогое оборудование или специфическое программное обеспечение. Вот наш джентльменский набор:

  • Android-смартфон. Подойдет практически любой телефон, выпущенный за последние 5-6 лет. Главное, чтобы на нем была установлена версия Android 7.0 или новее и было хотя бы 1-2 ГБ свободного места для установки нашего Linux-окружения. Я буду использовать свой старенький "боевой" телефон, который давно лежал без дела.

  • Приложение UserLAnd. Это наше главное оружие. UserLAnd — это бесплатное приложение, которое позволяет устанавливать несколько дистрибутивов Linux (например, Debian, Ubuntu, Kali) прямо на ваш телефон без необходимости получать root-права. Скачать его можно напрямую из Google Play.

  • Аккаунт в Telegram. Само собой, нам нужен аккаунт для того, чтобы общаться с "крестным отцом" всех ботов — @BotFather — и получить заветный токен для нашего будущего творения.

  • Базовые знания Python и командной строки. Мы будем писать очень простого бота, поэтому глубоких познаний в Python не потребуется. Достаточно понимать, что такое переменные и функции. Аналогично и с командной строкой — хватит умения вводить команды, которые я покажу ниже.

  • Стабильное подключение к Wi-Fi. Хотя бы на время установки. В дальнейшем бот сможет работать и через мобильный интернет, но для скачивания дистрибутива лучше использовать Wi-Fi.

И, конечно же, немного любопытства и желания поэкспериментировать. Если все готово, переходим к самому интересному — установке

3. Шаг 1: Подготовка окружения на Android

Теперь начинается самое интересное. Мы установим полноценную Linux-систему прямо на ваш смартфон. Звучит сложно, но благодаря UserLAnd этот процесс сводится к нескольким нажатиям на экран.

Установка и настройка UserLAnd

  1. Качаем приложение. Заходим в Google Play, вбиваем в поиск "UserLAnd" и устанавливаем приложение.

  2. Выбираем дистрибутив. После первого запуска приложение покажет вам список доступных дистрибутивов. Здесь есть Ubuntu, Debian, Kali и другие. Для наших целей идеально подойдет Debian. Он стабильный, легкий и имеет огромные репозитории со всем необходимым софтом. Смело жмем на иконку Debian.

  3. Даем разрешения и ждем. UserLAnd попросит разрешения на доступ к хранилищу, так же спросит какую версию устанавливать, выбираем minimal, а так же terminal. Предоставляем их. После этого начнется скачивание и установка Debian. Процесс может занять от 5 до 15 минут в зависимости от скорости вашего интернета и производительности телефона. Просто отложите телефон и дайте ему спокойно завершить установку.

  4. Подключаемся! Когда все будет готово, на главном экране UserLAnd появится новая сессия с названием "Debian". Нам нужно подключение через SSH (именно так, а не VNC). Нажимаем на нее. Перед вами откроется черное окно терминала. Поздравляю, у вас в руках полноценная командная строка Linux, работающая на вашем телефоне!

Установка необходимых пакетов

Теперь, когда у нас есть работающая система, нужно установить инструменты для создания и запуска нашего бота. Все команды вводим прямо в открывшемся терминале.

  1. Обновляем систему. Первое, что стоит сделать в любой свежеустановленной Linux-системе — обновить список пакетов и сами пакеты до актуальных версий.

    sudo apt-get update && sudo apt-get upgrade
    

    Не пугайтесь, если на экране побежит много текста. Система спросит ваш пароль (тот, что вы создали на шаге 3) и может попросить подтверждения (Y/n). Соглашаемся, нажав Y и Enter.

  2. Устанавливаем Python и PIP. Python, скорее всего, уже есть в системе, но для надежности установим его и его менеджер пакетов pip. Он понадобится нам для установки библиотеки Telegram.

    sudo apt-get install python3 python3-pip
    
  3. Устанавливаем библиотеку для Telegram-бота. Мы будем использовать популярную и очень простую библиотеку pyTelegramBotAPI. Устанавливается она одной командой через pip.

    pip3 install pyTelegramBotAPI
    
  4. Устанавливаем screen. Это очень важный шаг! Если просто запустить бота и закрыть приложение UserLAnd, процесс "умрет". Чтобы наш бот работал в фоновом режиме, даже когда мы не смотрим в терминал, нам понадобится терминальный мультиплексор. Самый простой и надежный вариант — screen.

    sudo apt-get install screen
    

Отлично! Наше окружение полностью готово и заряжено. Мы установили Linux, обновили его и загрузили весь необходимый софт. Теперь пора создать самого бота.

4. Шаг 2: Создание Telegram-бота

Поскольку фокус статьи на деплое, мы не будем углубляться в тонкости разработки. Нам нужен простой рабочий пример — эхо-бот, который будет отправлять нам обратно наши же сообщения.

Получение токена у @BotFather

  1. Откройте Telegram, найдите официальный аккаунт @BotFather (с синей галочкой) и начните с ним диалог.

  2. Отправьте ему команду /newbot.

  3. BotFather попросит вас придумать имя для бота (например, Мой Тестовый Бот) и его username (он должен быть уникальным и заканчиваться на _bot, например, MySuperTestPhoneBot).

  4. В ответ вы получите сообщение с токеном. Это секретный ключ! Скопируйте его и никому не показывайте.

Пишем код эхо-бота

Теперь вернемся в наш терминал в UserLAnd. Нам нужно создать Python-файл и поместить в него код.

  1. Устанавливаем текстовый редактор nano, если вы не сделали этого ранее. Он понадобится для удобного редактирования файлов прямо в консоли.

    sudo apt-get install nano
    
  2. Создаем файл для нашего бота с помощью nano:

    nano echo_bot.py
    
  3. В открывшееся окно редактора вставьте следующий код. Не забудьте заменить 'YOUR_API_TOKEN_HERE' на реальный токен, который вы получили от BotFather.

    import telebot
    
    # IMPORTANT: Paste your token from BotFather here
    API_TOKEN = 'YOUR_API_TOKEN_HERE'
    
    bot = telebot.TeleBot(API_TOKEN)
    
    # Handler for all incoming text messages
    @bot.message_handler(func=lambda message: True)
    def echo_message(message):
        # Sends the received message back to the user
        bot.reply_to(message, message.text)
    
    # Start the bot and begin polling for new messages
    print("Bot is running!")
    bot.polling(non_stop=True)
    
    
  1. Теперь сохраняем файл и выходим из редактора. Для этого нажмите поочередно:

    • Ctrl + X (для выхода)

    • Y (чтобы подтвердить сохранение)

    • Enter (чтобы подтвердить имя файла)

Всё! У нас есть готовый к запуску скрипт. Остался самый главный шаг — оживить нашего бота.

5. Шаг 3: Запуск и деплой бота на телефоне

Код написан, окружение готово. Осталось сделать так, чтобы наш бот ожил и начал отвечать на сообщения.

Первый запуск для проверки

Сначала давайте просто запустим скрипт, чтобы убедиться, что все работает как надо. Введите в терминале UserLAnd следующую команду:

python3 echo_bot.py

Если вы все сделали правильно, в консоли появится надпись "Bot is running!", и курсор будет мигать. Это значит, что бот запущен и ждет сообщений.

Теперь зайдите в Telegram, найдите своего бота по username, который вы ему дали, и отправьте ему любое сообщение. Он должен тут же ответить вам тем же самым текстом.

Получилось? Прекрасно!

Теперь вернитесь в терминал и остановите бота, нажав Ctrl + C.

Обеспечение непрерывной работы (деплой)

Мы столкнулись с главной проблемой: как только мы закрываем сессию SSH или приложение UserLAnd, процесс python3 завершается, и бот перестает работать. Нам нужно, чтобы он работал в фоне, независимо от того, открыт у нас терминал или нет.

Именно для этого мы установили утилиту screen. Она создает виртуальную консоль, которая продолжает жить своей жизнью даже после того, как мы от нее "отключимся".

Вот как это делается:

  1. Создаем новую screen-сессию. Давайте дадим ей осмысленное имя, например, bot_session.

    screen -S bot_session
    

    Ваш экран на мгновение моргнет, и вы увидите то же самое окно терминала. Не пугайтесь, теперь вы находитесь "внутри" сессии screen.

  2. Запускаем бота внутри сессии. Теперь, находясь в этой сессии, запускаем нашего бота уже знакомой командой:

    python3 echo_bot.py
    

    Вы снова увидите надпись "Bot is running!".

  3. "Отключаемся" от сессии. А теперь магия. Чтобы выйти из сессии, оставив ее работать в фоновом режиме, нажмите комбинацию клавиш: сначала Ctrl + A, а затем, отпустив их, нажмите клавишу D (от слова detach).

    Вы вернетесь в основной терминал, и на экране появится надпись [detached from ... .bot_session].

Вот и все! Ваш бот теперь работает в фоне. Можете смело закрывать приложение UserLAnd — бот продолжит свою работу до тех пор, пока ваш телефон включен и подключен к интернету.

Как вернуться в сессию?

Если вам понадобится посмотреть логи или остановить бота, вы всегда можете вернуться в работающую сессию командой:

screen -r bot_session

Чтобы остановить бота, вернитесь в сессию и нажмите Ctrl + C. Чтобы полностью закрыть сессию, просто введите exit после остановки скрипта.

6. Возможные проблемы и их решения

Даже в таком простом сетапе что-то может пойти не так. Это нормально. Давайте разберем самые частые проблемы и как их исправить.

Проблема №1: Бот "засыпает" через некоторое время

Это самая распространенная и главная проблема. Вы все сделали правильно, бот работает, но через 15-30 минут (или когда вы блокируете телефон) он перестает отвечать на сообщения.

  • Причина: Современные версии Android очень агрессивно управляют энергопотреблением. Система видит, что приложение UserLAnd работает в фоне и потребляет ресурсы, и принудительно "убивает" его, чтобы сэкономить заряд батареи.

  • Решение: Нужно вручную запретить Android оптимизировать работу UserLAnd. Путь в настройках может немного отличаться в зависимости от производителя вашего смартфона (Samsung, Xiaomi, Google Pixel и т.д.), но логика везде одинаковая:

    1. Зайдите в Настройки вашего телефона.

    2. Перейдите в раздел "Приложения" (или "Все приложения").

    3. Найдите в списке UserLAnd и тапните по нему.

    4. Найдите пункт, связанный с батареей или питанием (например, "Батарея", "Контроль активности" или "Энергопотребление").

    5. Внутри выберите опцию, которая разрешает приложению работать без ограничений. Обычно она называется "Без ограничений" или "Не оптимизировать".

    (Скриншот настроек батареи для приложения UserLAnd, где выбрана опция "Без ограничений").

    После этого Android перестанет "душить" UserLAnd, и ваш бот сможет работать стабильно и долго.

Проблема №2: Ошибки при запуске скрипта

Вы вводите python3 echo_bot.py и вместо "Bot is running!" получаете ошибку в консоли.

  • Причина №1: Неправильный токен. Чаще всего ошибка связана с API_TOKEN. Возможно, вы скопировали его не полностью или случайно добавили лишний символ.

  • Решение: Откройте файл nano echo_bot.py и очень внимательно проверьте, что токен внутри кавычек в точности совпадает с тем, что выдал вам @BotFather.

  • Причина №2: Забыли установить библиотеку. Если в ошибке упоминается telebot или ModuleNotFoundError.

  • Решение: Вы забыли установить библиотеку. Просто выполните команду еще раз: pip3 install pyTelegramBotAPI.

Проблема №3: Команда не найдена (command not found)

Вы вводите nano или screen, а система отвечает bash: nano: command not found.

  • Причина: Пакет не был установлен.

  • Решение: Убедитесь, что вы правильно выполнили команду установки на Шаге 1. Попробуйте установить нужный пакет еще раз: sudo apt-get install nano screen.

Проблема №4: Бот все равно отключается

Вы отключили оптимизацию батареи, запустили бота в screen, но он все равно иногда "отваливается".

  • Причина: Нестабильное интернет-соединение. Помните, ваш телефон — не сервер в дата-центре. Он может терять сеть Wi-Fi, переключаться на мобильные данные, или сигнал может просто пропадать. В этот момент бот теряет связь с серверами Telegram.

  • Решение: К сожалению, это ограничение нашей платформы. Убедитесь, что у телефона стабильный прием Wi-Fi или хороший сигнал мобильной сети. Для простого пет-проекта такие кратковременные сбои обычно не критичны.

7. Заключение

Вот и всё! Мы успешно прошли весь путь: установили полноценную Linux-среду на Android, написали на Python простого Telegram-бота и, что самое главное, "задеплоили" его на постоянную работу прямо на нашем телефоне.

Теперь у вас есть свой собственный карманный сервер, который идеально подходит для небольших экспериментов, изучения Linux и тестирования идей без каких-либо затрат. Это отличная отправная точка. Попробуйте научить бота новым командам, подключить к нему какое-нибудь API или просто используйте его как удобную площадку для оттачивания своих навыков.

Надеюсь, эта инструкция была для вас полезной и интересной.

Анонсы новых статей, полезные материалы, а так же если в процессе у вас возникнут сложности, обсудить их или задать вопрос по этой статье можно в моём Telegram-сообществе. Смело заходите, если что-то пойдет не так, — постараемся разобраться вместе.

Уверен, у вас все получится. Вперед, к экспериментам

Комментарии (8)


  1. Andrey_Dolg
    17.11.2025 09:06

    Идея конечно интересная для развлечения без компа вполне сойдёт.


  1. kinall
    17.11.2025 09:06

    Если это так просто, почему так не делают все поголовно? В чём минусы решения?

    Как это выглядит со стороны ОпСоСа? Не будет ли это подозрительным трафиком и/или поводом для блокировки SIM?

    Что с расходом батареи в таком сценарии?


    1. enamored_poc Автор
      17.11.2025 09:06

      1. Почему так не делают все? В чём минусы?
        Потому что это решение для энтузиастов, а не для серьезных задач. Главные минусы — надежность и производительность. Телефон может перезагрузиться, потерять сеть или "убить" приложение ради экономии энергии. Его мощности хватит только на самые простые скрипты, а постоянная работа 24/7 изнашивает батарею.

      2. Что насчет оператора сотовой связи (ОпСоСа)?

        Трафик от него мизерный и ничем не отличается от фоновой работы обычного Telegram. Риск блокировки SIM-карты практически нулевой, так как вы не создаете аномальной нагрузки (как массовая раздача интернета).

      3. Что с расходом батареи?
        Расход батареи — самый заметный минус. Телефон не сможет уходить в режим "глубокого сна", поэтому разряжаться будет заметно быстрее, чем обычно. Идеальный сценарий для этого метода — использовать старый ненужный телефон, который будет постоянно подключен к розетке.


      1. FireWind
        17.11.2025 09:06

        Если все сводится к "старый ненужный телефон, который будет постоянно подключен к розетке", то гораздо проще, удобнее и надежнее использовать "старый ненужный ноутбук, который будет постоянно подключен к розетке". Отсюда - в итоге, зачем все эти прыжки?


        1. Spearton
          17.11.2025 09:06

          Ну телефон старый и ненужный все-же более частое явление чем ноутбук


  1. elsaqq
    17.11.2025 09:06

    лучше в роутере разместить телеграм бота, если прошивка openwrt, то можно развернуть без проблем, быстрый интернет, постоянное питание и процесс не ляжет просто так


  1. K0Jlya9
    17.11.2025 09:06

    Конечно, можно арендовать самый дешевый VPS за пару долларов в месяц. Но что, если проект совсем крошечный и не хочется тратить на него даже эти деньги?

    VPS уже есть для впна (как без него сейчас можно вообще?). На нем можно и сайтик поднять и телеграм бота.


  1. Electrock
    17.11.2025 09:06

    Поставил termux, установил зависимости, запустил, работает. Всё под рукой, батарею сильно не жрёт