Как поднять сервер на андроид
Как превратить смартфон на Android в веб-сервер
Нужно маломощное устройство для запуска вашего сайта? Хотите освободить место, занимаемое вашим веб-сервером? Хотели бы вы поделиться информацией с людьми, друзьями или публикой, но у вас нет средств для запуска полномасштабного веб-сервера?
Или вы можете разместить свою веб-страницу, используя смартфон или планшет на Android. Вот как можно создать простой веб-сервер Android.
Android: недорогой веб-сервер у вас в кармане
Веб-сайтам не нужны дорогие серверы. Сейчас мы находимся на этапе, когда вы можете разместить на скромном устройстве динамический веб-сайт, управляемый базой данных.
Например, вы можете использовать стандартный настольный ПК или ноутбук. Но так как это занимает много места, вы можете сократить еще больше.
Это немедленно снимает ваши расходы на хостинг. Если количество просмотров страниц низкое, вы должны обнаружить, что ваш сайт работает без блокировки устройства (хотя вы не должны ожидать многозадачности во время работы сайта!).
Шаг 1: Установите Tiny Web Server для Android
Для Android доступны различные серверные приложения. Однако многие из них устарели и предназначены для более старых версий Android (таких как PAW Server).
Мы используем Tiny Web Server для этого урока. При этом мы загрузим основной файл index.html и перейдем к нему с ПК в той же сети, чтобы проиллюстрировать использование Android в качестве веб-сервера.
Подобные приложения основаны на тех же принципах. В основном, те же концепции и процессы необходимы для предоставления веб-страницы браузеру для просмотра.
Скачать: Tiny Web Server для Android (бесплатно)
Шаг 2: Настройте Tiny Web Server
Этот инструмент очень упрощенный способ подачи контента с вашего телефона. Тем не менее, он позволяет вам получить доступ к файлам удаленно. Например, вы можете просматривать память телефона из веб-браузера вашего компьютера, если оба находятся в одной сети.
Из-за этой простоты в Tiny Web Server нет возможности настройки. Это означает, что вы не можете принудительно установить его по умолчанию в файл index.html.
После установки Tiny Web Server запустите приложение. На главном экране у вас есть опция Изменить путь к серверу, что полезно, если вы хотите указать каталог для хранения ваших веб-файлов.
Вы также можете указать кодировку по умолчанию (полезно, если у вас нет сайта на английском языке) или порт сервера.
Шаг 3: Добавьте Index.html на Tiny Web Server
Чтобы использовать Tiny Web Server для обслуживания веб-страниц, вам нужно создать файл index.html и загрузить его в нужную папку. Вы можете сделать это на своем рабочем столе, используя текстовый редактор, например Notepad ++, или на Android, используя HTML или текстовый редактор.
Скопируйте файл в нужный каталог (через USB или с помощью файлового менеджера Android) на устройстве Android. На Android переместите файл в /storage/emulated/0.
Если вы копируете файл через USB на телефон, перейдите к хранилищу телефона в диспетчере файлов. Местоположением по умолчанию должен быть эмулируемый подкаталог. Скопируйте файл HTML в этот каталог, затем безопасно отключите устройство.
После того, как файл скопирован на Android, откройте Tiny Web Server и нажмите «Запустить сервер». Перейдите в своем браузере к URL-адресу по умолчанию, добавив /index.html в конец.
Поздравляем, вы превратили свое Android-устройство в простой веб-сервер! Конечно, показанный пример является чрезвычайно простым и не имеет стиля. К счастью, легко добавить CSS с помощью обычной инструкции в файле HTML. Мы рассмотрели некоторые основы CSS если вы новичок. Лучше всего, вы все еще можете использовать свой телефон или планшет в обычном режиме во время хостинга сайта.
Как люди посещают страницы вашего веб-сервера Android?
Не имеет значения, размещаете ли вы свой сайт на смартфоне, планшете или даже на Android-телевизоре.
Какое бы устройство Android вы не выбрали, при использовании вместе с клиентом динамического обновления DNS (из них No-IP.com имеет приложение для Android), вы сможете обслуживать веб-страницы на компьютерах вне домашней или корпоративной сети. Эти приложения связывают динамический IP-адрес вашего устройства с выделенным URL-адресом через устанавливаемое клиентское приложение.
Как люди посещают страницы вашего веб-сервера Android?
Не имеет значения, размещаете ли вы свой сайт на смартфоне, планшете или даже на Android-телевизоре.
Какое бы устройство Android вы не выбрали, при использовании вместе с клиентом динамического обновления DNS (из них No-IP.com имеет приложение для Android), вы сможете обслуживать веб-страницы на компьютерах вне домашней или корпоративной сети. Эти приложения связывают динамический IP-адрес вашего устройства с выделенным URL-адресом через устанавливаемое клиентское приложение.
Построение веб-сервера Android
Мы рассмотрели основные этапы создания веб-сервера на платформе Android. На случай, если вы их пропустили, давайте напомним себе.
- Убедитесь, что ваше Android-устройство подключено к сети
- Установите Tiny Web Server
- Создать HTML-файл (ы)
- Загрузите файл (ы) на ваше устройство Android
- Запустите Tiny Web Server
Если веб-сайт относительно простой, вы можете использовать свое Android-устройство в качестве хоста и сэкономить деньги на питании дорогого сервера. Точно так же вы можете повторно использовать пространство, используемое сервером или ПК, работающим в качестве веб-сервера. Возможно, вы можете использовать сервер для других целей.
В Android создание веб-сервера — это всего лишь один из вариантов. Взгляните на некоторые более полезные способы использования старого смартфона.
Превращаем старый телефон на Android в веб-сервер
Есть ли у вас старый телефон на Android? Наверняка есть! В мире накопилось безумное количество всевозможного электронного мусора, и в среднем гражданин развитой страны меняет телефон каждую пару лет, поэтому старые телефоны, вероятно, один из самых распространённых видов электронных отходов.
У меня залежался собиравший пыль старый Motorola G5 Cedric, поэтому я решил сделать с ним что-нибудь, и теперь на нём работает веб-сервер Puma с простым веб-приложением на Sinatra.
Возможно, вы зададитесь вопросом: в чём реальная, практическая польза всего этого? Производительность старого телефона на Android, наверно, не будет особо высокой, впрочем, как и у всех этих t2.nano . Я пока не разворачивал на Android никакого «реального» кода, но даже у дешёвых и старых телефонов сегодня есть четырёхъядерные или даже восьмиядерные ЦП, не менее 2 ГБ ОЗУ, поэтому, теоретически, телефон должен быть близок (хотя бы примерно) к самым скромным облачным решениям IaaS (например, у t2.nano всего 512 МБ). Разумеется, в телефоне стоит процессор ARM, а в IaaS обычно установлены x86; управление памятью тоже совершенно различается, но тем не менее, мы ведь говорим о приблизительном сравнении.
Как бы то ни было, в этой статье я приведу краткий туториал по превращению устройства на Android в веб-сервер, или даже в любое количество других устройств.
1. Установка Termux
Первым делом нужно настроить в телефоне окружение Linux. Termux — это эмулятор терминала и окружение Linux для Android. Его можно установить из Google Play Store. После установки не требуется никакая дополнительная настройка.
2. Настройка SSH
На крошечном сенсорном экране вводить кучу команд неудобно, поэтому давайте настроим ssh, чтобы можно было входить в Termux удалённо.
Существует множество способов сделать это, но мне кажется, проще всего использовать ПО Dropbear:
Выполните на Android следующие команды:
Можно использовать парольную аутентификацию или аутентификацию публичным ключом. Вам следует использовать аутентификацию ключом, но для тестирования больше подходит пароль.
Выполните на Android следующие команды:
Бонусные очки: установите мультиплексор терминалов, например, tmux или screen . Это сильно упростит вашу жизнь при выполнении команд через ssh:
Теперь протестируем подключение на настольном компьютере:
3. Настраиваем статический IP-адрес на Android
Зайдите в настройки WiFi, отключите DHCP и назначьте телефону IP-адрес.
Это необходимо, чтобы ваш роутер каждые несколько часов/дней не назначал телефону новый IP-адрес, что сильно бы усложнило бы конфигурирование.
4. Установка Ruby, Bundler, Sinatra и Puma
Sinatra — это легковесный фреймворк веб-приложений, а Puma — веб-сервер.
Разумеется, Sinatra и Puma — это лишь моё предложение, вы вполне можете использовать на телефоне полнофункциональные Rails, как написано в этом качественном туториале. Только не используйте WEBRick — находящийся в разработке веб-сервер Rails по умолчанию; он однопроцессный, однопоточный, а потому не подходит для продакшена (но вполне хорош для небольших экспериментов).
Выполните на Android следующие команды:
Установка nginx
nginx — это веб-сервер, обратный прокси-сервер и балансировщик нагрузки. Хотя он наиболее полезен в многосерверных системах, где используется для распределения запросов по разным инстансам, в нашей системе его тоже будет полезно использовать из-за встроенной защиты от DDoS и статического обслуживания файлов.
Выполните на Android следующую команду:
Теперь немного сложная часть, мы будем настраивать nginx для работы с Puma. Неплохим началом может быть этот gist — скопипастите nginx.conf и смените appdir на корневой каталог вашего веб-приложения. Например, в моём случае это будет /data/data/com.termux/files/home/android-sinatra .
Настройка переадресации портов
Вероятно, вы захотите, чтобы ваш веб-сервер был доступен через Интернет, поэтому необходимо настроить в роутере переадресацию портов, чтобы перенаправлять входящие запросы к вашему публичному IP-адресу на новый веб-сервер на Android.
Этот процесс зависит от конкретной модели роутера. Здесь представлен неплохой вводный туториал.
Настройка динамического DNS
У большинства людей публичные IP-адреса являются динамическими. В таких случаях полезно настроить сервис динамического DNS (DDNS), предоставляющий статическое доменное имя, автоматически выполняющее перенаправление на текущий публичный IP-адрес.
Сегодня есть несколько бесплатных сервисов, предоставляющих DDNS; я пользуюсь no-ip и пока меня он вполне устраивает. Однако каждый месяц нужно «обновлять» свой домен.
После настройки DDNS необходимо настроить и свой роутер, чтобы он периодически уведомлял сервис DDNS о текущем IP-адресе. Этот процесс тоже зависит от модели роутера.
Hello world!
Puma и nginx, запущенные на Motorola G5.
Под осадой
Вы можете имитировать реальное использование сервера при помощи ПО для тестирования http-нагрузки siege . Ниже показан скриншот siege , запущенного для моей системы с тремя одновременными пользователями (при реальных тестах используются более серьёзные значения):
На переднем плане работает siege; на фоновых терминалах логи nginx.
Числа на скриншоте не особо важны, поскольку наше веб-приложение передаёт простой стосимвольный ответ с меткой времени, но этого достаточно, чтобы понять, что сервер может справляться хотя бы с несколькими одновременными пользователями.
Эпилог: безопасность
Если вы смотрели сериал «Мистер Робот», то знаете, что Интернет может быть опасным местом. И это ещё более справедливо, если у вас есть открытый в Интернет веб-сервер.
Всего за несколько часов после открытия сервера на него уже залезли всевозможные штуки. Большинство было безобидными индексирующими роботами, но некоторые точно не такие хорошие, например, эти два запроса:
Большинство из этих запросов кажется нормальным, но два красных — это, скорее всего, какая-то атака.
То есть вывод здесь такой: обновляйте всё ПО, следите за логами доступа и, возможно, изучите руководства по безопасности nginx, например, это и это.
Веб-сервер на старом смартфоне Android
Бывает такое, что смартфон становится ненужным — например, на нём разбивается экран или он просто старенький, тормозит даже браузер. Что делать с таким гаджетом, не выбрасывать же его? В самом деле, американцы летали на Луну с компьютерами, у которых характеристики много хуже, чем в вашем старом смартфоне. Скорее всего, в нём 4−8 процессорных ядер, 2−4 гигабайта оперативной памяти, блок бесперебойного питания с аккумулятором. Не слабее, чем некоторые компьютеры.
Попробуем найти этому смартфону полезное применение.
Рассматриваем варианты
Первый вариант, который приходит в голову — установить на телефон Linux-окружение и какой-нибудь полезный софт, который будет работать в «фоновом режиме» на пользу домашнему хозяйству. Что это может быть?
Ясно, что телефон не сможет работать как медиасервер и обрабатывать видеопотоки, для этого у него слишком слабый процессор.
Теоретически можно подключить к нему внешний HDD (тоже остался от сломанного ноутбука, для него куплен специальный корпус-переходник с интерфейсом USB). Даже на ёмкой карте microSD он вполне может работать как файловое хранилище или сервер для бэкапов, места хватит. Правда, карты microSD вряд ли можно посоветовать как надёжное хранилище, они часто выходят из строя.
Простая синхронизация
Если поднимать на телефоне сервер для бэкапов или файловый сервер, то самый простой вариант — это установить программу Syncthing.
Syncthing выполняет непрерывную синхронизацию файлов между двумя или более компьютерами в режиме реального времени. В таком варианте синхронизации отсутствует центральный сервер, а все компьютеры участвуют в синхронизации как бы peer-to-peer. Синхронизация идёт по дате изменения файла, ещё имеется поддержка синхронизации на уровне блоков, т.е. при небольших изменениях в файле, будут синхронизированы только изменившиеся блоки, а не весь файл сразу. Трафик шифруется по TLS (transport layer security). Опять же, программа с открытым исходным кодом, что говорит в пользу надёжности и безопасности такого решения.
В любом случае для персональных компьютеров и ноутбуков в доме нужно резервное хранилище, так что это вполне подходящий вариант.
Syncthing выпускается под все распространённые операционные системы: Linux, Windows, macOS, FreeBSD, OpenBSD, NetBSD, Dragonfly BSD, Illumos, Solaris. Ну и Android, конечно. То есть можно выполнять синхронизацию файлов между всеми этими устройствами, если поставить клиент на каждое из них. Затем в программе на компьютере добавляем ID устройства — и они синхронизируются.
Syncthing на компьютере
Затем остаётся выбрать папки для синхронизации на компьютере и телефоне.
Syncthing на телефоне
Потом программа может постоянно работать в фоновом режиме. Как вариант, можно установить конкретные условия, при которых она выполняется.
Сервер для резервного копирования под Linux
Можно поставить более серьёзную программу — UrBackup. Это опенсорсный сервер для резервного копирования. Он может работать по такому же принципу, что и Syncthing — постоянно в фоновом режиме отслеживать папки, которые требуется сохранять в резервной копии, но это более серьёзное решение, которое предпочтительно при управлении бэкапами в сети из десятка компьютеров. Система кроссплатформенная и поддерживает дистрибутивы Linux, Windows и Mac OS.
Веб-интерфейс UrBackup
Чтобы заработал UrBackup, нужно установить Linux-окружение. Тут у нас есть два варианта:
- Установить настоящий дистрибутив через Linux Deploy — опенсорсное приложение с открытым исходным кодом для простой и быстрой установки GNU/Linux на Android.
- Установить Linux-окружение Termux.
Первый вариант более сложный. Но теоретически он позволяет более эффективно использовать ресурсы системы.
Обязательное требование — рутованный смартфон (для рутования можно использовать инструмент, например, такой Magisk).
Итак, алгоритм примерно такой, судя по инструкции от Ханны Ли, которая и реализовала этот план.
- Подключаем HDD/SSD к телефону. Можно подключить его USB-кабелем напрямую: в этом случае мы получим максимально возможную скорость. Но на реальном файл-сервере или сервере бэкапов скорость не всегда является самым критичным фактором, разве что на очень больших объёмах чтения/записи. Важнее стабильность. С USB-кабелем гораздо выше риск столкнуться с ошибками ввода-вывода в процессе копирования.
Поэтому для повышения надёжности лучше использовать USB-хаб, в котором есть microUSB для выхода на телефон и стандартный USB для подключения HDD, плюс дополнительный разъём для питания.
В идеале нужно покупать хаб с адаптером Ethernet. Сервер может работать и по WiFi, но кабельное подключение надёжнее.
USB-хаб с разъёмом Ethernet и выходом microUSB
Примонтировать HDD к телефону, то есть сделать его доступным для операционной системы на телефоне. Если не планировать форматирование диска в будущем, то его можно сразу добавить в mounts — и он будет монтироваться при каждой загрузке. После примонтирования его уже не получится форматировать, да это обычно и не нужно. Лучше монтировать его как логический диск, а не физическое устройство, потому что в последнем случае его имя ( /dev/block/sdX ) может измениться после перезагрузки, а это нежелательно. Если примонтировать его как логический диск ( /dev/sdX ), то имя не изменится.
Найти подключённый HDD, то есть узнать его имя в системе, можно командой lsblk .
Создаём рабочую директорию, устанавливаем стартовый скрипт, запускаем сервис и создаём крон для него. После этого сервер будет доступен через веб-интерфейс по адресу http://YOUR_SERVER_IP:55414 .
Termux
Возможно, всё это можно сделать без рутования, с использованием Linux-окружения Termux. Проверим, так ли это.
Termux — это бесплатный эмулятор консоли и Linux-окружение под Android, которое устанавливается как обычное приложение и не требует рутового доступа, включает в себя множество пакетов операционной системы Linux. В базовом формате там установлен минимум, дополнительные пакеты можно организовать при помощи диспетчера пакетов «pkg» (аналоге apt). Это самый удобный способ запустить на Android практически любые линуксовые программы. Лучше устанавливать его с F-Droid, а не из Google Play.
Изначально Termux устанавливается в виде «голого» эмулятора. При первом запуске загружается небольшая базовая система, а все нужные пакеты можно установить с помощью менеджера пакетов apt , стандартного для Debian и Ubuntu. Но его тоже нужно будет установить с помощью встроенного пакетного менеджера pkg .
В нашем случае можно сразу установить apt:
Затем с его помощью установить wget, ну или использовать родную команду pkg :
Потом можно установить тот же UrBackup, другой файл-сервер или сервер резервного копирования на свой выбор.
К примеру, можем поставить веб-сервер nginx:
После этого запускаем веб-сервер:
Если открыть браузер на смартфоне и набрать localhost:8080 , то мы увидим работающий веб-сервер:
Теперь можно скопировать в рабочую директорию nginx файлы HTML — и на телефоне будет полноценный сайт, который можно открыть для общего доступа через интернет. Тогда у нас будет собственный сервер и собственный хостинг, мы не платим никакому провайдеру, кроме сотового оператора, и можем публиковать в интернете что угодно. В принципе, сайт будет всем доступен до тех пор, пока телефон подключён к сотовой сети, на нём открыта сессия Termux, а в ней запущен nginx. Главное, чтобы сотовый оператор не блокировал этот трафик, потому что мы формально можем нарушать его условия обслуживания.
Конечно, для надёжного хостинга лучше рутануть смартфон и установить нормальный дистрибутив через Linux Deploy. Но и в Termux всё работает, как видим.
Вывод: Таким образом, даже из старого смартфона Android можно сделать адекватный, полнофункциональный многоядерный Linux-сервер на ARM-архитектуре. Если подключить внешний HDD/SDD, то он будет работать как хранилище файлов, сервер резервного копирования для домашней сети или веб-сервер, для ваших личных нужд.
НЛО прилетело и оставило здесь промокоды для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS .