博主头像
Wood Chen

万事如意

  • 累计撰写 284 篇文章
  • 累计创建 238 个标签
  • 累计收到 20 条评论

目 录CONTENT

1Panel 将 WordPress 从传统 PHP-FPM 迁移至 FrankenPHP

2026-02-01 · 0 评论 · 0 点赞 · 141 阅读 · 0 字

为什么要迁移?

主要是想试着玩, 因为昨天已经把 CZL图床 从PHP-FPM迁移到 FrankenPHP了, 一个容器内自动处理运行和定时任务, 进程守护等, 很方便, 并且感觉性能也有所提升.

还有, 减少和1panel的绑定, 后续迁移也方便.

FrankenPHP介绍

FrankenPHP 是一个基于 Caddy Web Server 的现代化 PHP 应用服务器,使用 Go 语言编写。相比传统的 Nginx + PHP-FPM 架构,它更简单(单一二进制)、支持 HTTP/3,并且可以通过 Worker 模式显著提升性能。


核心架构变化

  • 旧架构:1Panel OpenResty (Nginx) -> FastCGI 协议 (9000端口) -> PHP-FPM 容器

  • 新架构:1Panel OpenResty (Nginx) -> HTTP 反向代理 (自定义端口) -> FrankenPHP 容器 (内部 80端口)


重要提醒

以下所有操作, 我都是新建一个 /opt/1panel/docker/compose/目录下的子目录进行操作, 并且在检查新的没问题之后, 再把旧的删掉. 一开始测试, 建议使用 端口映射先测试首页访问.

并且, 不要在原网站目录下操作, 我把原来的/www/sites/网站代号里的所有文件, 复制到 上面新建目录的/site子目录下, 避免影响旧的.


步骤一:准备 Dockerfile (解决扩展缺失问题)

FrankenPHP 官方镜像非常纯净,默认不包含 WordPress 运行必须的 mysqli、gd 等扩展。我们需要手动构建镜像。

在目录下,新建一个文件名为 Dockerfile:

Dockerfile

FROM dunglas/frankenphp:php8.3

# 安装 WordPress 运行必须的扩展
# 包括数据库连接(mysqli/pdo), 图片处理(gd/imagick), 性能优化(opcache/intl/zip)
RUN install-php-extensions \
    bcmath \
    exif \
    gd \
    intl \
    mysqli \
    opcache \
    pdo_mysql \
    zip \
    imagick

步骤二:创建 docker-compose.yml

你需要调整编排文件,从“拉取镜像”改为“构建镜像”,并调整端口和挂载路径。

networks:
  1panel-network:
    external: true

services:
  php:
    # 1. 改为构建模式
    build: .
    container_name: wordpress-franken
    restart: always
    networks:
      - 1panel-network
    
    # 2. 端口映射:外部端口:80, 后续没问题了, 改成 127.0.0.1:1019, 就不用对外放开端口了

    ports:
      - "1019:80"
    
    # 3. 环境变量
    environment:
      # 告诉 FrankenPHP 只监听 HTTP 80,证书管理交给外层 1Panel Nginx
      - SERVER_NAME=:80
      - TZ=Asia/Shanghai
    
    # 4. 目录挂载
    volumes:
      # 将你的 WordPress 代码挂载到 /app/public
      - ./site:/app/public

步骤三:测试访问和怎么共存

访问服务器IP:1019看看能不能访问

你可以添加反向代理, 但是需要先把rewrite那一行给注释掉(在前面加个#号)
Pasted image 20260201181043.png

然后添加一个反向代理, ^~代理根目录到 127.0.0.1:1019即可.


步骤五:构建与启动

在终端进入目录,执行以下命令重构并启动:

# 1. 构建带有扩展的新镜像
docker-compose build

# 2. 启动容器
docker-compose up -d

排查命令:

  • 查看日志:docker logs -f wordpress-franken

  • 检查文件是否存在:docker exec -it wordpress-franken ls -la /app/public


其他问题修复: 解决https无限重定向和上传目录

修改 wp-config.php (解决 HTTPS 无限重定向)

由于 Nginx 通过 HTTP 转发请求给 FrankenPHP,WordPress 会误以为当前是非安全连接,从而尝试跳转 HTTPS,导致死循环。

编辑 WordPress 根目录下的 wp-config.php,在文件最顶部(<?php 下方)添加:

PHP

<?php
/**
 * 处理反向代理后的 HTTPS 识别问题
 */
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

// 建议同时锁定站点地址,防止数据库配置错误
define('WP_HOME', 'https://你的域名.com');
define('WP_SITEURL', 'https://你的域名.com');

// ... 下面是原有的代码 ...

修改上传目录

登录后, 确保这里没问题, 否则无法上传.

Pasted image 20260201181408.png


总结

通过以上步骤,我们成功将 WordPress 迁移到了 FrankenPHP。现在的架构不仅更现代化,而且未来你可以进一步通过在 Dockerfile 或环境变量中启用 Worker 模式,让 WordPress 常驻内存,获得数倍的性能提升。

评论区