Предыстория
Все началось с того что я написал своего бота и решил его выложить в открытый доступ, а точнее чтобы он работал круглосуточно, но платить деньги за хостинг мне не хотелось. И тогда я вспомнил, что у меня как раз в ящиках залежались старые 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
Скачиваем приложение с https://userland.tech/ или https://github.com/CypherpunkArmory/UserLAnd.
Устанавливаем и даем доступ к файлам.
Выбераем Linux дистрибутив, я выбрал Ubuntu:
Устанавливаем пароль и имя. Выбираем тип подключения ssh (Можно другие типы, но мне так удобнее).
Ждем установки, оно само перекинет нас к терминалу.
-
Все, линукс установлен, но давайте еще установим несколько пакетов для работы.
Обновим установленые пакеты:
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)
outlingo
21.11.2023 20:27+1Бот у меня написан на Java
Можно было просто добавить простейшую активити пускающую бота в отдельном треде. Хотя, тогда же "статью" написать было бы не о чем
Ratenti
21.11.2023 20:27Но среда выполнения в Android не поддерживает современные возможности Java же.
Android 5 поддерживает Java 7.
djamali
21.11.2023 20:27+1Бро у тебя ошибка в предложении : "ВАЖНО: ФАЙЛ, КОТОРЫЙ ПРЕВЕДЕН НИЖЕ, МОЖЕТ ВЫЗВАТЬ СИНТАКСИЧЕСКУЮ ОШИБКУ. ЕСЛИ ТАКОВАЯ ЕСТЬ, НАПИШИТЕ В КОМЕНТАРИЯХ К СТАТЬЕ". : Приведен.
А статья в целом прикольна))
Araki_Satoshi
21.11.2023 20:27+2Проблема запуска чего-то, рассчитанного на работу 24/7 на смартфоне весьма очевидна - батарея. С одной стороны да, классно, даже бесперебойник не нужен. Если отключили свет, то он просто продолжит работать от батареи. Но с другой стороны, я бы побоялся держать смартфон на зарядке 24/7. Может только где-то на видном месте если.
ds138
21.11.2023 20:27Тоже несколько раз думал из телефона сделать что нибудь и каждый раз останавливала такая же мысль. Думал даже прикрутить какое нибудь DI DO на ESP и релюшкой отключать зарядку, но стало лениво делать ещё одну погремушку.
Otard
21.11.2023 20:27Розетка с циклическим таймером позволяет избавится от фобии.
Zhuck
21.11.2023 20:27Аккумулятор зарядом/разрядом так же быстро убьётся. Возможно как-то можно ограничить уровень заряда, процентов до 70 и чтоб там держало. Тогда и перезаряд не страшен и аккумулятор в оптимуме держаться будет
hullaballoo
21.11.2023 20:27Заряд-разряд аккумулятора называется его эксплуатацией. Если не гнать через него фантастические токи, не разряжать в ноль и не перезаряжать, то он проживёт долго.
fasvik
21.11.2023 20:27В идеале рекомендуют держать заряд батареи в диапазоне 20-80%, самый "эталон" чтобы батарейке плохо не было. Вот только я понятия не имею как отслеживать уровень заряда) был бы рад если у кого есть идеи, самому хотелось бы свой wp9 с большой батареей так "убивать" как можно меньше
RoyalDutch
21.11.2023 20:27+1На самсунг гэлэкси с22 ультра и других самсунагх есть функция ограничения заряда до 85%
shadrap
21.11.2023 20:27+1Старый Самсунг Гэлакси Альфа пять лет работает , до этого Карбонн S9 жил , на даче в качестве сервера 24.7 воткнутый в зарядку на постоянку. Вот когда я Карбону вдруг, ради безопасности, решил воткнуть регулятор заряда 20-80 , вот тогда он накрылся и пришлось его заменить на Самсунг) Мне кажется нормально сделанные смарты довольно толерантны к 100% заряду.
Doman
21.11.2023 20:27Если положить в огнеупорный чехол, то должно быть норм. У меня LiPo батарейки в таком хранятся.
NutsUnderline
21.11.2023 20:27ну тот же wifi роутер и свитч в подьезде отвалятся, так что еще нужно sim с интернетом тогда
402d
21.11.2023 20:27+1Не ужели у вас столько платформозависимого кода в вашем боте, что нельзя было бота сразу пересобрать под Android ? Хотя в этом случае не было б статьи про увлекательное занятие установки юникса в эмуляторе и еще одной явомашины внутри очередной матрешки.
DGG
21.11.2023 20:27Простейшие боты на Питоне и клиенты telethon вполне удавалось запускать через QPyton или Pydroid под Андроидом
SiberianMouse
21.11.2023 20:27У меня пайдроид ни с одним кодом не завелся почему то. На пека все стабильно
theurus
21.11.2023 20:27Оракл даёт бесплатные виртуалки всем желающим, ну кроме русских конечно. 1 ядро 1 гиг 50мбит без учёта трафика, 200гб диск.
chifth
21.11.2023 20:27Но они так фанатично ищут абузеров, что даже с нормальной страной и картой тяжело зарегистрироваться. Я решал уже через саппорт. Только тогда получилось.
Раз уж на то пошло - там 2 виртуалки по 1C\2T 1GB RAM, и одна 4C\4T ARM64 , 24GB RAM (правда получить очень трудно). И 200ГБ места на все. Т.е я нарезал 50+50+100.
ddruganov
21.11.2023 20:27+3Зачем ставил лайтппд и пхп, если бот на джаве?) Почему вообще выбор между апасем и лайтппд, а не просто нгинкс?
Deroswent
21.11.2023 20:27Статья прикольная, но зачем) в совсерменнм мире можено получить навсегда кучу бесплатных ВПС в оракле, гугле, aws и т.д. и поднять тысячи таких ботов на них. А за питанием/интернетом на них будут следить лучшие ДЦ мира.
Просто, юзабельно, в браузере, на шару, и очень качественно.
SidVisceos
21.11.2023 20:27Ок. Что то там на смартфоне может крутиться типа как веб апп.
Но если говорим о ботах - как настроить вебхуки?
yason2
21.11.2023 20:27И никто не описал проблему сбрасывания частот, прибывания сервисов андроидом при уходе в спящий режим.
Возможно я так плохо настроил, но всё запускаемые через SSH, дико просаживается в производительности при отключении экрана.
zbara65
21.11.2023 20:27По поводу боязни постоянной подзарядки , при наличии рута ставится программа Advanced Charging Controller и там задается параметры , например заканчивать зарядку при 85% и начинать зарядку при 30% , и всё , тлф не перезарядится и не уйдет в ноль. Так же есть подобная программа Battery Charge Limit , всё это и как установить и пользоваться а так же как поставить рут есть на нашем любимом 4pda )))
ErshoffPeter
Реально здорово! Теперь есть куда залежи старых телефонов пристроить!
Ratenti
Будешь хостинг сервис открыть?
ErshoffPeter
А почему бы и нет? Мобильный хостинг!
Раньше для определённых случаев в Газеле ЦОД делали, а теперь решение задачи упрощается - сумки или рюкзака или чемодана достаточно будет... ????
yri066
Как вариант, можно установить Kali Linux (nethunter), тоже неплохая система для телефона
ErshoffPeter
Спасибо! ????