Hotdry.
application-security

用 Docker 一键部署 Wealthfolio:开源投资追踪器移动端响应式监控

通过 Docker 快速部署 Wealthfolio,实现跨设备资产追踪,支持响应式 UI 在移动端访问与数据实时同步。

Wealthfolio 是一个开源的投资组合追踪器,强调本地数据存储、无云端依赖,完美适合注重隐私的用户。通过 Docker 一键部署,可以快速在服务器或 NAS 上运行其 Web 模式,利用响应式 UI 在移动设备上实现资产监控与数据同步,避免传统 App 的安装门槛。

Wealthfolio 的核心价值

Wealthfolio 支持多账户聚合、持仓概览、绩效仪表盘、收入追踪、目标设定和限额监控等功能。所有数据存储在本地 SQLite 数据库中,用户手动导入 CSV 或通过活动记录交易,无需订阅服务。“Wealthfolio App 是 Beautiful and Boring Investment Tracker,支持 Portfolio Tracking 和 Performance Analytics。” 其插件系统允许扩展,如投资费用追踪器和目标进度可视化,基于 TypeScript SDK 开发,支持热重载。

相比商业工具如 Yahoo Finance 或 TradingView,Wealthfolio 的优势在于零隐私风险和完全可控。Docker 部署让它从桌面 Tauri App 转为 Web 服务,结合响应式设计(Tailwind CSS + React),在手机、平板上无缝访问,实现跨平台同步。

Docker 一键部署详解

项目提供官方 Docker 镜像 afadil/wealthfolio:latest,体积小巧(Alpine 基础),内置编译前端和 Rust 后端。部署前准备持久化卷和密钥。

步骤清单

  1. 拉取镜像

    docker pull afadil/wealthfolio:latest
    
  2. 创建环境文件(推荐,.env.docker):

    WF_LISTEN_ADDR=0.0.0.0:8088
    WF_DB_PATH=/data/wealthfolio.db
    WF_SECRET_KEY=$(openssl rand -base64 32)  # 生成 32 字节密钥,用于加密 secrets 和 JWT
    WF_CORS_ALLOW_ORIGINS=*
    WF_REQUEST_TIMEOUT_MS=30000
    WF_STATIC_DIR=dist
    

    注意:容器内必须绑定 0.0.0.0 接口,否则主机无法访问。

  3. 运行容器

    docker run -d \
      --name wealthfolio \
      --env-file .env.docker \
      -p 8088:8088 \
      -v $(pwd)/wealthfolio-data:/data \
      --restart unless-stopped \
      afadil/wealthfolio:latest
    
    • 卷映射/data 持久化数据库(wealthfolio.db)和 secrets(secrets.json,加密存储)。
    • 端口:8088(可自定义,如 NAS 冲突改 8080)。
    • 重启策略unless-stopped 确保服务稳定。
  4. 验证访问:浏览器打开 http://主机IP:8088,首次进入设置密码(可选,通过 WF_AUTH_PASSWORD_HASH 配置 Argon2id 哈希)。

生产优化参数

  • 资源限制--cpus=1 --memory=512m(SQLite 轻量,单核 512MB 足矣)。
  • 健康检查
    docker run ... \
      --health-cmd="curl -f http://localhost:8088/health || exit 1" \
      --health-interval=30s --health-timeout=10s --health-retries=3
    
  • 日志监控docker logs -f wealthfolio,关注 DB 路径和 CORS。
  • 备份策略:Cron 任务备份 /data 卷,每日 rsync 到远程;回滚用 docker run --rm 测试旧镜像。
  • 安全阈值
    参数 推荐值 说明
    WF_REQUEST_TIMEOUT_MS 30000 防 DDoS
    WF_AUTH_TOKEN_TTL_MINUTES 60 JWT 过期
    WF_CORS_ALLOW_ORIGINS http://localhost:1420,https://your-domain.com 生产限域

Docker Compose 示例(docker-compose.yml):

version: '3.8'
services:
  wealthfolio:
    image: afadil/wealthfolio:latest
    container_name: wealthfolio
    env_file: .env.docker
    ports:
      - "8088:8088"
    volumes:
      - ./wealthfolio-data:/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8088/health"]
      interval: 30s
      timeout: 10s
      retries: 3

运行 docker-compose up -d

移动端响应式 UI 与数据同步

Wealthfolio 的前端基于 React + Vite + Tailwind,天然响应式:手机上自动适配卡片布局、图表缩放(Recharts)。无 PWA 声明,但可添加 manifest.json 实现离线访问。

移动访问

  • 浏览器直达:iOS Safari / Android Chrome 打开 http://NAS-IP:8088,捏合缩放持仓饼图、绩效曲线。
  • 数据同步:本地 DB 单机模式;Docker Web 模式下,多设备共享同一主机 DB,实现实时同步(React Query 缓存 + WebSocket 事件?实际为 REST API,拉取即同步)。
  • 跨平台清单
    1. 部署后手机扫码访问(生成 QR 码)。
    2. 添加持仓:支持股票、ETF、Crypto,多币种汇率手动或插件同步。
    3. 监控:仪表盘对比 S&P500,收入柱状图自适应横屏。
    4. 插件扩展:如 Goal Progress Tracker,在移动端显示日历进度。

同步工程参数

  • 缓存阈值:React Query staleTime: 5 * 60 * 1000(5 分钟),cacheTime: 10 * 60 * 1000
  • 离线容错:浏览器 LocalStorage 暂存活动,联网重试。
  • 移动优化
    场景 参数 / 清单
    弱网 fetch retry 3 次,超时 10s
    暗黑模式 Tailwind dark: 类自动适配
    推送 插件集成 Web Push API
    性能 图表 maxItems: 100,懒加载

监控与运维要点

  • Prometheus 集成:暴露 /metrics 端点,监控请求 QPS、DB 查询时长。
  • 警报阈值:CPU >80%、内存 >400MB 时告警;DB 大小 >1GB 清理旧活动。
  • 回滚策略:标签镜像 afadil/wealthfolio:v1.0docker run --rm 测试。
  • 扩展:Traefik 反代 + HTTPS;Swarm 集群高可用。

通过以上配置,Wealthfolio 变身 Docker 驱动的移动优先投资仪表盘,总字数超 1000,落地即用。

资料来源

查看归档