家庭网络与 NAS 部署

将 PicFast 运行在你自己的 NAS 上,图片数据完全由你掌控——没有云服务商、没有月费。本指南涵盖常见 NAS 平台的部署方法,以及在无公网 IP 的情况下将服务暴露至互联网的方案。

为什么选择 NAS?

NAS 是图床平台的理想运行环境:

  • 硬盘空间本就充裕,图床的核心价值正是存储
  • 现代 NAS 普遍原生支持 Docker
  • 低功耗 7×24 小时运行
  • 数据就在你的硬盘上、你的局域网内

NAS 平台

PicFast 可在任何支持 Docker 的平台上运行,以下是各平台的部署要点:

群晖 Synology

使用 Container Manager(原 Docker 套件)。通过 docker-compose 创建项目:

  1. 打开 Container Manager → 项目 → 新增
  2. 粘贴下方的 docker-compose 内容,修改路径和密钥
  3. 将数据卷映射到 /volume1/docker/picfast/uploads(或你的存储位置)

威联通 QNAP

使用 Container Station,从 docker-compose 创建应用,步骤与群晖类似。数据卷需指向 /share/ 下的共享文件夹。

TrueNAS

通过 Apps 界面的 Docker Compose 选项部署,或在 jail/VM 中直接使用 docker compose。ZFS 数据集非常适合作为上传和缩略图的卷挂载。

Unraid

Docker 选项卡中添加容器并使用自定义 compose 文件。数据卷指向 /mnt/user/picfast/ 即可享受 parity 保护。

通用 Linux / 树莓派

克隆仓库或直接使用 Docker Hub 镜像。树莓派用户使用 xbeta/picfast:latest(多架构镜像,含 ARM64)。

NAS 精简 compose 模板

以下是一份适合家庭部署的精简 docker-compose.yml,保存后执行 docker compose up -d

services:
    db:
      image: postgres:16-alpine
      restart: unless-stopped
      environment:
        POSTGRES_USER: picfast
        POSTGRES_PASSWORD: picfast
        POSTGRES_DB: picfast
      volumes:
        - pgdata:/var/lib/postgresql/data

    app:
      image: xbeta/picfast:latest
      restart: unless-stopped
      ports:
        - "18080:8080"
      environment:
        PICFAST_DATABASE_URL: "postgres://picfast:picfast@db:5432/picfast?sslmode=disable"
        PICFAST_JWT_SECRET: "replace-with-a-strong-random-value"
        PICFAST_SERVER_BASE_URL: "https://your-domain.com"
        PICFAST_APP_ADMIN_EMAIL: "admin@example.com"
        PICFAST_APP_ADMIN_PASSWORD: "change-this-password"
        PICFAST_STORAGE_LOCAL_ROOT: "/app/data/uploads"
        PICFAST_STORAGE_THUMBNAIL_DIR: "/app/data/thumbnails"
      volumes:
        - uploads:/app/data/uploads
        - thumbnails:/app/data/thumbnails
      depends_on:
        - db

  volumes:
    pgdata:
    uploads:
    thumbnails:

内网穿透:暴露服务到公网

多数家庭宽带没有固定公网 IP,即使有,在路由器上直接开端口也意味着安全风险。解决方案是隧道——一条加密的对外连接,将公网流量反向代理到你本地的服务,无需开放任何入站端口。

方案一:Cloudflare Tunnel(推荐)

免费、稳定,无需开放任何端口。前提是你拥有一个域名,且 DNS 托管在 Cloudflare。

配置步骤

  1. 在 NAS 或宿主机上安装 cloudflared
  2. 认证:cloudflared tunnel login
  3. 创建隧道:cloudflared tunnel create picfast
  4. 编写配置文件 config.yml
tunnel: <tunnel-id>
  credentials-file: /home/user/.cloudflared/<tunnel-id>.json

  ingress:
    - hostname: pics.yourdomain.com
      service: http://localhost:18080
    - service: http_status:404
  1. 创建 DNS 记录:cloudflared tunnel route dns picfast pics.yourdomain.com
  2. 启动隧道:cloudflared tunnel run picfast

长期运行建议将 cloudflared 加入 compose 作为额外服务:

  tunnel:
    image: cloudflare/cloudflared:latest
    restart: unless-stopped
    command: tunnel run
    environment:
      TUNNEL_TOKEN: "<your-tunnel-token>"

Cloudflare Tunnel 提供 DDoS 防护、自动 SSL、全球 CDN 加速。但注意 Cloudflare 在中间解密流量——若对数据隐私有极致要求,可选择 Tailscale。

方案二:Tailscale

Tailscale 基于 WireGuard 搭建 Mesh 网络,有两种服务暴露模式:

Tailscale Serve(仅局域网/虚拟局域网)

在 tailnet 内部暴露服务,只有你网络中其他 Tailscale 设备可以访问:

tailscale serve --bg 18080

你的 PicFast 实例将通过 https://<node-name>.tailnet-name.ts.net 访问,仅限 tailnet 内。适合家庭私用。

Tailscale Funnel(公网访问)

将 Serve 延伸至公网,互联网上任何设备均可访问:

tailscale serve --bg 18080
tailscale funnel --bg 18080

Funnel 有限制:仅 443 端口,免费版有带宽上限。但配置极简,零 DNS 配置,开箱即用。

方案三:FRP(内网穿透)

FRP 是国内最常用的内网穿透方案,适用于 Cloudflare 和 Tailscale 速度不佳或不可用的场景。需要一台有公网 IP 的 VPS 作为中继。

服务端(VPS,有公网 IP)

# frps.toml
  bindPort = 7000
  vhostHTTPPort = 8080

客户端(你的 NAS,在内网)

# frpc.toml
  serverAddr = "<vps-ip>"
  serverPort = 7000

  [[proxies]]
  name = "picfast-web"
  type = "http"
  localPort = 18080
  customDomains = ["pics.yourdomain.com"]

VPS 收到 8080 端口的流量后,通过隧道转发到你的 NAS。FRP 速度快、灵活可控,但需要自己管理 VPS、用 Nginx 或 Caddy 处理 SSL 终结、付服务器的钱。

隧道方案对比

Cloudflare TunnelTailscale FunnelFRP
公网访问
需要域名是(HTTPS 需要)
需要 VPS
SSL / HTTPS自动自动手动(Nginx/Caddy)
带宽免费(合理使用)免费版有限取决于 VPS
隐私Cloudflare 解密端到端加密中继服务器可见流量
国内网络部分可用较慢✅ 最佳
最适合全球、生产环境个人、私用国内、全掌控

安全提醒

  • PICFAST_JWT_SECRET 务必设为高强度随机值
  • 如非必要,关闭游客上传(PICFAST_APP_ALLOW_GUEST_UPLOAD=false
  • 创建好账号后关闭公开注册(PICFAST_APP_ALLOW_REGISTRATION=false
  • 首次启动时,初始化向导可在 /setup 路径访问;设置 PICFAST_APP_ADMIN_EMAILPICFAST_APP_ADMIN_PASSWORD 可在无头部署时自动创建管理员并跳过向导
  • 以上三种隧道方案均默认强制 HTTPS,无需额外配置证书
  • 如用 FRP 部署在国内 VPS,建议在反向代理层配置请求频率限制以防范滥用