diff --git a/apps/ghostfolio/config.json b/apps/ghostfolio/config.json new file mode 100644 index 00000000..1012bea5 --- /dev/null +++ b/apps/ghostfolio/config.json @@ -0,0 +1,45 @@ +{ + "$schema": "../schema.json", + "name": "Ghostfolio", + "port": 3333, + "available": true, + "exposable": true, + "id": "ghostfolio", + "tipi_version": 1, + "version": "1.300.0", + "categories": ["finance"], + "description": "Ghostfolio is a privacy-first, open source dashboard for your personal finances.", + "short_desc": "", + "author": "dtslvr", + "source": "https://github.com/ghostfolio/ghostfolio", + "form_fields": [ + { + "type": "random", + "min": 32, + "max": 32, + "label": "Access token salt", + "env_variable": "GHOSTFOLIO_ACCESS_TOKEN_SALT" + }, + { + "type": "random", + "min": 32, + "max": 32, + "label": "JSON Web Tokens secret key", + "env_variable": "GHOSTFOLIO_JWT_SECRET_KEY" + }, + { + "type": "random", + "min": 32, + "max": 32, + "label": "Database password", + "env_variable": "GHOSTFOLIO_DB_PASSWORD" + }, + { + "type": "random", + "min": 32, + "max": 32, + "label": "Redis password", + "env_variable": "GHOSTFOLIO_REDIS_PASSWORD" + } + ] + } diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml new file mode 100644 index 00000000..31b2c700 --- /dev/null +++ b/apps/ghostfolio/docker-compose.yml @@ -0,0 +1,74 @@ +version: "3.9" + +services: + ghostfolio: + image: ghostfolio/ghostfolio:1.300.0 + restart: unless-stopped + ports: + - ${APP_PORT}:8080 + environment: + NODE_ENV: production + HOST: 0.0.0.0 + PORT: 3333 + ACCESS_TOKEN_SALT: $GHOSTFOLIO_ACCESS_TOKEN_SALT + DATABASE_URL: postgresql://ghostfolio:${GHOSTFOLIO_DB_PASSWORD}@ghostfolio-postgres:5432/ghostfolio?sslmode=prefer + JWT_SECRET_KEY: ${GHOSTFOLIO_JWT_SECRET_KEY} + POSTGRES_DB: ghostfolio + POSTGRES_USER: ghostfolio + POSTGRES_PASSWORD: ${GHOSTFOLIO_DB_PASSWORD} + REDIS_HOST: ghostfolio-redis + REDIS_PASSWORD: ${GHOSTFOLIO_REDIS_PASSWORD} + REDIS_PORT: 6379 + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.ghostfolio-web-redirect.redirectscheme.scheme: https + traefik.http.services.ghostfolio.loadbalancer.server.port: 3333 + # Web + traefik.http.routers.ghostfolio-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ghostfolio-insecure.entrypoints: web + traefik.http.routers.ghostfolio-insecure.service: ghostfolio + traefik.http.routers.ghostfolio-insecure.middlewares: ghostfolio-web-redirect + # Websecure + traefik.http.routers.ghostfolio.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ghostfolio.entrypoints: websecure + traefik.http.routers.ghostfolio.service: ghostfolio + traefik.http.routers.ghostfolio.tls.certresolver: myresolver + # Local domain + traefik.http.routers.ghostfolio-local-insecure.rule: Host(`ghostfolio.${LOCAL_DOMAIN}`) + traefik.http.routers.ghostfolio-local-insecure.entrypoints: web + traefik.http.routers.ghostfolio-local-insecure.service: ghostfolio + traefik.http.routers.ghostfolio-local-insecure.middlewares: ghostfolio-web-redirect + # Local domain secure + traefik.http.routers.ghostfolio-local.rule: Host(`ghostfolio.${LOCAL_DOMAIN}`) + traefik.http.routers.ghostfolio-local.entrypoints: websecure + traefik.http.routers.ghostfolio-local.service: ghostfolio + traefik.http.routers.ghostfolio-local.tls: true + + ghostfolio-postgres: + image: postgres:14-bullseye + restart: unless-stopped + stop_grace_period: 1m + user: "1000:1000" + environment: + POSTGRES_DB: ghostfolio + POSTGRES_USER: ghostfolio + POSTGRES_PASSWORD: ${GHOSTFOLIO_DB_PASSWORD} + PGDATA: /var/lib/postgresql/data + volumes: + - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data + networks: + - tipi_main_network + + ghostfolio-redis: + image: redis:6.2-bullseye + restart: unless-stopped + user: "1000:1000" + command: > + --requirepass ${GHOSTFOLIO_REDIS_PASSWORD} + volumes: + - ${APP_DATA_DIR}/data/redis:/data + networks: + - tipi_main_network diff --git a/apps/ghostfolio/metadata/description.md b/apps/ghostfolio/metadata/description.md new file mode 100644 index 00000000..9636517f --- /dev/null +++ b/apps/ghostfolio/metadata/description.md @@ -0,0 +1,27 @@ +**Ghostfolio** is an open source wealth management software built with web technology. The application empowers busy people to keep track of stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions. The software is designed for personal use in continuous operation. + +## Why Ghostfolio? + +Ghostfolio is for you if you are... + +- ๐Ÿ’ผ trading stocks, ETFs or cryptocurrencies on multiple platforms +- ๐Ÿฆ pursuing a buy & hold strategy +- ๐ŸŽฏ interested in getting insights of your portfolio composition +- ๐Ÿ‘ป valuing privacy and data ownership +- ๐Ÿง˜ into minimalism +- ๐Ÿงบ caring about diversifying your financial resources +- ๐Ÿ†“ interested in financial independence +- ๐Ÿ™… saying no to spreadsheets +- ๐Ÿ˜Ž still reading this list + +## Features + +- โœ… Create, update and delete transactions +- โœ… Multi account management +- โœ… Portfolio performance for `Today`, `YTD`, `1Y`, `5Y`, `Max` +- โœ… Various charts +- โœ… Static analysis to identify potential risks in your portfolio +- โœ… Import and export transactions +- โœ… Dark Mode +- โœ… Zen Mode +- โœ… Progressive Web App (PWA) with a mobile-first design diff --git a/apps/ghostfolio/metadata/logo.png b/apps/ghostfolio/metadata/logo.png new file mode 100644 index 00000000..3f3ce881 Binary files /dev/null and b/apps/ghostfolio/metadata/logo.png differ