在这里插入图片描述

本文软件由网友 AMAO 推荐;老苏不会用,有兴趣的可以自己研究

什么是 Ghostfolio ?

Ghostfolio 是一款基于网络技术构建的开源轻量级财富管理软件。该应用程序帮助忙碌的人士跟踪股票、ETF 或加密货币,并做出基于数据的稳健投资决策。软件旨在用于个人持续使用。Ghostfolio 提供了一个财务仪表板,分解您的资产配置,了解您的净资产,让你像老板一样管理你的财富。

为什么选择 Ghostfolio?

  • 在多个平台上交易股票、ETF 或加密货币
  • 追求买入并持有策略
  • 有兴趣了解您投资组合的构成
  • 重视隐私和数据所有权
  • 热衷于极简主义
  • 关注多样化您的财务资源
  • 🆓 有兴趣实现财务独立
  • 拒绝使用电子表格
  • 仍在阅读此列表

软件特点:

  • 创建、更新和删除交易
  • 多账户管理
  • 投资组合表现:按时间加权的收益率(TWR),包括今天、本周到现在(WTD)、本月到现在(MTD)、今年到现在(YTD)、1 年、5 年和最大值
  • 各种图表
  • 静态分析以识别投资组合中的潜在风险
  • 导入和导出交易
  • 暗黑模式
  • 禅模式
  • 具有移动优先设计的渐进式网络应用(PWA

安装

在群晖上以 Docker 方式安装。

本文写作时, latest 版本对应为 2.122.0

采用 docker-compose 方式安装,需要先准备好两个文件

env.txt

env.txt 基于 .env.example 修改而成,源文件地址:https://github.com/ghostfolio/ghostfolio/blob/main/.env.example

COMPOSE_PROJECT_NAME=ghostfolio

# CACHE
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=ec2fb99ec533446690eb0f2196b45ae8

# POSTGRES
POSTGRES_DB=ghostfolio-db
POSTGRES_USER=user
POSTGRES_PASSWORD=f27c78199b129d84d8f84c75b0887e13

# VARIOUS
ACCESS_TOKEN_SALT=b8ac2390db4f2c446817622d5ecee1e7
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer
JWT_SECRET_KEY=yDpuGNTqZKZJP3b7mVUit5PEVj2YZdXEKk/UUInC+pc=

其中的环境变量的简单说明

可变
COMPOSE_PROJECT_NAME定义 Docker Compose 项目的名称,这将影响 Docker 创建的资源名称
REDIS_HOST指定 Redis 服务器的主机地址
REDIS_PORT指定 Redis 服务器的端口
REDIS_PASSWORD用于连接 Redis 的密码
POSTGRES_DB指定 PostgreSQL 数据库的名称
POSTGRES_USER设定连接 PostgreSQL 的用户名
POSTGRES_PASSWORD用于连接 PostgreSQL 的密码
ACCESS_TOKEN_SALT于生成访问令牌的盐值,需设置为随机字符串
DATABASE_URL定义数据库的连接字符串
JWT_SECRET_KEY用于 JWT(JSON Web Token) 签名的秘密密钥,需设置为随机字符串

密码也好秘钥也好,都是随机的字符串

# 生成密码
openssl rand -hex 16

# 生成秘钥
openssl rand -base64 32

docker-compose.yml

docker-compose.yml 在官方的基础上做了微调,源文件在:https://github.com/ghostfolio/ghostfolio/blob/main/docker/docker-compose.yml

version: '3'

services:
  ghostfolio:
    image: docker.io/ghostfolio/ghostfolio:latest
    container_name: gf-web
    init: true
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    env_file:
      - ./env.txt
    environment:
      DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?connect_timeout=300&sslmode=prefer
      REDIS_HOST: redis
      REDIS_PASSWORD: ${REDIS_PASSWORD}
    ports:
      - 3333:3333
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    healthcheck:
      test: ['CMD-SHELL', 'curl -f http://localhost:3333/api/v1/health']
      interval: 10s
      timeout: 5s
      retries: 5

  postgres:
    image: postgres:15
    container_name: gf-postgres
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - DAC_READ_SEARCH
      - FOWNER
      - SETGID
      - SETUID
    security_opt:
      - no-new-privileges:true
    env_file:
      - ./env.txt
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}']
      interval: 10s
      timeout: 5s
      retries: 5
    volumes:
      - ./pdata:/var/lib/postgresql/data

  redis:
    image: redis:alpine
    container_name: gf-redis
    user: '999:1000'
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    env_file:
      - ./env.txt
    command: ['redis-server', '--requirepass', $REDIS_PASSWORD]
    healthcheck:
      test: ['CMD-SHELL', 'redis-cli --pass "$REDIS_PASSWORD" ping | grep PONG']
      interval: 10s
      timeout: 5s
      retries: 5
    volumes:
      - ./rdata:/data
  • 容器 gf-web 的环境变量
可变
DATABASE_URL指定 PostgreSQL 数据库的连接字符串
REDIS_HOST指定 Redis 服务器的主机名
REDIS_PASSWORD连接 Redis 的密码,从环境文件中读取
  • 容器 gf-web 的权限设置
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true

用于确保容器在运行时具有最小权限,降低潜在的安全风险

  • 容器 gf-postgres 的权限设置
    cap_add:
      - CHOWN
      - DAC_READ_SEARCH
      - FOWNER
      - SETGID
      - SETUID

gf-postgres 在最小权限基础上,通过添加上面这些能力,让容器获得了更多的权限,允许其在文件操作和权限管理方面执行更复杂的任务

  • 容器 gf-redis 的用户
    user: '999:1000'

可以用命令 id $user 查询当前的用户的 uidgid ,或者直接查询指定用户

文章传送门:如何获取PUID和PGID

老苏直接用了示例中的用户,但日志中会显示错误

gf-redis      | chown: .: Operation not permitted

说明当前用户的权限不足,还需要给 rdata 目录读写权限

启动

接下来我们执行下面的命令

# 新建文件夹 ghostfolio 和 子目录
mkdir -p /volume1/docker/ghostfolio/data

# 进入 ghostfolio 目录
cd /volume1/docker/ghostfolio

# 设置读写权限
chmod a+rw ./rdata

# 将 docker-compose.yml 和 env.txt 放入当前目录

# 一键启动
docker-compose --env-file env.txt up -d

运行

在浏览器中输入 http://群晖IP:3333 就能看到主界面

点绿色的 Get Started 按钮

Create Account 创建账号

复制并保存好 Security Token ,因为一旦丢了,可能就找不回账号了

7ae3003ecc41e98052e9afcf7d229745894572359cb7e282e6223974d2487961c43b4606846aab395dea47e21af12cfdb1e745a5cff1267013f241d208e7a72a

因为后面登录时,需要输入

Agree and continue

Setup account 设置账号信息

  • 设置您的账户:通过添加您的银行和经纪账户,获取全面的财务概览。

  • 记录您的活动:记录您的投资活动,以保持投资组合的最新状态。

  • 监控和分析您的投资组合:实时跟踪进展,并获得全面的分析和洞察。

点右下角的 + 号添加账号

软件支持多语言

但目前没看到中文

参考文档

ghostfolio/ghostfolio: Open Source Wealth Management Software. Angular + NestJS + Prisma + Nx + TypeScript
地址:https://github.com/ghostfolio/ghostfolio

Ghostfolio – Open Source Wealth Management Software
地址:https://ghostfol.io/en/start

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部