Предыстория

Все началось с того что я написал своего бота и решил его выложить в открытый доступ, а точнее чтобы он работал круглосуточно, но платить деньги за хостинг мне не хотелось. И тогда я вспомнил, что у меня как раз в ящиках залежались старые 2 телефона, можно сказать только один, потому что второй я превратил в кирпич (Неправильно перепрошил). Мой путь поиска программы для установки линукса начался с Termux, но к сожалению он работает только с Android 7+. А телефон на Android 5. Поэтому действенным решением я выбрал UserLAnd.

Характеристики смартфона

  • Название: Meizu m3 Note

  • Модель: M681H

  • Архитиктура процессора: arm64

  • Версия Android: 5.1

  • Версия прошивки: Flyme 6.3.0.0G

Что мы будем делать в этой статье

Установим линукс с веб-интерфейсом (я выбрал Webmin). Настроим веб-сервер с PHP 8.1.

Шаг 1: Установка UserLAnd

  1. Скачиваем приложение с https://userland.tech/ или https://github.com/CypherpunkArmory/UserLAnd.

  2. Устанавливаем и даем доступ к файлам.

  3. Выбераем Linux дистрибутив, я выбрал Ubuntu:

https://www.how2shout.com/how-to/how-to-install-ubuntu-linux-on-android-without-root.html
https://www.how2shout.com/how-to/how-to-install-ubuntu-linux-on-android-without-root.html
  1. Устанавливаем пароль и имя. Выбираем тип подключения ssh (Можно другие типы, но мне так удобнее).

https://www.how2shout.com/how-to/how-to-install-ubuntu-linux-on-android-without-root.html
https://www.how2shout.com/how-to/how-to-install-ubuntu-linux-on-android-without-root.html
  1. Ждем установки, оно само перекинет нас к терминалу.

https://www.how2shout.com/how-to/how-to-install-ubuntu-linux-on-android-without-root.html
https://www.how2shout.com/how-to/how-to-install-ubuntu-linux-on-android-without-root.html
  1. Все, линукс установлен, но давайте еще установим несколько пакетов для работы.

    1. Обновим установленые пакеты:

sudo apt update
sudo apt upgrade

2. Установим net-tools, чтобы у нас работала команда ifconfig.

sudo apt install net-tools dialog

Шаг 2: Установка Webmin

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

# Скачиваем в нашу директорию консольный установщик
curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh

# Если возникает ошибка с сертификатами устанавливаем пакет ca-certificates
sudo apt-get install -y ca-certificates

# Запускаем файл от имени администрации (не обязательно) везде ставим [y]
sudo chmod +x ./setup-repos.sh
sudo ./setup-repos.sh

# После конца скачивания необходимых компонентов устанавливаем 
sudo apt-get install webmin --install-recommends

Webmin установлен! Теперь мы можем зайти в веб-интерфейс. Для этого перейдите на http://ip_вашего_устройства:10000 . Для авторизации используйте ваши предыдущие данные. Тут вы можете использовать терминал для удаленного доступа к серверу. Я так и буду делать.

Шаг 3: Устанавливаем веб-сервер

Я выбрал Lighttpd, вместо Apache2, поскольку Apache все время при запуске выдает ошибки. Хотя я не отрицаю, что это я так плохо настроил.

# Устанавливаем пакет lighttpd
sudo apt install lighttpd -y

# Не отходя от терминала устанавливаем все необходимые пакеты для PHP 8.1
sudo apt install -y php8.1-cgi php8.1-cli php8.1-fpm php8.1-curl php8.1-gd php8.1-mysql

Теперь можем создать файл авто-конфигурации, который подключит поддержку php в lighttpd. ВАЖНО: ФАЙЛ, КОТОРЫЙ ПРИВЕДЕН НИЖЕ, МОЖЕТ ВЫЗВАТЬ СИНТАКСИЧЕСКУЮ ОШИБКУ. ЕСЛИ ТАКОВАЯ ЕСТЬ, НАПИШИТЕ В КОМЕНТАРИЯХ К СТАТЬЕ.

Я сохранил этот файл под названием lighttpd-configurator.sh

#!/bin/bash

# Check for superuser privileges
if [ "$EUID" -ne 0 ]; then
  echo "Please run this script as root or using sudo."
  exit 1
fi

# Configure Lighttpd to work with PHP
echo 'server.modules += ( "mod_fastcgi" )' >> /etc/lighttpd/lighttpd.conf
echo 'fastcgi.server = ( ".php" => (('/usr/bin/php-cgi' => ( "bin-path" => "/usr/bin/php-cgi", "socket" => "/var/run/lighttpd/php.socket" ))))' >> /etc/lighttpd/lighttpd.conf

# Restart Lighttpd
sudo service lighttpd restart

# Test PHP
echo '<?php phpinfo(); ?>' > /var/www/html/info.php

# Print a message with the installation summary
echo "Lighttpd and PHP have been installed and configured. You can access the PHP info page at http://your_server_ip/info.php."

Теперь можем запустить с помощью команд:

sudo chmod +x ./lighttpd-configurator.sh
sudo ./lighttpd-configurator.sh

Если вы пробуете подключиться к сайту, а он не отвечает, попробуйте поменять порт и перезагрузить веб сервер. (У меня такое сработало).

Команды для управлениями сервисами

Время от времени вам понадобятся команды, чтобы запускать сервисы. Вот как это можно сделать:

sudo apt service имя_сервиса <start, stop, restart>

Так, а как же я бота запустил?

Бот у меня написан на Java. И поэтому я сначала собрал JAR файл на ПК, и потом закинул через файл менеджер, предустановленный в Webmin на сервер. Потом я установил OpenJDK 19 следующими командами:

sudo apt install openjdk-19-jdk openjdk-19-jre

# Для запуска бота использовал
java -jar bot.jar

Концовка

Сразу говорю, не судите строго, поскольку это моя первая статья на Хабре. Если появятся вопросы пишите внизу в комментариях. Этот сервер нельзя рассматривать как готовый и стабильный сервер. Для меня этот сервер годится только для простеньких проектов, а не полномасштабных.

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


  1. ErshoffPeter
    21.11.2023 20:27
    +3

    Реально здорово! Теперь есть куда залежи старых телефонов пристроить!


    1. Ratenti
      21.11.2023 20:27
      +1

      Будешь хостинг сервис открыть?


      1. ErshoffPeter
        21.11.2023 20:27
        +1

        А почему бы и нет? Мобильный хостинг!

        Раньше для определённых случаев в Газеле ЦОД делали, а теперь решение задачи упрощается - сумки или рюкзака или чемодана достаточно будет... ????


    1. yri066
      21.11.2023 20:27

      Как вариант, можно установить Kali Linux (nethunter), тоже неплохая система для телефона


      1. ErshoffPeter
        21.11.2023 20:27

        Спасибо! ????


  1. outlingo
    21.11.2023 20:27
    +1

    Бот у меня написан на Java

    Можно было просто добавить простейшую активити пускающую бота в отдельном треде. Хотя, тогда же "статью" написать было бы не о чем


    1. Ratenti
      21.11.2023 20:27

      Но среда выполнения в Android не поддерживает современные возможности Java же.

      Android 5 поддерживает Java 7.


      1. FussuChalice Автор
        21.11.2023 20:27

        Установили пакеты openjdk 19 и все работает.


        1. Ratenti
          21.11.2023 20:27

          Тут компиляцию в APK предлагают.


  1. djamali
    21.11.2023 20:27
    +1

    Бро у тебя ошибка в предложении : "ВАЖНО: ФАЙЛ, КОТОРЫЙ ПРЕВЕДЕН НИЖЕ, МОЖЕТ ВЫЗВАТЬ СИНТАКСИЧЕСКУЮ ОШИБКУ. ЕСЛИ ТАКОВАЯ ЕСТЬ, НАПИШИТЕ В КОМЕНТАРИЯХ К СТАТЬЕ". : Приведен.

    А статья в целом прикольна))


    1. FussuChalice Автор
      21.11.2023 20:27

      Спасибо


  1. Araki_Satoshi
    21.11.2023 20:27
    +2

    Проблема запуска чего-то, рассчитанного на работу 24/7 на смартфоне весьма очевидна - батарея. С одной стороны да, классно, даже бесперебойник не нужен. Если отключили свет, то он просто продолжит работать от батареи. Но с другой стороны, я бы побоялся держать смартфон на зарядке 24/7. Может только где-то на видном месте если.


    1. ds138
      21.11.2023 20:27

      Тоже несколько раз думал из телефона сделать что нибудь и каждый раз останавливала такая же мысль. Думал даже прикрутить какое нибудь DI DO на ESP и релюшкой отключать зарядку, но стало лениво делать ещё одну погремушку.


    1. Otard
      21.11.2023 20:27

      Розетка с циклическим таймером позволяет избавится от фобии.


      1. Zhuck
        21.11.2023 20:27

        Аккумулятор зарядом/разрядом так же быстро убьётся. Возможно как-то можно ограничить уровень заряда, процентов до 70 и чтоб там держало. Тогда и перезаряд не страшен и аккумулятор в оптимуме держаться будет


        1. hullaballoo
          21.11.2023 20:27

          Заряд-разряд аккумулятора называется его эксплуатацией. Если не гнать через него фантастические токи, не разряжать в ноль и не перезаряжать, то он проживёт долго.


        1. fasvik
          21.11.2023 20:27

          В идеале рекомендуют держать заряд батареи в диапазоне 20-80%, самый "эталон" чтобы батарейке плохо не было. Вот только я понятия не имею как отслеживать уровень заряда) был бы рад если у кого есть идеи, самому хотелось бы свой wp9 с большой батареей так "убивать" как можно меньше


        1. RoyalDutch
          21.11.2023 20:27
          +1

          На самсунг гэлэкси с22 ультра и других самсунагх есть функция ограничения заряда до 85%


          1. Juzujka
            21.11.2023 20:27

            + Galaxy S20FE


          1. Rubilnik
            21.11.2023 20:27

            Либо через модуль Magisk вроде Advanced Charging Controller App (AccA)


    1. shadrap
      21.11.2023 20:27
      +1

      Старый Самсунг Гэлакси Альфа пять лет работает , до этого Карбонн S9 жил , на даче в качестве сервера 24.7 воткнутый в зарядку на постоянку. Вот когда я Карбону вдруг, ради безопасности, решил воткнуть регулятор заряда 20-80 , вот тогда он накрылся и пришлось его заменить на Самсунг) Мне кажется нормально сделанные смарты довольно толерантны к 100% заряду.


    1. Doman
      21.11.2023 20:27

      Если положить в огнеупорный чехол, то должно быть норм. У меня LiPo батарейки в таком хранятся.


      1. Ratenti
        21.11.2023 20:27

        Покажи какой чехол у тебя


        1. Doman
          21.11.2023 20:27

          Вот такой чехольчик

          На Aliexpress можно найти по словам "lipo guard". Проверять его свойство (к счастью) пока не приходилось.


    1. Ratenti
      21.11.2023 20:27

      Надо в духовке


    1. NutsUnderline
      21.11.2023 20:27

      ну тот же wifi роутер и свитч в подьезде отвалятся, так что еще нужно sim с интернетом тогда


  1. 402d
    21.11.2023 20:27
    +1

    Не ужели у вас столько платформозависимого кода в вашем боте, что нельзя было бота сразу пересобрать под Android ? Хотя в этом случае не было б статьи про увлекательное занятие установки юникса в эмуляторе и еще одной явомашины внутри очередной матрешки.


    1. DGG
      21.11.2023 20:27

      Простейшие боты на Питоне и клиенты telethon вполне удавалось запускать через QPyton или Pydroid под Андроидом


      1. SiberianMouse
        21.11.2023 20:27

        У меня пайдроид ни с одним кодом не завелся почему то. На пека все стабильно


  1. theurus
    21.11.2023 20:27

    Оракл даёт бесплатные виртуалки всем желающим, ну кроме русских конечно. 1 ядро 1 гиг 50мбит без учёта трафика, 200гб диск.


    1. Ratenti
      21.11.2023 20:27

      Ты не русский?


      1. theurus
        21.11.2023 20:27
        +1

        Русским сейчас даже винду не дают, это мало кого останавливает.


    1. chifth
      21.11.2023 20:27

      Но они так фанатично ищут абузеров, что даже с нормальной страной и картой тяжело зарегистрироваться. Я решал уже через саппорт. Только тогда получилось.

      Раз уж на то пошло - там 2 виртуалки по 1C\2T 1GB RAM, и одна 4C\4T ARM64 , 24GB RAM (правда получить очень трудно). И 200ГБ места на все. Т.е я нарезал 50+50+100.


  1. ddruganov
    21.11.2023 20:27
    +3

    Зачем ставил лайтппд и пхп, если бот на джаве?) Почему вообще выбор между апасем и лайтппд, а не просто нгинкс?


  1. Ratenti
    21.11.2023 20:27

    Del


  1. Teimir
    21.11.2023 20:27

    Неплохая статья


  1. vadikvs
    21.11.2023 20:27

    Не пойму только зачем веб-сервер, если там прост бот на java?


  1. Deroswent
    21.11.2023 20:27

    Статья прикольная, но зачем) в совсерменнм мире можено получить навсегда кучу бесплатных ВПС в оракле, гугле, aws и т.д. и поднять тысячи таких ботов на них. А за питанием/интернетом на них будут следить лучшие ДЦ мира.

    Просто, юзабельно, в браузере, на шару, и очень качественно.


  1. SidVisceos
    21.11.2023 20:27

    Ок. Что то там на смартфоне может крутиться типа как веб апп.

    Но если говорим о ботах - как настроить вебхуки?


  1. yason2
    21.11.2023 20:27

    И никто не описал проблему сбрасывания частот, прибывания сервисов андроидом при уходе в спящий режим.

    Возможно я так плохо настроил, но всё запускаемые через SSH, дико просаживается в производительности при отключении экрана.


  1. zbara65
    21.11.2023 20:27

    По поводу боязни постоянной подзарядки , при наличии рута ставится программа Advanced Charging Controller и там задается параметры , например заканчивать зарядку при 85% и начинать зарядку при 30% , и всё , тлф не перезарядится и не уйдет в ноль. Так же есть подобная программа Battery Charge Limit , всё это и как установить и пользоваться а так же как поставить рут есть на нашем любимом 4pda )))


  1. Constantine174RUS
    21.11.2023 20:27

    Молодец, реально. Мне статья понравилась, жаль я не из ваших.