From 5c4c1790ec4ac8b611f3b06dfb124f60a6fb997d Mon Sep 17 00:00:00 2001 From: npty Date: Thu, 14 Sep 2023 14:36:43 +0700 Subject: [PATCH 01/13] chore: done --- apps/ntfy/config.json | 18 +++++++++++++ apps/ntfy/docker-compose.yml | 43 ++++++++++++++++++++++++++++++ apps/ntfy/metadata/description.md | 10 +++++++ apps/ntfy/metadata/logo.jpg | Bin 0 -> 19716 bytes 4 files changed, 71 insertions(+) create mode 100644 apps/ntfy/config.json create mode 100644 apps/ntfy/docker-compose.yml create mode 100644 apps/ntfy/metadata/description.md create mode 100644 apps/ntfy/metadata/logo.jpg diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json new file mode 100644 index 00000000..63c85cfa --- /dev/null +++ b/apps/ntfy/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "../schema.json", + "name": "Ntfy", + "available": true, + "exposable": true, + "port": 8166, + "id": "ntfy", + "tipi_version": 5, + "version": "latest", + "categories": [ + "utilities" + ], + "description": "Send push notifications to any devices using a simple HTTP PUT or POST request.", + "short_desc": "Ntfy, a simple server for sending and receiving notification messages.", + "author": "npty", + "source": "https://github.com/binwiederhier/ntfy", + "website": "https://ntfy.sh/" +} diff --git a/apps/ntfy/docker-compose.yml b/apps/ntfy/docker-compose.yml new file mode 100644 index 00000000..4f78ae7d --- /dev/null +++ b/apps/ntfy/docker-compose.yml @@ -0,0 +1,43 @@ +version: '3.7' + +services: + ntfy: + container_name: ntfy + image: binwiederhier/ntfy + environment: + - NTFY_BASE_URL=${APP_PROTOCOL}://${APP_DOMAIN} + - NTFY_UPSTREAM_BASE_URL=https://ntfy.sh + command: serve + volumes: + - "${APP_DATA_DIR}/data/cache:/var/cache/ntfy" + - "${APP_DATA_DIR}/data/config:/etc/ntfy" + ports: + - ${APP_PORT}:80 + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.ntfy-web-redirect.redirectscheme.scheme: https + traefik.http.services.ntfy.loadbalancer.passhostheader: true + traefik.http.services.ntfy.loadbalancer.server.port: 80 + # Web + traefik.http.routers.ntfy-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ntfy-insecure.entrypoints: web + traefik.http.routers.ntfy-insecure.service: ntfy + traefik.http.routers.ntfy-insecure.middlewares: ntfy-web-redirect + # Websecure + traefik.http.routers.ntfy.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ntfy.entrypoints: websecure + traefik.http.routers.ntfy.service: ntfy + traefik.http.routers.ntfy.tls.certresolver: myresolver + # Local domain + traefik.http.routers.ntfy-local-insecure.rule: Host(`ntfy.${LOCAL_DOMAIN}`) + traefik.http.routers.ntfy-local-insecure.entrypoints: web + traefik.http.routers.ntfy-local-insecure.service: ntfy + traefik.http.routers.ntfy-local-insecure.middlewares: ntfy-web-redirect + # Local domain secure + traefik.http.routers.ntfy-local.rule: Host(`ntfy.${LOCAL_DOMAIN}`) + traefik.http.routers.ntfy-local.entrypoints: websecure + traefik.http.routers.ntfy-local.service: ntfy + traefik.http.routers.ntfy-local.tls: true diff --git a/apps/ntfy/metadata/description.md b/apps/ntfy/metadata/description.md new file mode 100644 index 00000000..330f14d3 --- /dev/null +++ b/apps/ntfy/metadata/description.md @@ -0,0 +1,10 @@ +# Selfhosted notification service + +We wanted a simple server for sending and receiving messages (in real time per WebSocket). For this, not many open source projects existed and most of the existing ones were abandoned. Also, a requirement was that it can be self-hosted. We know there are many free and commercial push services out there. + +At the heart of this project. (gotify/server)[https://hub.docker.com/r/gotify/server] features a WebUI and functionality for: + +- sending messages via a REST-API +- subscribing/receiving messages via a web socket connection +- managing users, clients and applications + diff --git a/apps/ntfy/metadata/logo.jpg b/apps/ntfy/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9003a1959d28c7aea6d6c2fd726866c5ffe9d0f GIT binary patch literal 19716 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 literal 0 HcmV?d00001 From 505143b34a989b5af77ad93f49753ac1b354be74 Mon Sep 17 00:00:00 2001 From: npty Date: Tue, 19 Sep 2023 11:33:32 +0700 Subject: [PATCH 02/13] chore: update metadata --- apps/ntfy/config.json | 2 +- apps/ntfy/metadata/description.md | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json index 63c85cfa..f9e213d2 100644 --- a/apps/ntfy/config.json +++ b/apps/ntfy/config.json @@ -12,7 +12,7 @@ ], "description": "Send push notifications to any devices using a simple HTTP PUT or POST request.", "short_desc": "Ntfy, a simple server for sending and receiving notification messages.", - "author": "npty", + "author": "https://github.com/binwiederhier", "source": "https://github.com/binwiederhier/ntfy", "website": "https://ntfy.sh/" } diff --git a/apps/ntfy/metadata/description.md b/apps/ntfy/metadata/description.md index 330f14d3..35853ce2 100644 --- a/apps/ntfy/metadata/description.md +++ b/apps/ntfy/metadata/description.md @@ -1,10 +1,3 @@ -# Selfhosted notification service - -We wanted a simple server for sending and receiving messages (in real time per WebSocket). For this, not many open source projects existed and most of the existing ones were abandoned. Also, a requirement was that it can be self-hosted. We know there are many free and commercial push services out there. - -At the heart of this project. (gotify/server)[https://hub.docker.com/r/gotify/server] features a WebUI and functionality for: - -- sending messages via a REST-API -- subscribing/receiving messages via a web socket connection -- managing users, clients and applications +# Ntfy: HTTP-Based Notification Service +ntfy (pronounced as 'notify') is a straightforward pub-sub notification service that operates over HTTP. It facilitates the seamless transmission of notifications to your phone or desktop through scripts from any machine, completely free of charge and without the requirement of registration. Furthermore, its open-source nature (as evidenced here) allows you the option to host your own instance. From dde2efa11082478d196cbc975db03aa5d6bd4dbb Mon Sep 17 00:00:00 2001 From: npty Date: Wed, 20 Sep 2023 08:31:02 +0700 Subject: [PATCH 03/13] chore: change tipi_version to 1 --- apps/ntfy/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json index f9e213d2..728c8a01 100644 --- a/apps/ntfy/config.json +++ b/apps/ntfy/config.json @@ -5,7 +5,7 @@ "exposable": true, "port": 8166, "id": "ntfy", - "tipi_version": 5, + "tipi_version": 1, "version": "latest", "categories": [ "utilities" From dcbe3b3bc83f265f4a2240a9a5a07136bcaa8cf5 Mon Sep 17 00:00:00 2001 From: npty Date: Wed, 20 Sep 2023 08:31:40 +0700 Subject: [PATCH 04/13] chore: use specific version --- apps/ntfy/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json index 728c8a01..747192c4 100644 --- a/apps/ntfy/config.json +++ b/apps/ntfy/config.json @@ -6,7 +6,7 @@ "port": 8166, "id": "ntfy", "tipi_version": 1, - "version": "latest", + "version": "2.7.0", "categories": [ "utilities" ], From 45d65cf2344cdc514fc9bbc7e837a2a6a9458753 Mon Sep 17 00:00:00 2001 From: npty Date: Wed, 20 Sep 2023 08:34:08 +0700 Subject: [PATCH 05/13] chore: fix logo --- apps/ntfy/metadata/logo.jpg | Bin 19716 -> 20202 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/ntfy/metadata/logo.jpg b/apps/ntfy/metadata/logo.jpg index d9003a1959d28c7aea6d6c2fd726866c5ffe9d0f..f099f14aea4a12ddfe991038dadc0a86d2fbcb35 100644 GIT binary patch literal 20202 zcmeHvcT|&G({B_76#)?qN>xx0X(CO!g@7I@qSBjyQl&}nDk6ah96&&7G*Li$Z=t9V zklv;D-mCO-_mf~d@A>Zf?ppWHH?EbF^_*R2&;HHKZ{}gQeYYQW>@S&HGO&I7_QUMK zKiKX7OdsKBVhDrD%fl|hV6a25gZqxdNWias;2&%s9qb_CHw^aIKKh@(@9w*>*9NrQ zPxGriXbXM7$WU+Me|NiJH((_Dp%3&;0zL;w4?v$oq@)K)4<9;mSjg`>FSlQ19C?bEbe2|n3 zYO`-YHOT?+oA278Q^(ILspvhi4SwC!OmhOx!Y{0>YMq(IepyIH-{x6J#!12JvUgb# z2G4`i&)vKKFz_Ab3mB7uFc~!E-h|MY2M&^vkRAg6SArUPPC{~sj126T&;~4k@4#85 zgQV0a;P(O>kJDThylef8<(l5R^v?tQK^fFV`!4r$ z{Qv&=uLS-p0p`+Vvk0L&llFq*l7ta~Y5xPdG<*@|aa5G(oP^l6c^h@^9%k|G>B3jE zOcosHHm5x8v9aajS>mRPojmZ=R8_gIp3C`;Up|K~q#H(*yt;R3qb5pKbE-_kKhOP(X5-MSDXtLsNLIV839CE(6? zTAwb4l*zSS7t0Nl?=EFCp{jPS9$r%uZ@0C^c444Ddwiin$0G;TiZ#*o@gLn$le{N>G#z>8 z_IuM22i0;X>gMX}=*6j@tK!;QRq6GOg8E(9C2WfXVlX*v-YKp-K||j7)zW#H zH?fA$l2KbhIfws=I%#v-6RIaJdt& zjy%=mrUcj|;oQQtYZqdqZHF4hwun4sX7-|G<6|%jVkRNo zea!t+_;=g7Mn#eVO3p=t(OFfqmI3qW&E7ZAi-aK|xe=#fbQDlb+*$=9f;MhO?ED$y zraJ~Y-C%F>c-}v9MRY<&($L$qknzKt`#n7`6_ZXB(;KBw@&IYS_wWx!0W_LXON7t`Yxfq9MG0T$@Hxhf<&7Tk?mQv@_ zO9^$QQu@_Z^xV$du|K9bKb4Ac@FesFr%LRLoJhqeP7*qkXZ{*62h|IA00TmbLTuQUOO;x>W_92d+mS-qH_rQ5S=tG8ZdI(+wNn6u%

R=uOa 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 From 6e650c19e50fcb2dc25d38f8b69a87c743485e1b Mon Sep 17 00:00:00 2001 From: npty Date: Thu, 14 Sep 2023 14:36:43 +0700 Subject: [PATCH 06/13] chore: done --- apps/ntfy/config.json | 18 +++++++++++++ apps/ntfy/docker-compose.yml | 43 ++++++++++++++++++++++++++++++ apps/ntfy/metadata/description.md | 10 +++++++ apps/ntfy/metadata/logo.jpg | Bin 0 -> 19716 bytes 4 files changed, 71 insertions(+) create mode 100644 apps/ntfy/config.json create mode 100644 apps/ntfy/docker-compose.yml create mode 100644 apps/ntfy/metadata/description.md create mode 100644 apps/ntfy/metadata/logo.jpg diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json new file mode 100644 index 00000000..63c85cfa --- /dev/null +++ b/apps/ntfy/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "../schema.json", + "name": "Ntfy", + "available": true, + "exposable": true, + "port": 8166, + "id": "ntfy", + "tipi_version": 5, + "version": "latest", + "categories": [ + "utilities" + ], + "description": "Send push notifications to any devices using a simple HTTP PUT or POST request.", + "short_desc": "Ntfy, a simple server for sending and receiving notification messages.", + "author": "npty", + "source": "https://github.com/binwiederhier/ntfy", + "website": "https://ntfy.sh/" +} diff --git a/apps/ntfy/docker-compose.yml b/apps/ntfy/docker-compose.yml new file mode 100644 index 00000000..4f78ae7d --- /dev/null +++ b/apps/ntfy/docker-compose.yml @@ -0,0 +1,43 @@ +version: '3.7' + +services: + ntfy: + container_name: ntfy + image: binwiederhier/ntfy + environment: + - NTFY_BASE_URL=${APP_PROTOCOL}://${APP_DOMAIN} + - NTFY_UPSTREAM_BASE_URL=https://ntfy.sh + command: serve + volumes: + - "${APP_DATA_DIR}/data/cache:/var/cache/ntfy" + - "${APP_DATA_DIR}/data/config:/etc/ntfy" + ports: + - ${APP_PORT}:80 + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.ntfy-web-redirect.redirectscheme.scheme: https + traefik.http.services.ntfy.loadbalancer.passhostheader: true + traefik.http.services.ntfy.loadbalancer.server.port: 80 + # Web + traefik.http.routers.ntfy-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ntfy-insecure.entrypoints: web + traefik.http.routers.ntfy-insecure.service: ntfy + traefik.http.routers.ntfy-insecure.middlewares: ntfy-web-redirect + # Websecure + traefik.http.routers.ntfy.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.ntfy.entrypoints: websecure + traefik.http.routers.ntfy.service: ntfy + traefik.http.routers.ntfy.tls.certresolver: myresolver + # Local domain + traefik.http.routers.ntfy-local-insecure.rule: Host(`ntfy.${LOCAL_DOMAIN}`) + traefik.http.routers.ntfy-local-insecure.entrypoints: web + traefik.http.routers.ntfy-local-insecure.service: ntfy + traefik.http.routers.ntfy-local-insecure.middlewares: ntfy-web-redirect + # Local domain secure + traefik.http.routers.ntfy-local.rule: Host(`ntfy.${LOCAL_DOMAIN}`) + traefik.http.routers.ntfy-local.entrypoints: websecure + traefik.http.routers.ntfy-local.service: ntfy + traefik.http.routers.ntfy-local.tls: true diff --git a/apps/ntfy/metadata/description.md b/apps/ntfy/metadata/description.md new file mode 100644 index 00000000..330f14d3 --- /dev/null +++ b/apps/ntfy/metadata/description.md @@ -0,0 +1,10 @@ +# Selfhosted notification service + +We wanted a simple server for sending and receiving messages (in real time per WebSocket). For this, not many open source projects existed and most of the existing ones were abandoned. Also, a requirement was that it can be self-hosted. We know there are many free and commercial push services out there. + +At the heart of this project. (gotify/server)[https://hub.docker.com/r/gotify/server] features a WebUI and functionality for: + +- sending messages via a REST-API +- subscribing/receiving messages via a web socket connection +- managing users, clients and applications + diff --git a/apps/ntfy/metadata/logo.jpg b/apps/ntfy/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9003a1959d28c7aea6d6c2fd726866c5ffe9d0f GIT binary patch literal 19716 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 literal 0 HcmV?d00001 From 6bd243b6cbc663769e4e5a8d3be505e50ec7d666 Mon Sep 17 00:00:00 2001 From: npty Date: Tue, 19 Sep 2023 11:33:32 +0700 Subject: [PATCH 07/13] chore: update metadata --- apps/ntfy/config.json | 2 +- apps/ntfy/metadata/description.md | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json index 63c85cfa..f9e213d2 100644 --- a/apps/ntfy/config.json +++ b/apps/ntfy/config.json @@ -12,7 +12,7 @@ ], "description": "Send push notifications to any devices using a simple HTTP PUT or POST request.", "short_desc": "Ntfy, a simple server for sending and receiving notification messages.", - "author": "npty", + "author": "https://github.com/binwiederhier", "source": "https://github.com/binwiederhier/ntfy", "website": "https://ntfy.sh/" } diff --git a/apps/ntfy/metadata/description.md b/apps/ntfy/metadata/description.md index 330f14d3..35853ce2 100644 --- a/apps/ntfy/metadata/description.md +++ b/apps/ntfy/metadata/description.md @@ -1,10 +1,3 @@ -# Selfhosted notification service - -We wanted a simple server for sending and receiving messages (in real time per WebSocket). For this, not many open source projects existed and most of the existing ones were abandoned. Also, a requirement was that it can be self-hosted. We know there are many free and commercial push services out there. - -At the heart of this project. (gotify/server)[https://hub.docker.com/r/gotify/server] features a WebUI and functionality for: - -- sending messages via a REST-API -- subscribing/receiving messages via a web socket connection -- managing users, clients and applications +# Ntfy: HTTP-Based Notification Service +ntfy (pronounced as 'notify') is a straightforward pub-sub notification service that operates over HTTP. It facilitates the seamless transmission of notifications to your phone or desktop through scripts from any machine, completely free of charge and without the requirement of registration. Furthermore, its open-source nature (as evidenced here) allows you the option to host your own instance. From 50393669c656152edef63da5155057489fa4d614 Mon Sep 17 00:00:00 2001 From: npty Date: Wed, 20 Sep 2023 08:31:02 +0700 Subject: [PATCH 08/13] chore: change tipi_version to 1 --- apps/ntfy/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json index f9e213d2..728c8a01 100644 --- a/apps/ntfy/config.json +++ b/apps/ntfy/config.json @@ -5,7 +5,7 @@ "exposable": true, "port": 8166, "id": "ntfy", - "tipi_version": 5, + "tipi_version": 1, "version": "latest", "categories": [ "utilities" From 190e35435f6824b0644cabf444042d073ca1cfe5 Mon Sep 17 00:00:00 2001 From: npty Date: Wed, 20 Sep 2023 08:31:40 +0700 Subject: [PATCH 09/13] chore: use specific version --- apps/ntfy/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json index 728c8a01..747192c4 100644 --- a/apps/ntfy/config.json +++ b/apps/ntfy/config.json @@ -6,7 +6,7 @@ "port": 8166, "id": "ntfy", "tipi_version": 1, - "version": "latest", + "version": "2.7.0", "categories": [ "utilities" ], From 4829125a7fa29e84f17f29fb5ba649c188037cdf Mon Sep 17 00:00:00 2001 From: npty Date: Wed, 20 Sep 2023 08:34:08 +0700 Subject: [PATCH 10/13] chore: fix logo --- apps/ntfy/metadata/logo.jpg | Bin 19716 -> 20202 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/ntfy/metadata/logo.jpg b/apps/ntfy/metadata/logo.jpg index d9003a1959d28c7aea6d6c2fd726866c5ffe9d0f..f099f14aea4a12ddfe991038dadc0a86d2fbcb35 100644 GIT binary patch literal 20202 zcmeHvcT|&G({B_76#)?qN>xx0X(CO!g@7I@qSBjyQl&}nDk6ah96&&7G*Li$Z=t9V zklv;D-mCO-_mf~d@A>Zf?ppWHH?EbF^_*R2&;HHKZ{}gQeYYQW>@S&HGO&I7_QUMK zKiKX7OdsKBVhDrD%fl|hV6a25gZqxdNWias;2&%s9qb_CHw^aIKKh@(@9w*>*9NrQ zPxGriXbXM7$WU+Me|NiJH((_Dp%3&;0zL;w4?v$oq@)K)4<9;mSjg`>FSlQ19C?bEbe2|n3 zYO`-YHOT?+oA278Q^(ILspvhi4SwC!OmhOx!Y{0>YMq(IepyIH-{x6J#!12JvUgb# z2G4`i&)vKKFz_Ab3mB7uFc~!E-h|MY2M&^vkRAg6SArUPPC{~sj126T&;~4k@4#85 zgQV0a;P(O>kJDThylef8<(l5R^v?tQK^fFV`!4r$ z{Qv&=uLS-p0p`+Vvk0L&llFq*l7ta~Y5xPdG<*@|aa5G(oP^l6c^h@^9%k|G>B3jE zOcosHHm5x8v9aajS>mRPojmZ=R8_gIp3C`;Up|K~q#H(*yt;R3qb5pKbE-_kKhOP(X5-MSDXtLsNLIV839CE(6? zTAwb4l*zSS7t0Nl?=EFCp{jPS9$r%uZ@0C^c444Ddwiin$0G;TiZ#*o@gLn$le{N>G#z>8 z_IuM22i0;X>gMX}=*6j@tK!;QRq6GOg8E(9C2WfXVlX*v-YKp-K||j7)zW#H zH?fA$l2KbhIfws=I%#v-6RIaJdt& zjy%=mrUcj|;oQQtYZqdqZHF4hwun4sX7-|G<6|%jVkRNo zea!t+_;=g7Mn#eVO3p=t(OFfqmI3qW&E7ZAi-aK|xe=#fbQDlb+*$=9f;MhO?ED$y zraJ~Y-C%F>c-}v9MRY<&($L$qknzKt`#n7`6_ZXB(;KBw@&IYS_wWx!0W_LXON7t`Yxfq9MG0T$@Hxhf<&7Tk?mQv@_ zO9^$QQu@_Z^xV$du|K9bKb4Ac@FesFr%LRLoJhqeP7*qkXZ{*62h|IA00TmbLTuQUOO;x>W_92d+mS-qH_rQ5S=tG8ZdI(+wNn6u%

R=uOa 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 From fa4ff09fe1e3dc41abe5f39317be3a5578e0d8c8 Mon Sep 17 00:00:00 2001 From: npty Date: Fri, 22 Sep 2023 19:04:14 +0700 Subject: [PATCH 11/13] chore: add ntfy in the root readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index db5527d9..f1a68190 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Nitter](https://github.com/zedeus/nitter) - Alternative Twitter front-end - [NocoDB](https://github.com/nocodb/nocodb) - Open Source Airtable Alternative - [Node-RED](https://github.com/node-red/node-red) - Low-code programming for event-driven applications +- [Ntfy](https://github.com/binwiederhier/ntfy) - A Straightforward Notification service that operates over HTTP - [Obsidian LiveSync](https://github.com/vrtmrz/self-hosted-livesync-server) - LiveSync couchdb backend for Obsidian - [OneDev](https://code.onedev.io/onedev/server) - Self-hosted Git Server with Kanban and CI/CD - [Openbooks](https://github.com/evan-buss/openbooks) - Search and Download eBooks From 9077bae3e3bd4d324e69c0b9fe8883424d823e0a Mon Sep 17 00:00:00 2001 From: npty Date: Tue, 26 Sep 2023 09:07:04 +0700 Subject: [PATCH 12/13] chore: use image tag version --- apps/ntfy/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ntfy/docker-compose.yml b/apps/ntfy/docker-compose.yml index 4f78ae7d..3013bd07 100644 --- a/apps/ntfy/docker-compose.yml +++ b/apps/ntfy/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.7' services: ntfy: container_name: ntfy - image: binwiederhier/ntfy + image: binwiederhier/ntfy:v2.7.0 environment: - NTFY_BASE_URL=${APP_PROTOCOL}://${APP_DOMAIN} - NTFY_UPSTREAM_BASE_URL=https://ntfy.sh From a6eba4706d5c607dc0e4104db259fd34a5aa14fa Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Wed, 27 Sep 2023 21:37:38 +0200 Subject: [PATCH 13/13] chore(ntfy): fix config and logo --- apps/ntfy/config.json | 7 +++---- apps/ntfy/docker-compose.yml | 6 +++--- apps/ntfy/metadata/logo.jpg | Bin 20202 -> 8939 bytes 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/apps/ntfy/config.json b/apps/ntfy/config.json index 747192c4..5d038ee8 100644 --- a/apps/ntfy/config.json +++ b/apps/ntfy/config.json @@ -7,12 +7,11 @@ "id": "ntfy", "tipi_version": 1, "version": "2.7.0", - "categories": [ - "utilities" - ], + "categories": ["utilities"], "description": "Send push notifications to any devices using a simple HTTP PUT or POST request.", "short_desc": "Ntfy, a simple server for sending and receiving notification messages.", "author": "https://github.com/binwiederhier", "source": "https://github.com/binwiederhier/ntfy", - "website": "https://ntfy.sh/" + "website": "https://ntfy.sh/", + "form_fields": [] } diff --git a/apps/ntfy/docker-compose.yml b/apps/ntfy/docker-compose.yml index 3013bd07..28345654 100644 --- a/apps/ntfy/docker-compose.yml +++ b/apps/ntfy/docker-compose.yml @@ -5,12 +5,12 @@ services: container_name: ntfy image: binwiederhier/ntfy:v2.7.0 environment: - - NTFY_BASE_URL=${APP_PROTOCOL}://${APP_DOMAIN} + - NTFY_BASE_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} - NTFY_UPSTREAM_BASE_URL=https://ntfy.sh command: serve volumes: - - "${APP_DATA_DIR}/data/cache:/var/cache/ntfy" - - "${APP_DATA_DIR}/data/config:/etc/ntfy" + - '${APP_DATA_DIR}/data/cache:/var/cache/ntfy' + - '${APP_DATA_DIR}/data/config:/etc/ntfy' ports: - ${APP_PORT}:80 networks: diff --git a/apps/ntfy/metadata/logo.jpg b/apps/ntfy/metadata/logo.jpg index f099f14aea4a12ddfe991038dadc0a86d2fbcb35..ea7b4917659f83cdb11bf0c2938bcaa484f35f24 100644 GIT binary patch literal 8939 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 literal 20202 zcmeHvcT|&G({B_76#)?qN>xx0X(CO!g@7I@qSBjyQl&}nDk6ah96&&7G*Li$Z=t9V zklv;D-mCO-_mf~d@A>Zf?ppWHH?EbF^_*R2&;HHKZ{}gQeYYQW>@S&HGO&I7_QUMK zKiKX7OdsKBVhDrD%fl|hV6a25gZqxdNWias;2&%s9qb_CHw^aIKKh@(@9w*>*9NrQ zPxGriXbXM7$WU+Me|NiJH((_Dp%3&;0zL;w4?v$oq@)K)4<9;mSjg`>FSlQ19C?bEbe2|n3 zYO`-YHOT?+oA278Q^(ILspvhi4SwC!OmhOx!Y{0>YMq(IepyIH-{x6J#!12JvUgb# z2G4`i&)vKKFz_Ab3mB7uFc~!E-h|MY2M&^vkRAg6SArUPPC{~sj126T&;~4k@4#85 zgQV0a;P(O>kJDThylef8<(l5R^v?tQK^fFV`!4r$ z{Qv&=uLS-p0p`+Vvk0L&llFq*l7ta~Y5xPdG<*@|aa5G(oP^l6c^h@^9%k|G>B3jE zOcosHHm5x8v9aajS>mRPojmZ=R8_gIp3C`;Up|K~q#H(*yt;R3qb5pKbE-_kKhOP(X5-MSDXtLsNLIV839CE(6? zTAwb4l*zSS7t0Nl?=EFCp{jPS9$r%uZ@0C^c444Ddwiin$0G;TiZ#*o@gLn$le{N>G#z>8 z_IuM22i0;X>gMX}=*6j@tK!;QRq6GOg8E(9C2WfXVlX*v-YKp-K||j7)zW#H zH?fA$l2KbhIfws=I%#v-6RIaJdt& zjy%=mrUcj|;oQQtYZqdqZHF4hwun4sX7-|G<6|%jVkRNo zea!t+_;=g7Mn#eVO3p=t(OFfqmI3qW&E7ZAi-aK|xe=#fbQDlb+*$=9f;MhO?ED$y zraJ~Y-C%F>c-}v9MRY<&($L$qknzKt`#n7`6_ZXB(;KBw@&IYS_wWx!0W_LXON7t`Yxfq9MG0T$@Hxhf<&7Tk?mQv@_ zO9^$QQu@_Z^xV$du|K9bKb4Ac@FesFr%LRLoJhqeP7*qkXZ{*62h|IA00TmbLTuQUOO;x>W_92d+mS-qH_rQ5S=tG8ZdI(+wNn6u%

R=uOa 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