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

Transformez n’importe quel téléphone Android/boîtier TV en serveur WordPress local (Termux + Nginx + PHP-FPM + MariaDB)

Ce guide vous accompagne étape par étape d’un appareil Android neuf à un site WordPress local fonctionnel alimenté par Termux, Nginx, PHP-FPM, et MariaDB.
Il couvre également le démarrage automatique au démarrage, le maintien de l’appareil éveillé, l’utilisation d’un SSD USB pour les médias,
et l’activation du cache d’objets Redis. Testé sur téléphones et boîtiers Android TV.

Ce dont vous aurez besoin

  • Appareil Android 7.0+ (téléphone/tablette/boîtier TV). Plus de RAM/CPU = mieux.
  • Wi-Fi et alimentation (gardez l’appareil branché).
  • Termux (depuis F-Droid) + optionnel Termux:Boot (également depuis F-Droid).
  • Optionnel : MacroDroid ou Tasker (depuis Google Play) si votre ROM bloque Termux:Boot.
  • Optionnel : SSD USB (pour le stockage des médias).

0) Installer Termux et configuration de base

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

Accès SSH optionnel :

pkg install openssh -y
passwd
sshd   # port par défaut 8022

1) Installer la pile 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) Démarrer PHP-FPM (socket UNIX)

php-fpm
# Socket FPM par défaut (Termux) :
# /data/data/com.termux/files/usr/var/run/php-fpm.sock

3) Configuration minimale de Nginx (port 8080, prêt pour WordPress)

Modifier $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; }
    }
}

Recharger Nginx :

pkill nginx 2>/dev/null
nginx

4) Test rapide de PHP

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

Ouvrir : http://<DEVICE_IP>:8080/ — vous devriez voir la page d’informations PHP.

5) MariaDB : Initialiser, Démarrer, Créer DB/Utilisateur

# Initialiser une fois (si le datadir est vide)
mariadb-install-db

# Démarrer le serveur en arrière-plan
mysqld_safe --socket=$PREFIX/var/run/mysqld.sock &

# Créer DB et utilisateur
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) Télécharger et Déployer 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 (DB, URL/Port du site, Préfixe de table)

Copier l’exemple et modifier :

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 évite les problèmes de chemin 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_';  // utilisez votre préfixe de dump/table réel (par défaut est 'wp_')

Domaine local “joli”

Ajouter au fichier hosts de votre PC (pas de support de port dans hosts) :

192.168.31.50  mysite.loc

Ouvrir le site à http://mysite.loc:8080/. (Utilisez l’IP de votre appareil ; le mieux est de réserver une IP sur votre routeur.)

8) Garder éveillé & Démarrage automatique au démarrage

Empêcher la mise en veille

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

Démarrage automatique des services via start.sh (avec vérifications de processus)

Créer ~/.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"

# Attendre jusqu'à 30s pour le dossier d'application SSD externe (optionnel)
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

# Services (démarrer uniquement s'ils ne sont pas en cours d'exécution)
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 votre ROM bloque Termux:Boot

Utilisez MacroDroid : Déclencheur = Démarrage de l’appareil → Action = Lancer l’application : Termux. Puis ajoutez ceci à ~/.bash_profile :

nano ~/.bash_profile
# Exécuter start.sh une fois Termux ouvert (uniquement si php-fpm n'est pas en cours d'exécution)
pgrep php-fpm >/dev/null || bash ~/.termux/boot/start.sh

9) Stocker les médias sur SSD USB (uploads uniquement, sûr & grand)

Android permet l’accès en écriture pour les applications uniquement dans leur dossier spécifique sur le stockage amovible.
Créez un répertoire d’uploads sur le SSD et faites un lien symbolique vers les uploads de WordPress :

# Racine de WordPress
cd $PREFIX/share/nginx/html

# Dossier spécifique à l'application sur SSD (remplacez A077-00B4 par votre UUID de volume)
mkdir -p /storage/A077-00B4/Android/data/com.termux/files/wp-uploads
touch    /storage/A077-00B4/Android/data/com.termux/files/wp-uploads/.ok

# Lier les uploads
[ -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) (Optionnel) Cache d’objets Redis

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

Ajouter à 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');

Installer et activer le 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

Vérifier depuis Termux :

redis-cli ping
redis-cli monitor     # actualisez une page WP ; vous devriez voir GET/SET

11) Script de sauvegarde rapide (mysqldump)

Créer ~/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 "Sauvegarde : $FILE" || echo "Échec de la sauvegarde"
chmod +x ~/backup.sh
~/backup.sh

Fiche de dépannage

  • Nginx : “server directive is not allowed here” — votre server {} doit être à l’intérieur de http {} dans nginx.conf.
  • 500 + “Faithfully yours, nginx.” — PHP-FPM non atteint. Assurez-vous que
    fastcgi_pass unix:/data/.../php-fpm.sock correspond au socket FPM et que php-fpm est en cours d’exécution.
  • MySQL “No database selected” lors de l’importation — importez dans une DB sélectionnée :
    mariadb -u root -h 127.0.0.1 my_db_name < dump.sql.
  • WP montre l’installateur à nouveau — mauvais $table_prefix.
    Définissez-le (par exemple $table_prefix = 'web_';) dans wp-config.php.
  • Tout s’endort avec l’écran éteint — exécutez termux-wake-lock et désactivez les optimisations de batterie pour Termux / Termux:Boot.
  • SSD externe non présent au démarrage — ajoutez un délai de 20 à 40s avant de lancer Termux (MacroDroid), et ajoutez une boucle d’attente courte dans start.sh.

Exposez votre site de n’importe où (Optionnel)

  • SSH inversé via un VPS bon marché :
    ssh -R 8080:localhost:8080 user@YOUR_VPS, puis proxy sur le VPS.
  • Tunnels : ngrok / Cloudflare Tunnel si vous ne voulez pas de VPS.

C’est tout

Vous avez maintenant un “micro-serveur” WordPress portable qui se démarre lui-même, reste éveillé,
sert PHP via Nginx, stocke les médias sur SSD USB, et peut être mis en cache par Redis.
Pour un accès externe de qualité production, associez-le à un petit VPS comme proxy inverse.

0