From 140ce705d60782ac0c6f82460622e1e27802f8f9 Mon Sep 17 00:00:00 2001 From: DireMunchkin <1665676+DireMunchkin@users.noreply.github.com> Date: Sun, 13 Aug 2023 16:28:56 +0200 Subject: [PATCH 01/11] Add Ghostfolio --- apps/ghostfolio/config.json | 45 ++++++++++++++ apps/ghostfolio/docker-compose.yml | 74 ++++++++++++++++++++++++ apps/ghostfolio/metadata/description.md | 27 +++++++++ apps/ghostfolio/metadata/logo.png | Bin 0 -> 3028 bytes 4 files changed, 146 insertions(+) create mode 100644 apps/ghostfolio/config.json create mode 100644 apps/ghostfolio/docker-compose.yml create mode 100644 apps/ghostfolio/metadata/description.md create mode 100644 apps/ghostfolio/metadata/logo.png 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 0000000000000000000000000000000000000000..3f3ce881e29c4e3a593df1d46aff032cddb91da7 GIT binary patch literal 3028 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 Date: Sun, 13 Aug 2023 16:44:11 +0200 Subject: [PATCH 02/11] Fix metadata --- apps/ghostfolio/config.json | 2 +- apps/ghostfolio/metadata/logo.jpg | Bin 0 -> 4295 bytes apps/ghostfolio/metadata/logo.png | Bin 3028 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 apps/ghostfolio/metadata/logo.jpg delete mode 100644 apps/ghostfolio/metadata/logo.png diff --git a/apps/ghostfolio/config.json b/apps/ghostfolio/config.json index 1012bea5..13e6f92d 100644 --- a/apps/ghostfolio/config.json +++ b/apps/ghostfolio/config.json @@ -9,7 +9,7 @@ "version": "1.300.0", "categories": ["finance"], "description": "Ghostfolio is a privacy-first, open source dashboard for your personal finances.", - "short_desc": "", + "short_desc": "Open Source Wealth Management Software.", "author": "dtslvr", "source": "https://github.com/ghostfolio/ghostfolio", "form_fields": [ diff --git a/apps/ghostfolio/metadata/logo.jpg b/apps/ghostfolio/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2aa33d71d25b18634b3096db1ccb5a1bf1808b1f GIT binary patch literal 4295 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 literal 0 HcmV?d00001 diff --git a/apps/ghostfolio/metadata/logo.png b/apps/ghostfolio/metadata/logo.png deleted file mode 100644 index 3f3ce881e29c4e3a593df1d46aff032cddb91da7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3028 zcmd5;`#Tc~A9v~$C9QMZa!bkW)rOKJZLTBt2+g&I47pSybKBcRBKOKpu7}B;IhM(W zg;| zOV8H3N-SF*2tXqfg{$2C5^_||^jKg^ZGwLd>}v6#GNqhB38LqhpuZmAUgO{HRPlH; zj)X9VV*{dw5zTq6RdqmNbkI-gcXs?&hh%GVElrAYR$|idP{fg6jfgX{w|1^Uwnqmx z89`qHW!}w8GA%&Q7h1elgOAMq9?Z>aPa`zG2MQMk##bveU7H+!TDVu?yVfPTIH1z@ zP7lC+*LN41cDugslzeem2o2%5Tf#XZ!B@sds8w;;wx%F;mLLFwRYyo6c^NmQ;fB*; zj3wGb$Hb>22jP(e8YRjqPW@1fxW$)U@oSF+yLu7C4~jMZ>4}7nxgL&5!`e>zDGB3O zDa}}o&2RL2>+pRK*+!FM4g+sA<-chb{Pq&?TtHR~Z-zk+*);PwqaRa+5fl{7%3*9Q z$b~j^6*jXivT*& zX83WTvc4TuZ)7N*ehRAbR;$i_>8iNN<$ad$Z*-8JU(R zirK7aNo7*9t0q$Esmg4)Q{@Oo`zCSB`16Kc%WH)$+5#`J4``x2X(awAesC=runqT= zH$9>VPP2<^#8o~_16O_kEdMaOC*3J?{UGmyPYXBZQ=mpichh-F5h&a`t89I%8E<^~ zRtQ&RBHD4#Jf&L%*bg_GWGT&v&qzp#j<>HJvHbIa&D|Hv3@P$c;jzR}d z952H<%fd9X`@+{pr_asG{JkT!u9$bTF{%HSEG~n^-lB?!yIRCLfI@*+)j z|CY>fv<8@K`Js#^*V}}pes2m7mL0^xIqPrd;8Xg{9fUuY$=*}Aeb&a&qaStO@oB|C*^THS`N2vd+ z_OsNb_^dI$Evma&N@}H_)301?zklwHa(@uwCA6St^fu0SiMz7J$BswOUoR=3JpJh7 zN1PihBEE;*xm+TkSC3#=e0S7Rix=rssPIAKjNXgmLmDXknDufPj92OH)6ki@;tL^7 z^d$Y5nnuza+`1VRjg(Sk#Uce~Ab1Xe)#~)Z?D9$!OpvGLoMfZ@8Z6yjS2|}N(=5B| z-gELLb7Py_MLMZEMp(07-kC-*^?>zgd>jb5^;eD+9KJ`|F=F1>wsH=P_EqO_b9U?v z#zIf=DSh0MBFMXtxp1fbpnGfb9_^0ZNpsZ}`zB|*msC|L%#xGTwH*yThfER#?Izq| zI5;X#tjB7lXr-Uu?3-$LIv)At}R#0*$jYxTn zQ6IR?>j6`iOc^(lcTI07dK_c!CD~bOqaX(FntgkxLR=COx9a-EBflqu&Lxu?$DO|> zdh#My0y4{8m$u*gQR8{!o4KJW2>7n!jUReIUKzizLrW(e8s%x2^;+i6hwRC1osq&X zbN4$3;6*xh{63VgPL%Cp`1Z`&1VkTxAn16laueZhDRpLH+T9=uwlJgmC$)6xDeQBD zP(r$L1MYSq3MT*NJ~t17u3=uHaq^F&Uh5!YsY3&BU(Oh^`EwGQ2<5TTCKrq1hI)E{ z(V`}3!EU=QI#Y{Yv9J{0a(J`w_^MwU^mV4zde;E_eDCpK(y!m-(93b4`Y`MUJ7hSa zzq<%@#*yK8pZp!}%fbrn%(??lqM@-5ZeS;hmQsjuwB|wdGQ+z*-8f}SwxrM6*dn`K(@VwfBoR+a~i9z-yEFr^Dcz6g|es^rPG)8cUbd0vr z5Z{3kXv8rq@WzEh+u@{`c3gAE)YN9!>cr769`#;9^a1qG(5gh|fDP43E#Y}1@3{DT zl=z%__;*G$<6jtBaYB$y~eG)b99X2Vlk>?LUOHV~ty%Awkabn&^ zY>VU>?2jDv`|wVXM1gMv0y|G!UCKOE-i2`TP#yZ2bye{Ro#@I+EsUNRsqvdnXDKq0S6 z8=z4J`1D+DDdIJu;k}P?x(%S`EQa4-o(;4+_}AJ#Y$sjaBk(b`_ZeLFYZs=QE86Y! zGImxnrS-^CZXFQtNo^!SSA(+M^SuAoV0l`PsOVa$zGj*LGZ*NxC&g(MUH$d6b(q># zuZ__0nXd)3bvfl^C45zUi;t;}s(sryA+w&ApfAT?4K-oE%8hjn47T`oAWD=v zh14VV+oX+^#iGJKJ1m3tyYjumv#f&Hq63n{ANLyavNKQgMnV-{KPYd=?h!kfkCF9=7D1~61oN%#cG52K&_y)ioY)I(5X8NjVS zYc?d?jILa)_Lt7nk=wSJymk9xiPDP{gY~BPZ}JN98pxPgbk(KZs`t%Z zici|^CVEg&?fG~sC{hI0q<$%z8sgHXcjaPYr{&?0*2^a(v4lfDtk_H51U)^S{xM8< zPLt_W#8t}5qfABcVer)_JRK54L&C;2%0RJ2#+ Date: Sun, 13 Aug 2023 16:54:02 +0200 Subject: [PATCH 03/11] Add container_name --- apps/ghostfolio/docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index 31b2c700..a18d2d39 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -2,6 +2,7 @@ version: "3.9" services: ghostfolio: + container_name: ghostfolio image: ghostfolio/ghostfolio:1.300.0 restart: unless-stopped ports: @@ -48,6 +49,7 @@ services: traefik.http.routers.ghostfolio-local.tls: true ghostfolio-postgres: + container_name: ghostfolio-postgres image: postgres:14-bullseye restart: unless-stopped stop_grace_period: 1m @@ -63,6 +65,7 @@ services: - tipi_main_network ghostfolio-redis: + container_name: ghostfolio-redis image: redis:6.2-bullseye restart: unless-stopped user: "1000:1000" From 2a71c3245932cec0bb580d02286640b2c1c750ca Mon Sep 17 00:00:00 2001 From: DireMunchkin <1665676+DireMunchkin@users.noreply.github.com> Date: Sun, 13 Aug 2023 16:58:48 +0200 Subject: [PATCH 04/11] Fix db images --- apps/ghostfolio/docker-compose.yml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index a18d2d39..e0107a1c 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -50,11 +50,8 @@ services: ghostfolio-postgres: container_name: ghostfolio-postgres - image: postgres:14-bullseye - restart: unless-stopped - stop_grace_period: 1m - user: "1000:1000" - environment: + image: postgres:14 + restart: unless-stopped environment: POSTGRES_DB: ghostfolio POSTGRES_USER: ghostfolio POSTGRES_PASSWORD: ${GHOSTFOLIO_DB_PASSWORD} @@ -66,9 +63,8 @@ services: ghostfolio-redis: container_name: ghostfolio-redis - image: redis:6.2-bullseye + image: redis:6.2 restart: unless-stopped - user: "1000:1000" command: > --requirepass ${GHOSTFOLIO_REDIS_PASSWORD} volumes: From b8e2da126b78e6e8d24ce607c9f9836b29c8970b Mon Sep 17 00:00:00 2001 From: DireMunchkin <1665676+DireMunchkin@users.noreply.github.com> Date: Sun, 13 Aug 2023 17:00:18 +0200 Subject: [PATCH 05/11] Typo --- apps/ghostfolio/docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index e0107a1c..865bfd8f 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -51,7 +51,8 @@ services: ghostfolio-postgres: container_name: ghostfolio-postgres image: postgres:14 - restart: unless-stopped environment: + restart: unless-stopped + environment: POSTGRES_DB: ghostfolio POSTGRES_USER: ghostfolio POSTGRES_PASSWORD: ${GHOSTFOLIO_DB_PASSWORD} From 02fc6d3d64202c0cbe492e5a316d1a94d05be215 Mon Sep 17 00:00:00 2001 From: DireMunchkin <1665676+DireMunchkin@users.noreply.github.com> Date: Sun, 13 Aug 2023 17:08:46 +0200 Subject: [PATCH 06/11] Fix port --- apps/ghostfolio/docker-compose.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index 865bfd8f..841d58c3 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -6,7 +6,7 @@ services: image: ghostfolio/ghostfolio:1.300.0 restart: unless-stopped ports: - - ${APP_PORT}:8080 + - ${APP_PORT}:3333 environment: NODE_ENV: production HOST: 0.0.0.0 @@ -22,6 +22,9 @@ services: REDIS_PORT: 6379 networks: - tipi_main_network + depends_on: + - ghostfolio-postgres + - ghostfolio-redis labels: # Main traefik.enable: true From 0dfc53b29a33315b34ffb7d6d1bb9d5015de676c Mon Sep 17 00:00:00 2001 From: DireMunchkin <1665676+DireMunchkin@users.noreply.github.com> Date: Sun, 13 Aug 2023 21:05:46 +0200 Subject: [PATCH 07/11] Review comments --- apps/ghostfolio/docker-compose.yml | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index 841d58c3..7e775408 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -12,7 +12,7 @@ services: 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 + DATABASE_URL: postgresql://ghostfolio:${GHOSTFOLIO_DB_PASSWORD}@ghostfolio-db:5432/ghostfolio?sslmode=prefer JWT_SECRET_KEY: ${GHOSTFOLIO_JWT_SECRET_KEY} POSTGRES_DB: ghostfolio POSTGRES_USER: ghostfolio @@ -23,8 +23,10 @@ services: networks: - tipi_main_network depends_on: - - ghostfolio-postgres - - ghostfolio-redis + - ghostfolio-db: + condition: service_healthy + - ghostfolio-redis: + condition: service_healthy labels: # Main traefik.enable: true @@ -51,26 +53,37 @@ services: traefik.http.routers.ghostfolio-local.service: ghostfolio traefik.http.routers.ghostfolio-local.tls: true - ghostfolio-postgres: - container_name: ghostfolio-postgres - image: postgres:14 + ghostfolio-db: + container_name: ghostfolio-db + image: postgres:15.4-alpine restart: unless-stopped environment: POSTGRES_DB: ghostfolio POSTGRES_USER: ghostfolio POSTGRES_PASSWORD: ${GHOSTFOLIO_DB_PASSWORD} PGDATA: /var/lib/postgresql/data + healthcheck: + test: ["CMD", "pg_isready", "-d", "ghostfolio"] + interval: 10s + timeout: 5s + retries: 5 volumes: - - ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data + - ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data networks: - tipi_main_network ghostfolio-redis: - container_name: ghostfolio-redis + container_name: redis:7-alpine image: redis:6.2 restart: unless-stopped command: > --requirepass ${GHOSTFOLIO_REDIS_PASSWORD} + healthcheck: + test: ['CMD', 'redis-cli', 'ping'] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s volumes: - ${APP_DATA_DIR}/data/redis:/data networks: From 4dcbae68bf76d58bfe8f6c63d0dcc7c74103f0ba Mon Sep 17 00:00:00 2001 From: DireMunchkin <1665676+DireMunchkin@users.noreply.github.com> Date: Sun, 13 Aug 2023 21:09:33 +0200 Subject: [PATCH 08/11] Fixed misedit --- apps/ghostfolio/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index 7e775408..a516a620 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -73,8 +73,8 @@ services: - tipi_main_network ghostfolio-redis: - container_name: redis:7-alpine - image: redis:6.2 + container_name: ghostfolio-redis + image: redis:7-alpine restart: unless-stopped command: > --requirepass ${GHOSTFOLIO_REDIS_PASSWORD} From d1aa870d4870abb9e42ce505d49cdf4221f0ce0a Mon Sep 17 00:00:00 2001 From: DireMunchkin <1665676+DireMunchkin@users.noreply.github.com> Date: Sun, 13 Aug 2023 21:12:51 +0200 Subject: [PATCH 09/11] Fixed missing indent --- apps/ghostfolio/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index a516a620..67281932 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -24,9 +24,9 @@ services: - tipi_main_network depends_on: - ghostfolio-db: - condition: service_healthy + condition: service_healthy - ghostfolio-redis: - condition: service_healthy + condition: service_healthy labels: # Main traefik.enable: true From 772e9829e4c4a8dbce37d4f509a96e8d8aca454a Mon Sep 17 00:00:00 2001 From: DireMunchkin <1665676+DireMunchkin@users.noreply.github.com> Date: Sun, 13 Aug 2023 21:24:46 +0200 Subject: [PATCH 10/11] Health check syntax --- apps/ghostfolio/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/ghostfolio/docker-compose.yml b/apps/ghostfolio/docker-compose.yml index 67281932..8ed12f8f 100644 --- a/apps/ghostfolio/docker-compose.yml +++ b/apps/ghostfolio/docker-compose.yml @@ -23,10 +23,10 @@ services: networks: - tipi_main_network depends_on: - - ghostfolio-db: - condition: service_healthy - - ghostfolio-redis: - condition: service_healthy + ghostfolio-db: + condition: service_healthy + ghostfolio-redis: + condition: service_healthy labels: # Main traefik.enable: true From 796f7abf66b4598df276a29786d6cc8f37576e06 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Tue, 15 Aug 2023 20:29:23 +0200 Subject: [PATCH 11/11] docs: add ghostfolio to main readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 92648714..9a184f39 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Freshrss](https://github.com/FreshRSS/FreshRSS) - A free, self-hostable RSS aggregator - [gandi-livedns](https://github.com/jbbodart/gandi-livedns) - Update your Gandi DNS zone records with your WAN IP - [Ghost](https://github.com/TryGhost/Ghost) - Ghost - Turn your audience into a business +- [Ghostfolio](https://github.com/ghostfolio/ghostfolio) - Open Source Wealth Management Software. - [Gitea](https://github.com/go-gitea/gitea) - Gitea - A painless self-hosted Git service - [Gladys Assistant](https://github.com/gladysassistant/gladys) - A privacy-first, open-source home assistant - [Gotify](https://github.com/gotify/server) - Gotify - Simple server for sending and receiving notification messages