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

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

Полный LAMP‑стек в Termux: настройка Apache 2, PHP‑FPM, MariaDB и оптимизация производительности

Пошаговая сборка LAMP в Termux: Apache 2, PHP‑FPM, MariaDB, настройка и безопасная работа. Практические советы по производительности и устойчивости на Android.

Termux позволяет запускать полноценную рабочую среду на Android: от консольных утилит до полноценного веб‑сервиса. В этой статье мы соберём «полный LAMP‑стек» в Termux: Apache 2 (веб‑сервер), PHP‑FPM (интерпретация PHP через FastCGI), MariaDB (сервер баз данных) и выполним базовую оптимизацию под реальную нагрузку и работу в долгих сессиях.

Важно: в рамках статьи мы настраиваем локальную разработочную среду на вашем устройстве. Для доступа извне не рассматриваем обход ограничений и не используем материалы, нацеленные на нарушение законодательства. Всё ориентировано на локальное использование.

Что потребуется

  • Android‑устройство с установленным Termux.
  • Доступ к сети (для загрузки пакетов).
  • Комфортный терминал (Termux по умолчанию подходит).
  • Желательно: карта памяти/достаточно места, т.к. MariaDB создаёт файлы базы.

Рекомендуемый подход — держать данные БД и конфиги в одном каталоге внутри Termux, чтобы не потерять окружение при переустановках.

Подготовка окружения Termux

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

pkg update -y
pkg upgrade -y
pkg install -y apache2 php php-fpm mariadb termux-services wget ca-certificates nano openssl

Пакеты могут немного различаться по названиям в зависимости от текущего репозитория Termux. Если какой‑то пакет отсутствует, сообщите — подскажу альтернативы под вашу версию.

Структура проекта и директории

Создадим рабочие директории. Будем хранить веб‑контент отдельно, а данные MariaDB — в отдельной папке.

mkdir -p $HOME/lamp-stack
mkdir -p $HOME/lamp-stack/web
mkdir -p $HOME/lamp-stack/db
mkdir -p $HOME/lamp-stack/run
mkdir -p $HOME/lamp-stack/logs

Дальше привяжем Apache и MariaDB к этим директориям.

Настройка Apache 2

Termux‑реализация Apache обычно подразумевает модификацию конфигурации и/или отдельных файлов под FastCGI. Мы сделаем конфигурацию «под PHP‑FPM», чтобы Apache передавал запросы на PHP через сокет FastCGI.

Создадим минимальную конфигурацию с указанием документа‑рута и проксированием PHP на PHP‑FPM.

cd $HOME/lamp-stack

# Папка конфигураций, если требуется
mkdir -p $HOME/lamp-stack/apache

# Создадим отдельный конфиг Apache
cat > $HOME/lamp-stack/apache/000-lamp.conf <<'EOF'
ServerName localhost

DocumentRoot $HOME/lamp-stack/web

<Directory $HOME/lamp-stack/web>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

# Отдаем статические файлы напрямую, а PHP — через FastCGI
<FilesMatch "\.php$">
    SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

# Логи
ErrorLog $HOME/lamp-stack/logs/apache-error.log
CustomLog $HOME/lamp-stack/logs/apache-access.log combined
EOF

Теперь подключим этот конфиг к Apache. В зависимости от версии Apache в Termux может использоваться включение через /etc/apache2/conf-enabled или аналог. Проверим типичные пути:

ls -la /data/data/com.termux/files/usr/etc/apache2 2>/dev/null || true
ls -la $PREFIX/etc/apache2 2>/dev/null || true

В большинстве случаев $PREFIX в Termux равен /data/data/com.termux/files/usr. Тогда целевой путь будет $PREFIX/etc/apache2. Далее попробуем вставить конфиг в conf-enabled.

CONF_DIR="$PREFIX/etc/apache2"

# Проверка существования папки conf-enabled
if [ -d "$CONF_DIR/conf-enabled" ]; then
  cp -f $HOME/lamp-stack/apache/000-lamp.conf $CONF_DIR/conf-enabled/000-lamp.conf
elif [ -d "$CONF_DIR/sites-enabled" ]; then
  # Если логика включения через sites-enabled — подключим через виртуальный хост.
  # Для простоты можно создать site.conf, но обычно достаточно conf-enabled.
  echo "Найден sites-enabled, но ожидается conf-enabled. Проверьте структуру $CONF_DIR";
else
  echo "Не найден стандартный путь включения конфигов Apache в $CONF_DIR";
  echo "Проверьте конфигурационные пути Apache в Termux";
fi

Создадим тестовую PHP‑страницу.

cat > $HOME/lamp-stack/web/index.php <<'EOF'
<?php
phpinfo();
EOF

Настройка PHP‑FPM

PHP‑FPM будет слушать FastCGI‑запросы. Мы настроим его на порт 9000 и убедимся, что Apache видит этот порт.

Сначала найдём конфигурацию PHP‑FPM. Обычно это будет один из файлов вида www.conf в php-fpm.d.

FPM_DIR="$PREFIX/etc/php-fpm.d"
ls -la "$FPM_DIR" 2>/dev/null || true

# Попробуем стандартный файл
FPM_CONF_FILE="$FPM_DIR/www.conf"
ls -la "$FPM_CONF_FILE" 2>/dev/null || true

Отредактируем www.conf. Если файл называется иначе — подставим актуальное имя.

cp -f "$FPM_CONF_FILE" "$FPM_CONF_FILE.bak.$(date +%s)" 2>/dev/null || true

# Настроим прослушивание на 127.0.0.1:9000 и базовые параметры
sed -i \
  -e 's~^listen = .~listen = 127.0.0.1:9000~' \
  -e 's~^listen\.owner = .~; listen.owner = _~' \
  -e 's~^listen\.group = .~; listen.group = _~' \
  -e 's~^listen\.mode = .~; listen.mode = 0660~' \
  "$FPM_CONF_FILE" 2>/dev/null || true

# Если значения не изменились через sed — откроем файл и правим вручную.
# nano "$FPM_CONF_FILE"

Зададим разумные параметры процесса (под разработку обычно достаточно умеренных значений). Варианты зависят от версии PHP‑FPM, но общий смысл такой: ограничить максимальное количество процессов и снизить лишние оверхеды.

# Примерный блок. Если эти ключи присутствуют — обновим.
# Можно также вручную поправить в nano.
if grep -q "^pm\.max_children" "$FPM_CONF_FILE" 2>/dev/null; then
  sed -i \
    -e 's/^pm\.max_children = ./pm.max_children = 10/' \
    -e 's/^pm\.start_servers = ./pm.start_servers = 2/' \
    -e 's/^pm\.min_spare_servers = ./pm.min_spare_servers = 1/' \
    -e 's/^pm\.max_spare_servers = ./pm.max_spare_servers = 3/' \
    "$FPM_CONF_FILE"
fi

На этом этапе важнее корректная связка Apache ↔ PHP‑FPM. Проверим, что PHP‑FPM запускается и слушает порт.

Инициализация и настройка MariaDB

Сделаем первичную инициализацию базы. Для MariaDB в Termux чаще всего требуется mysql_install_db или аналог. Проверим доступные команды:

mysqld --version 2>/dev/null || true
which mysql_install_db 2>/dev/null || true
which mariadb-install-db 2>/dev/null || true
ls -la "$PREFIX/bin" | grep -E 'mysql_install_db|mariadb-install-db|mysqld' || true

Инициализация:

DB_DIR="$HOME/lamp-stack/db"
mkdir -p "$DB_DIR"

if [ -x "$PREFIX/bin/mariadb-install-db" ]; then
  "$PREFIX/bin/mariadb-install-db" --datadir="$DB_DIR" --user=$(id -u) --basedir="$PREFIX" --ldata-dir="$DB_DIR"
elif [ -x "$PREFIX/bin/mysql_install_db" ]; then
  "$PREFIX/bin/mysql_install_db" --datadir="$DB_DIR" --user=$(id -u)
else
  echo "Не найден mariadb-install-db/mysql_install_db в $PREFIX/bin. Проверьте доступные утилиты MariaDB.";
fi

Создадим конфигурационный файл MariaDB для Termux. Цель — хранить всё локально и слушать на localhost.

mkdir -p $HOME/lamp-stack/mariadb
cat > $HOME/lamp-stack/mariadb/my.cnf <<'EOF'
[mysqld]
user = root
datadir = $HOME/lamp-stack/db
socket = $HOME/lamp-stack/run/mysqld.sock
pid-file = $HOME/lamp-stack/run/mysqld.pid

bind-address = 127.0.0.1
port = 3306

# Логи
log_error = $HOME/lamp-stack/logs/mariadb-error.log
log_warnings = 1

# Чуть более «мягкие» лимиты для мобильного устройства (можно поменять)
max_connections = 50
innodb_buffer_pool_size = 256M
EOF

Запуск:

mkdir -p $HOME/lamp-stack/run

# Останавливаем возможные старые инстансы, если вы запускали ранее
# (аккуратно: зависит от версии и путей)

# Запуск MariaDB
mysqld --defaults-file=$HOME/lamp-stack/mariadb/my.cnf --datadir="$HOME/lamp-stack/db" --user=$(id -u) &

# Даем время подняться
sleep 2

# Проверка порта/сокета
ss -lntp 2>/dev/null | grep 3306 || true
ls -la $HOME/lamp-stack/run/mysqld.sock 2>/dev/null || true

Выполним базовую настройку безопасности (минимально): зададим пароль root и удалим опасные настройки. В Termux процедура может отличаться. В большинстве случаев доступен скрипт mysql_secure_installation, либо нужно вручную через SQL.

Попробуем:

if [ -x "$PREFIX/bin/mysql_secure_installation" ]; then
  "$PREFIX/bin/mysql_secure_installation"
else
  echo "mysql_secure_installation недоступен. Используйте вход и настройку через mysql клиент.";
fi

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

mysql --socket=$HOME/lamp-stack/run/mysqld.sock -u root -e "SELECT VERSION();" 2>/dev/null || true

Связка Apache + PHP‑FPM и проверка

Перед запуском убедимся, что Apache использует корректный document root и что PHP‑FPM слушает порт.

Запуск PHP‑FPM:

# Запуск PHP-FPM (путь зависит от поставки пакета)
# Попробуем стандартный сервисный запуск
if command -v php-fpm >/dev/null; then
  php-fpm -y "$FPM_CONF_FILE" -R &
fi

sleep 1
ss -lntp 2>/dev/null | grep 9000 || true

Запуск Apache:

# Проверка конфигурации (если команда доступна)
apache2ctl configtest 2>/dev/null || true

# Запуск
apache2ctl -DFOREGROUND &

sleep 1

# Проверим порт
ss -lntp 2>/dev/null | grep -E ':80|:8080' || true

Тест: откройте в браузере на самом устройстве. Если Apache слушает порт 80, URL будет:

http://127.0.0.1/index.php

Если порт другой — посмотрите вывод ss и замените.

Оптимизация производительности для Termux

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

1) Ограничение PHP‑FPM процессов

Если вы видите рост потребления памяти, уменьшайте pm.max_children. Для большинства задач разработки достаточно небольшого числа процессов.

2) Снижение нагрузки на дисковую подсистему

  • Минимизируйте частые записи логов.
  • Ставьте логи в каталог проекта (мы уже сделали это через $HOME/lamp-stack/logs).
  • Если используется SQLite — не наш случай, но принцип тот же: меньше «шумных» операций.

3) Настройка MariaDB под память

Параметр innodb_buffer_pool_size в мобильной среде нужно подбирать. Начните с 256M (как в примере), и увеличивайте только если устройство имеет запас RAM и вы реально видите, что память не упирается.

4) Включение сжатия (по желанию)

Если Apache поддерживает модуль mod_deflate или аналог, можно включить gzip для уменьшения трафика. Это полезно, но эффект зависит от сети и типа контента.

5) Контроль keep-alive и лимитов

Оптимизируйте только после проверки метрик. На старте разумно оставить стандартные значения, а затем смотреть на:

  • время ответа;
  • загрузка CPU;
  • потребление RAM;
  • размер очередей и количество процессов PHP‑FPM.

Безопасность базового уровня

Для разработки в Termux достаточно базовых мер:

  • Слушать MariaDB только на 127.0.0.1 (мы так и сделали через bind-address).
  • Держать веб‑сервер доступным только локально, если не требуется внешний доступ.
  • Пароли к БД задавать сразу после инициализации.

Локальный доступ с других устройств (опционально)

Если вам нужно открыть сайт с другого устройства в вашей локальной сети, можно использовать локальную сеть (например, точку доступа Wi‑Fi), а Apache оставить доступным в пределах LAN. Для этого нужно аккуратно изменить bind/Listen в конфигурациях Apache, не выходя за рамки локального сегмента.

Мы не рассматриваем сценарии обхода блокировок; цель — корректная работа в собственной локальной сети.

Автозапуск и устойчивость сессий

Чтобы сервисы не падали при сдвиге контекста или после перезапуска окружения, используйте механизм фоновых сервисов Termux (пакет termux-services был установлен). Обычно это делается через скрипты и планирование запуска.

Примерно концепт такой: вы создаёте скрипт старта, который поднимает MariaDB, PHP‑FPM и Apache в правильном порядке (сначала MariaDB, затем PHP‑FPM, затем Apache).

cat > $HOME/lamp-stack/start-all.sh <<'EOF'
#!/data/data/com.termux/files/usr/bin/bash

DB_CNF="$HOME/lamp-stack/mariadb/my.cnf"
FPM_CONF_FILE="$PREFIX/etc/php-fpm.d/www.conf"

# Папки
mkdir -p "$HOME/lamp-stack/run" "$HOME/lamp-stack/logs"

# MariaDB
if ! pidof mysqld >/dev/null 2>&1; then
  mysqld --defaults-file="$DB_CNF" --datadir="$HOME/lamp-stack/db" --user=$(id -u) &
fi

sleep 2

# PHP-FPM
if ! ss -lntp 2>/dev/null | grep -q ':9000'; then
  php-fpm -y "$FPM_CONF_FILE" -R &
fi

sleep 1

# Apache
if ! ss -lntp 2>/dev/null | grep -q ':80'; then
  apache2ctl -DFOREGROUND &
fi
EOF

chmod +x $HOME/lamp-stack/start-all.sh

Затем настраивайте запуск через Termux Services/Tasker (зависит от ваших привычек). Если захотите — опишу конкретный вариант под вашу модель использования.

Устранение типовых проблем

  • Apache не отдаёт PHP: проверьте, что в Apache подключён конфиг и что SetHandler "proxy:fcgi://127.0.0.1:9000" соответствует фактическому адресу PHP‑FPM. Проверка: ss -lntp | grep 9000.
  • PHP‑FPM не стартует: откройте лог PHP‑FPM (обычно это файл в конфиге или в стандартных путях) и проверьте права на каталоги.
  • MariaDB не стартует: проверьте datadir, права на $HOME/lamp-stack/db и наличие сокета $HOME/lamp-stack/run/mysqld.sock.
  • Порт 80 недоступен: проверьте, не занят ли порт другим процессом, и посмотрите, на какой порт слушает Apache.

Заключение

Мы собрали полный LAMP‑стек в Termux: Apache 2 для веб‑доступа, PHP‑FPM как движок PHP через FastCGI, MariaDB для хранения данных, а также заложили практичные рекомендации по производительности и устойчивости на Android. Следующий логичный шаг — подключить ваш фреймворк/проект, настроить виртуальные хосты (если нужно) и подобрать параметры PHP‑FPM и MariaDB под конкретные ресурсы устройства.

Если хотите сделать сборку более «боевой» под ваш проект (параметры под память, правильная схема конфигов, запуск и мониторинг), обратитесь в РыбинскЛАБ — поможем настроить стек и ускорить разработку.

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

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

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

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