开源财富管理软件Ghostfolio的安装

本文软件由网友 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 查询当前的用户的 uidgid ,或者直接查询指定用户

文章传送门:如何获取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

地址:https://ghostfol.io/en/start

相关推荐
无为扫地僧几秒前
三、ubuntu18.04安装docker
ubuntu·docker
谷莠子9051 小时前
hadoop实验之创业有感
hadoop·docker·团队开发
G丶AEOM1 小时前
Docker快速入门
docker
大熊程序猿2 小时前
airflow docker 安装
运维·docker·容器
带电的小王3 小时前
Docker在Ubuntu上安装
ubuntu·docker
fanruitian4 小时前
docker 为单个容器设置代理
运维·docker·容器
梁萌4 小时前
Docker快速安装Tomcat
docker·容器·tomcat·镜像
Doker 多克5 小时前
IntelliJ IDEA Docker集成
spring cloud·docker·intellij-idea
筏镜12 小时前
调整docker bridge地址冲突,通过bip调整 bridge地址
java·docker·eureka
王三三16 小时前
群晖利用acme.sh自动申请证书并且自动重载证书的问题解决
linux·自动化·证书·群晖·acme·acme.sh·lets encrypt