本文软件由网友
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
ini
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) 签名的秘密密钥,需设置为随机字符串 |
密码也好秘钥也好,都是随机的字符串
bash
# 生成密码
openssl rand -hex 16
bash
# 生成秘钥
openssl rand -base64 32
docker-compose.yml
docker-compose.yml
在官方的基础上做了微调,源文件在:https://github.com/ghostfolio/ghostfolio/blob/main/docker/docker-compose.yml
yaml
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
的权限设置
yaml
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
用于确保容器在运行时具有最小权限,降低潜在的安全风险
- 容器
gf-postgres
的权限设置
yaml
cap_add:
- CHOWN
- DAC_READ_SEARCH
- FOWNER
- SETGID
- SETUID
gf-postgres
在最小权限基础上,通过添加上面这些能力,让容器获得了更多的权限,允许其在文件操作和权限管理方面执行更复杂的任务
- 容器
gf-redis
的用户
yaml
user: '999:1000'
可以用命令 id $user
查询当前的用户的 uid
和 gid
,或者直接查询指定用户
文章传送门:如何获取PUID和PGID
老苏直接用了示例中的用户,但日志中会显示错误
log
gf-redis | chown: .: Operation not permitted
说明当前用户的权限不足,还需要给 rdata
目录读写权限
启动
接下来我们执行下面的命令
bash
# 新建文件夹 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
,因为一旦丢了,可能就找不回账号了
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