搜索全站
安装部署 8 分钟阅读

群晖 NAS 用 Docker 搭建私人 WordPress:内网穿透与备份方案

详解在群晖 NAS 上用 DSM 的 Container Manager(原 Docker)部署 WordPress 与 MariaDB 的完整步骤:目录映射、端口设置、数据库初始化,并给出内网穿透、动态域名、外网访问与自动备份的可落地方案,以及 NAS 建站的性能与安全注意事项。

U
UFO_PF 2018-02-03 · 阅读 8 分钟
群晖 安装部署
阅读提示
本文约 2,993 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:为什么有人会把网站放在家里的 NAS 上

把 WordPress 放在群晖 NAS 上,听起来像折腾,但对特定人群很合理:摄影师想建私人作品库、小团队需要内网知识库、个人开发者想有个零成本的测试环境。硬件已经有了,电费比云主机便宜,数据还在自己手里。

但要清醒:家用宽带没有固定公网 IP、80/443 端口通常被封、上下行带宽不对称。所以 NAS 建站的正确姿势是”内网可用 + 有条件的外网访问”,而不是拿来跑商业站点。

原理分析:NAS 上的容器与云服务器有什么区别

群晖 DSM 7 之后,Docker 套件改名为 Container Manager,本质还是 Docker,只是给了图形界面。三点差异需要注意:

  1. 共享文件夹即挂载卷:群晖把 /volume1/docker/wordpress 这类路径映射到容器,备份时直接打包这个目录即可;
  2. 端口要避免冲突:DSM 自身占用 5000/5001,群晖自带套件也会占端口,WordPress 建议映射 8080 之类的高位端口;
  3. 网络模式:bridge 模式下容器间用服务名互访(和云服务器一致),host 模式会直接用 NAS 的 IP,容易和 DSM 冲突,不建议。

保姆级实操

第一步:安装 Container Manager

套件中心 → 搜索 Container Manager(DSM 6 为 Docker)→ 安装。

第二步:建立目录结构

File Station 里在 docker 下建:

docker/
├── wordpress/
│   ├── html/
│   └── uploads.ini
└── mariadb/
    └── data/

第三步:用项目(docker-compose)方式部署

Container Manager → 项目 → 新建,粘贴:

services:
  db:
    image: mariadb:10.11
    container_name: nas-wp-db
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
      MARIADB_DATABASE: wordpress
      MARIADB_USER: wpuser
      MARIADB_PASSWORD: "${DB_PASSWORD}"
    volumes:
      - /volume1/docker/mariadb/data:/var/lib/mysql

  wordpress:
    image: wordpress:6.7-php8.2-apache
    container_name: nas-wp-web
    restart: unless-stopped
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: "${DB_PASSWORD}"
    volumes:
      - /volume1/docker/wordpress/html:/var/www/html
      - /volume1/docker/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro
    ports:
      - "8080:80"

uploads.ini 内容:

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M

第四步:修复权限

群晖上 UID/GID 与 Linux 略有差异,容器内 www-data 常无法写入。SSH 登录 NAS 后:

sudo chown -R 33:33 /volume1/docker/wordpress/html/wp-content

(33 是 Debian 系 www-data 的默认 UID/GID。)

第五步:外网访问方案(三选一)

  • 方案 A:群晖 QuickConnect / DDNS + 端口转发 —— 在路由器把外网 8080 转发到 NAS,用 xxx.synology.me:8080 访问。需要宽带有公网 IP(可向运营商申请)。
  • 方案 B:内网穿透工具 —— frp、Cloudflare Tunnel 等。没有公网 IP 时的首选,Cloudflare Tunnel 还能免费拿到 HTTPS。
  • 方案 C:Tailscale / ZeroTier 组网 —— 适合纯私人用途,设备装客户端后像在同一个局域网,不暴露到公网,安全性最高。

第六步:备份

群晖自带的 Hyper Backup 可以直接备份 docker 共享文件夹:

控制面板 → 任务计划 → 新增 → Hyper Backup,目标选本地共享文件夹 / 外接 USB / 云端。同时单独做数据库导出:

docker exec nas-wp-db mysqldump -u wpuser -p密码 wordpress > /volume1/backup/wp-$(date +%F).sql

常见踩坑与失败案例

  1. 容器启动后立刻退出 —— 多半是 /volume1/docker/mariadb/data 目录权限或属主不对,MariaDB 拒绝写入。给目录 777 太粗暴,正确做法是查镜像要求(MariaDB 镜像内部用户 UID 为 999)。
  2. 外网访问时样式全丢 —— 站点地址写的是内网 IP:8080。需要把 WP_HOME / WP_SITEURL 改成外网地址。
  3. 案例:一位摄影师用 NAS 放作品站,上传 500 张原图后 NAS 卡死。原因是 WordPress 生成缩略图时 CPU 打满且没开缓存。解决办法是上传前先本地压缩,并安装图片压缩插件减少生成尺寸。
  4. 硬盘休眠被破坏 —— MariaDB 频繁写日志会让 NAS 硬盘无法休眠。可以把数据库日志写入关闭或降低频率。
  5. 突然断电导致数据库损坏 —— NAS 上跑数据库强烈建议配 UPS,否则一次断电就可能 Table is marked as crashed。

总结

群晖 NAS 部署 WordPress 适合私人、内网、低频访问场景,优势是零边际成本和数据自主,劣势是带宽、稳定性和公网可达性。真要对外服务,我的建议是用 Cloudflare Tunnel 或 Tailscale 这类不暴露端口的方案,配合 Hyper Backup 做每日备份,把 NAS 当作”内容生产与存储端”,把公网流量交给 CDN 或云服务器。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。