Close-up of hands typing on a laptop keyboard at a wooden table, perfect for remote work concepts.

群晖部署wordpress

这是为您整合了最新 宝塔面板 Nginx 优化配置 的完整 WordPress 部署指南。这份文档涵盖了从群晖底层架构到公网 HTTPS 访问的所有技术细节,是您维护 “行思录” 的最终参考手册。


一、 整体架构

该方案实现了“本地海量存储 + 云端稳定接入”的完美平衡。

  1. 数据层 (群晖 NAS):运行 MariaDB 与 WordPress 容器,挂载本地 SSD 或 HDD 路径用于存放 A7M4 摄影原片。
  2. 隧道层 (FRP):通过内网穿透将 NAS 端口映射至公网 VPS。
  3. 接入层 (宝塔面板):VPS 端的 Nginx 负责处理 SSL(HTTPS)、静态资源缓存及 WebSocket 支持。
  4. 管理层 (Mac M4):利用 M4 芯片在上传前进行 WebP 预处理,优化低带宽环境下的加载速度。

二、 Step-by-Step 部署流程

  1. 环境准备:在群晖中创建 /volume1/docker/wordpress 目录,通过 SSH 执行 sudo chown -R 33:33 赋予容器读写权限。
  2. 配置文件:在项目根目录准备好 .envdocker-compose.ymluploads.ini 三个文件。
  3. 分步挂载(避坑重点)
    • 第一步:在 Compose 中注释掉照片挂载行,启动容器完成初始化,确保 wp_data 内自动生成 index.php 等核心文件。
    • 第二步:确认安装成功后,再取消照片路径注释,执行“生成(Build)”重新挂载。
  4. FRP 配置:确保 frpc.ini 中的本地端口为 18090,远程端口为 28090
  5. 宝塔 Nginx 配置:在 VPS 侧应用最新的 Nginx 代码,并重载配置。

三、 详细部署文件内容

1. docker-compose.yml (群晖端)

YAML

 version: '3.9'
 services:
  db:
    image: mariadb:10.11
    container_name: wordpress-db
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    volumes:
      - ${DOCKER_BASE_PATH}/db_data:/var/lib/mysql
 ​
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    container_name: wordpress-app
    restart: always
    ports:
      - "18090:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_CONFIG_EXTRA: |
        define('FS_METHOD', 'direct');
        // 强制锁定 HTTPS 地址,防止自动填充密码失效
        define('WP_HOME', 'https://sunyang.cc');
        define('WP_SITEURL', 'https://sunyang.cc');
        // 强制后台 SSL,解决重定向循环
        define('FORCE_SSL_ADMIN', true);
        // 识别宝塔面板传递的协议头
        if (isset($$_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($$_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
            $$_SERVER['HTTPS'] = 'on';
        }
    volumes:
      - ${DOCKER_BASE_PATH}/wp_data:/var/www/html
      - ${PHOTO_SOURCE_PATH}:/var/www/html/wp-content/uploads/photography
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
 ​
 networks:
  default:
    name: wp-network

2. 宝塔面板 Nginx 反代配置 (VPS 端)

Nginx

 #PROXY-START/
 location ^~ /
 {
    proxy_pass http://127.0.0.1:28090;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
     
    # WebSocket 支持:确保古腾堡编辑器自动保存不报错
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
 ​
    # 核心修正:识别 HTTPS 协议与端口,解决重定向死循环
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port 443;
    proxy_redirect off;
 ​
    # 摄影大图支持:允许 A7M4 原片上传
    client_max_body_size 128M;
    client_body_timeout 300s;
 ​
    # 性能监控与缓存
    add_header X-Cache $upstream_cache_status;
    set $static_file_wp 0;
    if ( $uri ~* "\.(gif|png|jpg|jpeg|css|js|woff|woff2|webp)$" )
    {
        set $static_file_wp 1;
        expires 12h; # 静态资源建议较长缓存
    }
    if ( $static_file_wp = 0 )
    {
        add_header Cache-Control no-cache; # 动态页面禁止缓存
    }
 }
 #PROXY-END/

3. 辅助配置文件 (.env & uploads.ini)

  • .env:定义数据库密码及 DOCKER_BASE_PATHPHOTO_SOURCE_PATH 等路径变量。
  • uploads.ini:在项目根目录创建,内容为 upload_max_filesize = 128M 等 PHP 优化参数。

四、 避雷指南(Checklist)

  • 权限失效:如果出现 403 Forbidden,第一时间检查 wp_data 的 UID 是否为 33
  • 转义错误:Compose 中的 $_SERVER 必须加双 $ 符号,否则会被 Docker 误认为环境变量。
  • 重定向循环:若访问 /wp-admin 报错,检查宝塔 Nginx 是否漏掉了 X-Forwarded-Proto 指令。
  • 混合内容警告:若浏览器不自动填充密码,检查 WP_HOME 是否已强制改为 https
  • 初始化跳过:确保首次启动时挂载目录为空,否则 WordPress 镜像不会执行文件搬家程序。

通讯更新

在下面输入您的电子邮件地址并订阅我们的新闻通讯

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注