We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Linux в Termux: запуск full‑stack веб‑серверов (Nginx, Node.js, MySQL) на Android

Подробное руководство по установке и настройке Nginx, Node.js и MySQL в Termux. Узнайте, как превратить Android‑устройство в полноценный full‑stack сервер.

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. Свяжитесь с нами, и ваш проект обретёт надёжную инфраструктуру!

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект