Termux – это терминальное приложение для Android, предоставляющее полноценную среду Linux. Благодаря пакетному менеджеру pkg и поддержке репозиториев, в Termux можно установить большинство серверных компонентов и собрать полноценный full‑stack стек: веб‑сервер Nginx, runtime‑окружение Node.js и СУБД MySQL. В этой статье мы пошагово разберём, как развернуть такой стек на обычном смартфоне или планшете.
Подготовка окружения
Перед началом убедитесь, что у вас установлен Termux из официального репозитория (Google Play или F-Droid). После первого запуска обновите пакеты:
pkg update && pkg upgrade -y
Установим базовые утилиты, которые понадобятся в дальнейшем:
pkg install -y curl wget git tar proot
Для комфортной работы рекомендуется добавить ~/.bashrc alias‑ы, например:
echo "alias ll='ls -la'" >> ~/.bashrc
Установка и настройка Nginx
Nginx в Termux доступен через пакет nginx. Установим его и запустим базовую конфигурацию:
pkg install -y nginx
После установки проверьте версию:
nginx -v
Запустим сервер в фоновом режиме:
nginx
По умолчанию Nginx слушает порт 8080. Откройте браузер на устройстве и перейдите по адресу http://127.0.0.1:8080 – вы увидите стартовую страницу Nginx.
Для изменения порта отредактируйте файл /data/data/com.termux/files/usr/etc/nginx/nginx.conf:
sed -i 's/listen 8080;/listen 80;/' /data/data/com.termux/files/usr/etc/nginx/nginx.conf
Перезапустите сервис:
nginx -s reload
Обратите внимание, что порт 80 может быть занят другими приложениями. Если возникнут конфликты, используйте любой свободный порт (например, 8081).
Установка Node.js
Node.js в Termux устанавливается пакетом nodejs. Выполняем установку:
pkg install -y nodejs
Проверяем версию:
node -v
Создадим простое приложение на Express, которое будет обслуживаться через Nginx:
mkdir -p ~/myapp && cd ~/myapp
npm init -y
npm install express
Файл index.js:
cat > index.js <<'EOF'
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => res.send('Hello from Node.js on Termux!'));
app.listen(PORT, () => console.log(Server running on http://localhost:${PORT}));
EOF
Запускаем приложение в фоне (рекомендуется использовать pm2 или nohup, но для простоты покажем nohup) :
nohup node index.js &
Проверяем, что приложение отвечает:
curl http://127.0.0.1:3000
Настройка обратного прокси в Nginx
Чтобы Nginx перенаправлял запросы к Node.js, создадим отдельный серверный блок. Откройте файл /data/data/com.termux/files/usr/etc/nginx/conf.d/default.conf и замените содержимое на:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
EOF
Перезапустим Nginx:
nginx -s reload
Теперь запросы к http://127.0.0.1 будут обслуживаться Node.js‑приложением через Nginx.
Установка MySQL (MariaDB)
Традиционный MySQL недоступен в официальных репозиториях Termux, но вместо него отлично подходит MariaDB – полностью совместимый форк. Установим его:
pkg install -y mariadb
Инициализируем базу данных:
mysql_install_db --user=$(whoami) --basedir=$PREFIX --datadir=$PREFIX/var/lib/mysql
Запускаем сервер в фоне:
mysqld_safe --datadir=$PREFIX/var/lib/mysql &
Создадим безопасного пользователя и базу для нашего проекта:
mysql -u root -e "CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -e "CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd';"
mysql -u root -e "GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';"
mysql -u root -e "FLUSH PRIVILEGES;"
Подключим MySQL к нашему Node.js‑приложению. Установим драйвер:
npm install mysql2
Обновим index.js:
cat > index.js <<'EOF'
const express = require('express');
const mysql = require('mysql2/promise');
const app = express();
const PORT = 3000;
(async () => {
const pool = await mysql.createPool({
host: '127.0.0.1',
user: 'myapp_user',
password: 'StrongP@ssw0rd',
database: 'myapp_db',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
app.get('/', async (req, res) => {
const [rows] = await pool.query('SELECT NOW() AS now');
res.send(Hello from Node.js + MySQL! Server time: ${rows[0].now});
});
app.listen(PORT, () => console.log(Server running on http://localhost:${PORT}));
})();
EOF
Перезапустим приложение:
pkill node
nohup node index.js &
Обновлённый ответ теперь будет включать дату и время из MySQL.
Автозапуск сервисов
Чтобы серверы поднимались автоматически после перезагрузки устройства, используем termux-wake-lock и скрипты в ~/.termux/boot (доступно в Termux:Boot). Пример скрипта start_services.sh:
#!/data/data/com.termux/files/usr/bin/sh
# Запуск MySQL
mysqld_safe --datadir=$PREFIX/var/lib/mysql &
# Запуск Nginx
nginx
# Запуск Node.js
cd ~/myapp && nohup node index.js &
Сделайте файл исполняемым:
chmod +x ~/.termux/boot/start_services.sh
Установите пакет termux-api (если ещё не установлен) и включите автозапуск в настройках Termux:Boot.
Тонкая настройка и безопасность
- SSL/TLS. Для работы в открытом интернете используйте
opensslиcertbot(черезacme.sh) для получения сертификата Let’s Encrypt. - Файрвол. В Termux нет iptables, но можно ограничить доступ с помощью
sshdи настройки~/.ssh/authorized_keys. - Резервное копирование. Базы данных экспортируйте командой
mysqldump -u myapp_user -p myapp_db > ~/backup.sqlи храните в облаке. - Мониторинг. Для наблюдения за нагрузкой используйте
htopиncdu.
Тестирование полного стека
Проверьте работу всех компонентов одной командой:
curl -I http://127.0.0.1
Вы должны получить заголовок 200 OK и тело, сформированное Node.js, которое в свою очередь читает данные из MySQL.
Заключение
Termux превращает обычный Android‑смартфон в полноценный Linux‑сервер, позволяя разворачивать стек Nginx + Node.js + MySQL без необходимости в отдельном оборудовании. Это идеальное решение для разработки, тестирования прототипов и даже небольших продакшн‑проектов в условиях ограниченных ресурсов.
Если вам требуется более глубокая настройка, миграция в облако, контейнеризация с Docker (через proot-distro) или поддержка CI/CD, команда RybinskLab готова помочь. Мы предоставляем услуги по настройке серверов, оптимизации производительности и обучению персонала работе с Linux‑окружениями на Android. Свяжитесь с нами, и ваш проект обретёт надёжную инфраструктуру!