群晖Synology 上部署 Wallabag + Cloudflare Zero Trust 全攻略

记录一次 500→403踩坑与排坑全过程,顺便把可复制的命令都整理好了,直接粘贴即可跑通。

目录

  1. 背景与现象
  2. 群辉新建相关文件夹
  3. Portainer部署wallabag
  4. 外网访问通过Cloudflare Zero Trust
  5. 解决 ios 客户端 403,创建 Cloudflare 安全规则
  6. 让 iOS / 浏览器插件 Wallabagger 正常获取 Token

1 背景与现象

阶段症状解决思路
部署初期访问 500容器日志查看 + PHP/FPM 权限修复
上 Cloudflare TunnelWeb 能浏览,但 iOS 登录失败WAF/Managed Rules 拦截 POST /oauth/v2/token

2 群辉新建相关文件夹

# File Station目录结构
/volume1/docker/wallabag
data/        # Wallabag 用户数据
images/      # 附件/图片
db_data/     # MariaDB 数据库文件
redis/       # Redis 持久化数据

3 Portainer 部署 Wallabag

<strong>docker‑compose.yaml</strong>

version: "3.8"

services:
  wallabag:
    image: wallabag/wallabag                  # 官方镜像
    restart: unless-stopped
    ports:
      - "6749:80"                                  # 宿主机端口:容器端口(按需修改)
    environment:
      - MYSQL_ROOT_PASSWORD=wallaroot              # 数据库根密码,请替换
      - SYMFONY__ENV__DATABASE_DRIVER=pdo_mysql
      - SYMFONY__ENV__DATABASE_HOST=db
      - SYMFONY__ENV__DATABASE_PORT=3306
      - SYMFONY__ENV__DATABASE_NAME=wallabag       # 数据库名,请替换
      - SYMFONY__ENV__DATABASE_USER=wallabag       # 普通用户,请替换
      - SYMFONY__ENV__DATABASE_PASSWORD=wallapass  # 用户密码,请替换
      - SYMFONY__ENV__DATABASE_CHARSET=utf8mb4
      - SYMFONY__ENV__DATABASE_TABLE_PREFIX="wallabag_"  # 表前缀,可选
      - SYMFONY__ENV__MAILER_DSN=smtp://127.0.0.1        # 邮件 DSN,可选
      - [email protected]  # 发件人地址,可选
      - SYMFONY__ENV__DOMAIN_NAME=wallabag.leogaox.com  # 访问 URL,请替换为你的 DDNS 地址
      - TZ=Asia/Shanghai

      # ——以下三项开启开放注册与两步验证——
      - SYMFONY__ENV__FOSUSER_CONFIRMATION=false    # 关闭邮件确认
      - SYMFONY__ENV__FOSUSER_REGISTRATION=true     # 开启用户注册
      - SYMFONY__ENV__TWOFACTOR_AUTH=true           # 开启两步验证
    volumes:
      - /volume1/docker/wallabag/images:/var/www/wallabag/web/assets/images  # 附件/图片持久化
      - /volume1/docker/wallabag/data:/var/www/wallabag/data                  # 用户数据持久化
    depends_on:
      - db
      - redis

  db:
    image: mariadb:10.6
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=wallaroot          # 与 wallabag 容器相同
    volumes:
      - /volume1/docker/wallabag/db_data:/var/lib/mysql  # 数据库持久化

  redis:
    image: redis:alpine
    restart: unless-stopped
    volumes:
      - /volume1/docker/wallabag/redis:/data             # Redis 数据持久化

需要自行替换的字段

  • 6749:80 —— 宿主机端口:容器端口(根据实际需求修改)
  • MYSQL_ROOT_PASSWORD=wallaroot —— MariaDB 根用户密码
  • SYMFONY__ENV__DATABASE_NAME=wallabag —— Wallabag 使用的数据库名称
  • SYMFONY__ENV__DATABASE_USER=wallabag —— 连接数据库的普通用户
  • SYMFONY__ENV__DATABASE_PASSWORD=wallapass —— 普通用户密码
  • [email protected] —— 系统邮件发件人地址(如通知邮件)
  • SYMFONY__ENV__DOMAIN_NAME=wallabag.leogaox.com —— 你最终访问的域名

4 网页端外网访问通过 Cloudflare Tunnel

*Cloudflare Tunnel 是 Cloudflare 提供的永久免费通道,只需在本地运行一个小代理,就能无需公网即可安全地将内网服务暴露到公网

在 Zero Trust 控制台的 网络 → Tunnels → Public Hostnames(公共主机名)里,点击 “Add a public hostname” 后:

  1. Subdomain(子域:随意填写(如 wallabag)。
  2. Domain(域名):下拉选你已托管的域名(如 leogaox.com)。
  3. Service (服务):选 HTTP;URL 填写你内网服务的 IP:端口(10.10.10.33:6749)。
  4. Path(路径) 可留空(默认 /)。
  5. 点击 保存主机名 即可让 wallabag.leogaox.com 经 Tunnel 安全访问你的本地服务

5 创建 Cloudflare 安全规则

  1. 在 Cloudflare 仪表盘 → 安全性 → 安全规则 → 创建规则 → 自定义规则
  2. 在 表达式 中填写:(http.request.uri.path eq "/oauth/v2/token" and http.request.method eq "POST") or http.request.uri.path starts_with "/api/"
  3. 在 Action 选 跳过,并勾选以下要跳过的 WAF 组件:
  4. 具体要跳过的规则分类:
    • 所有其余自定义规则
    • 所有速率限制规则
    • 所有托管规则
    • 所有超级自动程序攻击模式规则
    • 浏览器完整性检查
    • 安全级别
  5. 将规则 放置位置 设置为 第一位,然后保存。

6 Wallabag建立 APi ➡️ iOS 客户端配置

字段填写内容
Wallabag URLwallabag.leogaox.com
Client ID / Client Secret创建应用得到API
账号 / 密码你的 Wallabag 用户名和密码

至此,Synology + Docker + Cloudflare Zero Trust + Wallabag 全链路打通 🎉

如果这篇文章帮到了你,别忘了点个 👍 或在评论区留言哦!

支持

Leave a Comment