解决ARM服务器无法安装B2主题解密扩展的问题,其他扩展同样适用

以下是在 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的自定义扩展。

给TA打赏
共{{data.count}}人
人已打赏
wordpress插件

reCaptcha for WooCommerce v2.79

2026-7-17 8:05:55

wordpress插件

Ninja Forms – Excel Export 汉化版 v3.3.7

2026-7-17 16:05:03

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
❯
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索