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