这是为您整合了最新 宝塔面板 Nginx 优化配置 的完整 WordPress 部署指南。这份文档涵盖了从群晖底层架构到公网 HTTPS 访问的所有技术细节,是您维护 “行思录” 的最终参考手册。
一、 整体架构
该方案实现了“本地海量存储 + 云端稳定接入”的完美平衡。
- 数据层 (群晖 NAS):运行 MariaDB 与 WordPress 容器,挂载本地 SSD 或 HDD 路径用于存放 A7M4 摄影原片。
- 隧道层 (FRP):通过内网穿透将 NAS 端口映射至公网 VPS。
- 接入层 (宝塔面板):VPS 端的 Nginx 负责处理 SSL(HTTPS)、静态资源缓存及 WebSocket 支持。
- 管理层 (Mac M4):利用 M4 芯片在上传前进行 WebP 预处理,优化低带宽环境下的加载速度。
二、 Step-by-Step 部署流程
- 环境准备:在群晖中创建
/volume1/docker/wordpress目录,通过 SSH 执行sudo chown -R 33:33赋予容器读写权限。 - 配置文件:在项目根目录准备好
.env、docker-compose.yml和uploads.ini三个文件。 - 分步挂载(避坑重点):
- 第一步:在 Compose 中注释掉照片挂载行,启动容器完成初始化,确保
wp_data内自动生成index.php等核心文件。 - 第二步:确认安装成功后,再取消照片路径注释,执行“生成(Build)”重新挂载。
- 第一步:在 Compose 中注释掉照片挂载行,启动容器完成初始化,确保
- FRP 配置:确保
frpc.ini中的本地端口为18090,远程端口为28090。 - 宝塔 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_PATH、PHOTO_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 镜像不会执行文件搬家程序。

