以下是在 ARM 架构服务器(如树莓派、ARM 云主机)上安装 loader.so(x86 专用扩展)并运行 WordPress 的完整流程。核心思路是利用 Docker + QEMU 用户态模拟运行 x86 架构的 PHP 容器,并在其中配置扩展。
一、环境准备
1. 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.shsudo systemctl enable --now docker
2. 启用 ARM 宿主机对 x86 程序的模拟(QEMU)
# Ubuntu/Debian
sudo apt update
sudo apt install qemu-user-static binfmt-support
# 重启 binfmt 服务
sudo systemctl restart binfmt-support
# 确认 x86_64 已注册
ls /proc/sys/fs/binfmt_misc/
cat /proc/sys/fs/binfmt_misc/qemu-x86_64
二、创建 x86 架构的 PHP 容器
1. 拉取 x86 版 PHP-FPM 镜像
docker pull --platform linux/amd64 php:8.1-fpm
2. 运行 PHP 容器(bridge 模式,推荐生产)
docker run -d \
--name wp-php-fpm \
--platform linux/amd64 \
-p 127.0.0.1:9000:9000 \
-v /www/wwwroot/wordpress:/www/wwwroot/wordpress \
php:8.1-fpm
若希望容器直接使用宿主机网络(避免防火墙问题),可使用
--network host,此时不需要-p端口映射。
三、安装 loader81.so 及其他必要扩展
1. 进入容器
docker exec -it wp-php-fpm /bin/bash
2. 复制 loader81.so 并启用
# 假设 loader81.so 已放在宿主机 /tmp 目录
docker cp /tmp/loader81.so wp-php-fpm:/usr/local/lib/php/extensions/
# 进入容器后找到扩展目录
EXT_DIR=$(php -i | grep extension_dir | awk '{print $NF}')
mv /usr/local/lib/php/extensions/loader81.so $EXT_DIR/
echo "extension=loader81.so" > /usr/local/etc/php/conf.d/swoole-loader.ini
3. 安装常用扩展(gd, mysqli, pdo_mysql, redis 等)
方法 A:使用 install-php-extensions 一键安装(推荐)
curl -sSLf -o /usr/local/bin/install-php-extensions https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions chmod +x /usr/local/bin/install-php-extensions install-php-extensions bcmath gd intl mysqli pdo_mysql redis zip igbinary opcache
方法 B:手动安装(若上述脚本失败)
# 安装系统依赖 apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libzip-dev libicu-dev git # 安装 igbinary git clone --branch 3.2.16 --depth 1 https://github.com/igbinary/igbinary.git cd igbinary phpize && ./configure --with-php-config=/usr/local/bin/php-config && make -j$(nproc) && make install docker-php-ext-enable igbinary cd .. # 安装 redis git clone --branch 6.0.2 --depth 1 https://github.com/phpredis/phpredis.git cd phpredis phpize && ./configure --with-php-config=/usr/local/bin/php-config --enable-redis-igbinary=yes && make -j$(nproc) && make install docker-php-ext-enable redis cd .. # 安装其他官方扩展 docker-php-ext-install bcmath gd intl mysqli pdo_mysql zip opcache
4. 调整 PHP 配置(上传大小、内存等)
echo -e "upload_max_filesize = 128M\npost_max_size = 128M\nmemory_limit = 256M\nmax_execution_time = 300" > /usr/local/etc/php/conf.d/uploads.ini
5. 退出容器并重启
exit docker restart wp-php-fpm
四、配置宿主机 Nginx 连接 PHP 容器
1. 编辑 Nginx 站点配置
server {
listen 80;
server_name your-domain.com;
root /www/wwwroot/wordpress;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; # PHP 容器映射的端口
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/wwwroot/wordpress$fastcgi_script_name;
}
}
2. 重载 Nginx
sudo nginx -t && sudo systemctl reload nginx
五、处理数据库连接(宿主机 MySQL)
方案一:使用 host.docker.internal(bridge 模式)
修改 wp-config.php:
define('DB_HOST', 'host.docker.internal');
并在宿主机 MySQL 中创建允许任意 IP 连接的用户:
CREATE USER 'wpuser'@'%' IDENTIFIED BY 'password'; GRANT ALL ON wordpress.* TO 'wpuser'@'%'; FLUSH PRIVILEGES;
同时修改 MySQL 配置文件 bind-address = 0.0.0.0,并重启 MySQL。
方案二:使用 --network host 模式(无需开放防火墙)
启动容器时添加 --network host,PHP 容器直接共享宿主机网络,wp-config.php 中 DB_HOST 设为 127.0.0.1 即可。此模式无需额外开放防火墙和配置 MySQL 绑定。
六、保存容器状态为镜像(可选)
为避免下次重复安装,将当前配置好的容器提交为镜像:
docker commit wp-php-fpm my-php-fpm:with-loader
以后可直接使用此镜像创建容器。
至此扩展已经安装完毕,并已将wordpress的php切换到docker版x86兼容php中,主题可以完美启用,此方法适用于所有需要安装.so扩展的主题/插件,以及非wordpress的自定义扩展。













