Stop worrying about the potholes in the road and enjoy the journey

Convierte cualquier teléfono Android/TV Box en un servidor local de WordPress (Termux + Nginx + PHP-FPM + MariaDB)

Esta guía te lleva paso a paso desde un dispositivo Android nuevo a un sitio local de WordPress funcionando con Termux, Nginx, PHP-FPM y MariaDB.
También cubre el inicio automático al arrancar, mantener el dispositivo despierto, usar un SSD USB para medios,
y habilitar la caché de objetos Redis. Probado en teléfonos y cajas de Android TV.

Lo que necesitarás

  • Dispositivo Android 7.0+ (teléfono/tableta/caja de TV). Más RAM/CPU = mejor.
  • Wi-Fi y fuente de alimentación (mantén el dispositivo enchufado).
  • Termux (de F-Droid) + opcional Termux:Boot (también de F-Droid).
  • Opcional: MacroDroid o Tasker (de Google Play) si tu ROM bloquea Termux:Boot.
  • Opcional: SSD USB (para almacenamiento de medios).

0) Instalar Termux y Configuración Básica

pkg update && pkg upgrade -y
termux-setup-storage

Acceso SSH opcional:

pkg install openssh -y
passwd
sshd   # puerto predeterminado 8022

1) Instalar la Pila Web

pkg install nginx php php-fpm php-mysqli php-curl php-gd php-mbstring php-xml php-zip mariadb unzip wget nano -y

2) Iniciar PHP-FPM (socket UNIX)

php-fpm
# Socket predeterminado de FPM (Termux):
# /data/data/com.termux/files/usr/var/run/php-fpm.sock

3) Configuración Mínima de Nginx (puerto 8080, listo para WordPress)

Edita $PREFIX/etc/nginx/nginx.conf:

worker_processes  1;

events { worker_connections 1024; }

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    gzip on;
    gzip_types text/plain text/css application/json application/javascript application/xml image/svg+xml;

    server {
        listen 8080;
        server_name mysite.loc;
        root /data/data/com.termux/files/usr/share/nginx/html;
        index index.php index.html;

        location / { try_files $uri $uri/ /index.php?$args; }

        location ~ .php$ {
            include fastcgi.conf;
            fastcgi_pass unix:/data/data/com.termux/files/usr/var/run/php-fpm.sock;
            fastcgi_index index.php;
        }

        client_max_body_size 64m;

        error_page 500 502 503 504 /50x.html;
        location = /50x.html { root /data/data/com.termux/files/usr/share/nginx/html; }
    }
}

Recargar Nginx:

pkill nginx 2>/dev/null
nginx

4) Prueba Rápida de PHP

echo "<?php phpinfo(); ?>" > $PREFIX/share/nginx/html/index.php

Abre: http://<DEVICE_IP>:8080/ — deberías ver la página de información de PHP.

5) MariaDB: Inicializar, Iniciar, Crear BD/Usuario

# Inicializar una vez (si el directorio de datos está vacío)
mariadb-install-db

# Iniciar servidor en segundo plano
mysqld_safe --socket=$PREFIX/var/run/mysqld.sock &

# Crear BD y usuario
mariadb -u root -h 127.0.0.1 -e "CREATE DATABASE my_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mariadb -u root -h 127.0.0.1 -e "CREATE USER IF NOT EXISTS 'my_wp_user'@'localhost' IDENTIFIED BY 'my_wp_password';"
mariadb -u root -h 127.0.0.1 -e "GRANT ALL PRIVILEGES ON my_db_name.* TO 'my_wp_user'@'localhost'; FLUSH PRIVILEGES;"

6) Descargar e Implementar WordPress

cd $PREFIX/share/nginx/html
rm -rf *
wget https://wordpress.org/latest.zip
unzip -q latest.zip
mv wordpress/* .
rmdir wordpress
rm latest.zip

7) wp-config.php (BD, URL del Sitio/Puerto, Prefijo de Tabla)

Copia el ejemplo y edita:

cp wp-config-sample.php wp-config.php
nano wp-config.php
<?php
define('DB_NAME', 'my_db_name');
define('DB_USER', 'my_wp_user');
define('DB_PASSWORD', 'my_wp_password');
define('DB_HOST', '127.0.0.1');       // TCP evita problemas de ruta de socket

define('WP_HOME', 'http://mysite.loc:8080');
define('WP_SITEURL', 'http://mysite.loc:8080');

define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', '');

$table_prefix = 'web_';  // usa tu prefijo de tabla/dump real (el predeterminado es 'wp_')

Dominio “bonito” local

Agrega a tu archivo hosts de PC (sin soporte de puerto en hosts):

192.168.31.50  mysite.loc

Abre el sitio en http://mysite.loc:8080/. (Usa la IP de tu dispositivo; lo mejor es reservar una IP en tu router.)

8) Mantener Despierto y Autoinicio al Arrancar

Prevenir el sueño

pkg install termux-api -y
termux-wake-lock

Autoiniciar servicios a través de start.sh (con verificaciones de proceso)

Crea ~/.termux/boot/start.sh:

mkdir -p ~/.termux/boot
nano ~/.termux/boot/start.sh
#!/data/data/com.termux/files/usr/bin/bash
termux-wake-lock
mkdir -p "$PREFIX/var/run"

# Esperar hasta 30s para la carpeta de la aplicación en SSD externo (opcional)
UPLOADS_SSD="/storage/A077-00B4/Android/data/com.termux/files/wp-uploads"
for i in $(seq 1 30); do [ -d "$UPLOADS_SSD" ] && break; sleep 1; done

# Servicios (iniciar solo si no están en ejecución)
pgrep sshd          >/dev/null || sshd
pgrep redis-server  >/dev/null || redis-server --daemonize yes
pgrep mysqld        >/dev/null || mysqld_safe 
  --datadir="$PREFIX/var/lib/mysql" 
  --socket="$PREFIX/var/run/mysqld.sock" 
  --pid-file="$PREFIX/var/run/mysqld.pid" &
pgrep php-fpm       >/dev/null || php-fpm
pgrep nginx         >/dev/null || nginx
chmod +x ~/.termux/boot/start.sh

Si tu ROM bloquea Termux:Boot

Usa MacroDroid: Disparador = Inicio del Dispositivo → Acción = Lanzar App: Termux. Luego agrega esto a ~/.bash_profile:

nano ~/.bash_profile
# Ejecutar start.sh una vez que Termux se abra (solo si php-fpm no está en ejecución)
pgrep php-fpm >/dev/null || bash ~/.termux/boot/start.sh

9) Almacenar Medios en SSD USB (solo cargas, seguro y grande)

Android permite acceso de escritura para aplicaciones solo en su carpeta específica de aplicación en almacenamiento extraíble.
Crea un directorio de cargas en SSD y enlaza las cargas de WordPress a él:

# Raíz de WordPress
cd $PREFIX/share/nginx/html

# Carpeta específica de aplicación en SSD (reemplaza A077-00B4 con tu UUID de volumen)
mkdir -p /storage/A077-00B4/Android/data/com.termux/files/wp-uploads
touch    /storage/A077-00B4/Android/data/com.termux/files/wp-uploads/.ok

# Enlazar cargas
[ -d wordpress/wp-content/uploads ] && rm -rf wordpress/wp-content/uploads
ln -s /storage/A077-00B4/Android/data/com.termux/files/wp-uploads wordpress/wp-content/uploads

10) (Opcional) Caché de Objetos Redis

pkg install redis php-redis -y
redis-server --daemonize yes

Agrega a wp-config.php:

define('WP_CACHE', true);
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_CLIENT', 'phpredis');

Instala y habilita el plugin:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && mv wp-cli.phar $PREFIX/bin/wp
cd $PREFIX/share/nginx/html
wp plugin install redis-cache --activate
wp redis enable
wp redis status

Verifica desde Termux:

redis-cli ping
redis-cli monitor     # actualiza una página de WP; deberías ver GET/SET

11) Script de Respaldo Rápido (mysqldump)

Crea ~/backup.sh:

#!/data/data/com.termux/files/usr/bin/bash
DB_NAME="my_db_name"
DB_USER="root"
DB_HOST="127.0.0.1"
BACKUP_DIR="/data/data/com.termux/files/usr/share/nginx/html"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
FILE="$BACKUP_DIR/dump-$DATE.sql"
mysqldump -u "$DB_USER" -h "$DB_HOST" "$DB_NAME" > "$FILE"
[ $? -eq 0 ] && echo "Respaldo: $FILE" || echo "Respaldo fallido"
chmod +x ~/backup.sh
~/backup.sh

Hoja de Trucos para Solución de Problemas

  • Nginx: “server directive is not allowed here” — tu server {} debe estar dentro de http {} en nginx.conf.
  • 500 + “Faithfully yours, nginx.” — PHP-FPM no alcanzado. Asegúrate de que
    fastcgi_pass unix:/data/.../php-fpm.sock coincide con el socket de FPM y que php-fpm está en ejecución.
  • MySQL “No database selected” durante la importación — importa en una BD seleccionada:
    mariadb -u root -h 127.0.0.1 my_db_name < dump.sql.
  • WP muestra el instalador de nuevo — prefijo de $table_prefix incorrecto.
    Establécelo (por ejemplo, $table_prefix = 'web_';) en wp-config.php.
  • Todo se duerme con la pantalla apagada — ejecuta termux-wake-lock y desactiva las optimizaciones de batería para Termux / Termux:Boot.
  • SSD externo no presente al arrancar — agrega un retraso de 20–40s antes de lanzar Termux (MacroDroid), y agrega un bucle de espera corto en start.sh.

Exponer Tu Sitio desde Cualquier Lugar (Opcional)

  • SSH inverso a través de un VPS barato:
    ssh -R 8080:localhost:8080 user@YOUR_VPS, luego proxy en el VPS.
  • Túneles: ngrok / Cloudflare Tunnel si no quieres un VPS.

Eso es Todo

Ahora tienes un “micro-servidor” de WordPress portátil que se inicia solo, se mantiene despierto,
sirve PHP a través de Nginx, almacena medios en SSD USB, y puede ser cacheado por Redis.
Para acceso externo de grado de producción, combínalo con un pequeño VPS como proxy inverso.

0