|
4 | 4 |
|
5 | 5 | # iGotify |
6 | 6 |
|
7 | | -A small Gotify server notification assistent that decrypt the message and trigger a Push Notifications to iOS Devices via Apple's APNs with my service SecNtfy |
| 7 | +A notification assistant that bridges [Gotify](https://gotify.net/) with iOS devices via Apple's APNs using the SecNtfy service. |
8 | 8 |
|
9 | | -Download Link to iGotify down below |
| 9 | +> **Important:** This project is **not** Gotify itself. iGotify is a companion service that enables push notifications for iOS devices. The notification payload is only forwarded through SecNtfy to Apple's APNs - **no message content is stored** on any intermediate server. |
10 | 10 |
|
11 | | - |
| 11 | +## Features |
12 | 12 |
|
13 | | -## ⭐ Features |
| 13 | +- End-to-end encrypted push notifications |
| 14 | +- Seamless Gotify integration |
| 15 | +- Native iOS app with FaceID support |
| 16 | +- Multi-user & multi-instance support |
14 | 17 |
|
15 | | -* show received notifications with markdown |
16 | | -* decrypted the message with a public key that is generated from the iGotify device |
17 | | -* sending the decrypted message to SecNtfy and forwarded it to Apple's APN service, without saving the payload |
18 | | -* multiuser support |
| 18 | +## Installation |
19 | 19 |
|
20 | | - |
| 20 | +There are two ways to deploy iGotify: |
21 | 21 |
|
22 | | -## 🔧 How to Install Gotify & iGotify-Notification-Assist |
| 22 | +### Option 1: Docker (Recommended) |
23 | 23 |
|
24 | | -### 🐳 Docker `docker-compose.yaml` |
| 24 | +The Docker stack includes both Gotify and iGotify. |
25 | 25 |
|
26 | | -### Installation |
27 | | - |
28 | | -1. Create a file with the name `docker-compose.yaml` or clone this repo and go to step 3 |
29 | | -2. Please use the latest and recommended version of docker and docker compose |
30 | | -3. Copy the code down below in the yaml file |
31 | | -4. change environment variables in the compose file |
32 | | -5. execute `docker compose up -d` to start the docker compose |
33 | | - |
34 | | - |
35 | | - |
36 | | -### Needed environment variables |
37 | | - |
38 | | -* `GOTIFY_DEFAULTUSER_PASS` = the user password for the defaultuser |
39 | | - |
40 | | -### Optional environment variables |
41 | | - |
42 | | -* `GOTIFY_URLS` = the local gotify sever URL e.g.: `http://gotify` |
43 | | -* `GOTIFY_CLIENT_TOKENS` = the client token from the Gotify Client e.g.: `cXXXXXXXX` |
44 | | -* `SECNTFY_TOKENS` = the SecNtfy Token that you get from the app after configure it e.g.: `NTFY-DEVICE-XXXXXX` |
45 | | - |
46 | | -*These three environment variables above aren't required when the Gotify & iGotify Instances available over a domain!* |
47 | | - |
48 | | -* `ENABLE_CONSOLE_LOG` = you can disable unnecessary console logs (default: true) |
49 | | -* `ENABLE_SCALAR_UI` = you can now disable the Endpoint page (default: true) |
50 | | - |
51 | | -*please write the boolean variables (true, false) in single quotes 'true'* |
52 | | - |
53 | | -#### All these configuration can be found after configure the app. It will display it for you |
54 | | - |
55 | | -#### Please note you can configure multiple instances of local gotify server by adding a semicolon `;` after each environment value e.g.: |
56 | | - |
57 | | -* `GOTIFY_URLS: 'http://gotify;http://gotify2;http://gotify3;...'` |
58 | | -* `GOTIFY_CLIENT_TOKENS: 'cXXXXXXXX1;cXXXXXXXX2;cXXXXXXXX3;...'` |
59 | | -* `SECNTFY_TOKENS: 'NTFY-DEVICE-XXXXXX1;NTFY-DEVICE-XXXXXX2;NTFY-DEVICE-XXXXXX3;...'` |
60 | | - |
61 | | - |
62 | | - |
63 | | -### Docker Compose Konfigurationen |
64 | | - |
65 | | -<details> |
66 | | -<summary><b>📦 Standard Docker Compose</b></summary> |
67 | | - |
68 | | -```yaml |
69 | | -services: |
70 | | - gotify: |
71 | | - container_name: gotify |
72 | | - hostname: gotify |
73 | | - image: gotify/server # Uncommand correct server image |
74 | | - # image: gotify/server-arm7 |
75 | | - # image: gotify/server-arm64 |
76 | | - restart: unless-stopped |
77 | | - security_opt: |
78 | | - - no-new-privileges:true |
79 | | - networks: |
80 | | - - net |
81 | | - ports: |
82 | | - - "8680:80" |
83 | | - volumes: |
84 | | - - data:/app/data |
85 | | - environment: |
86 | | - GOTIFY_DEFAULTUSER_PASS: 'my-very-strong-password' # Change me!!!!! |
87 | | - healthcheck: |
88 | | - test: ["CMD-SHELL", "ls /app/data || exit 1"] |
89 | | - interval: 5s |
90 | | - timeout: 3s |
91 | | - retries: 5 |
92 | | - start_period: 10s |
93 | | - |
94 | | - igotify: |
95 | | - container_name: igotify |
96 | | - hostname: igotify |
97 | | - image: ghcr.io/androidseb25/igotify-notification-assist:latest |
98 | | - restart: unless-stopped |
99 | | - security_opt: |
100 | | - - no-new-privileges:true |
101 | | - pull_policy: always |
102 | | - depends_on: |
103 | | - gotify: |
104 | | - condition: service_healthy |
105 | | - healthcheck: |
106 | | - test: [ "CMD", "curl", "-f", "http://localhost:8080/Version" ] |
107 | | - interval: "3s" |
108 | | - timeout: "3s" |
109 | | - retries: 5 |
110 | | - networks: |
111 | | - - net |
112 | | - ports: |
113 | | - - "8681:8080" |
114 | | - volumes: |
115 | | - - api-data:/app/data |
116 | | - #environment: # option environment see above note |
117 | | - # GOTIFY_URLS: '' |
118 | | - # GOTIFY_CLIENT_TOKENS: '' |
119 | | - # SECNTFY_TOKENS: '' |
120 | | - # ENABLE_CONSOLE_LOG: 'true' |
121 | | - # ENABLE_SCALAR_UI: 'true' |
122 | | - |
123 | | -networks: |
124 | | - net: |
125 | | - |
126 | | -volumes: |
127 | | - data: |
128 | | - api-data: |
129 | | -``` |
130 | | -
|
131 | | -*Thank you The_Think3r for the compose file and @herrpandora* |
132 | | -
|
133 | | -</details> |
134 | | -
|
135 | | -<details> |
136 | | -<summary><b>🔀 Traefik Config</b></summary> |
137 | | -
|
138 | | -```yaml |
139 | | -services: |
140 | | - gotify: |
141 | | - container_name: gotify |
142 | | - hostname: gotify |
143 | | - image: gotify/server # Uncommand correct server image |
144 | | - # image: gotify/server-arm7 |
145 | | - # image: gotify/server-arm64 |
146 | | - restart: unless-stopped |
147 | | - security_opt: |
148 | | - - no-new-privileges:true |
149 | | - networks: |
150 | | - - net |
151 | | - ports: |
152 | | - - "8680:80" |
153 | | - volumes: |
154 | | - - data:/app/data |
155 | | - environment: |
156 | | - GOTIFY_DEFAULTUSER_PASS: 'my-very-strong-password' # Change me!!!!! |
157 | | - GOTIFY_REGISTRATION: 'false' |
158 | | - labels: |
159 | | - traefik.docker.network: proxy |
160 | | - traefik.enable: "true" |
161 | | - traefik.http.routers.gotify-secure.entrypoints: websecure |
162 | | - traefik.http.routers.gotify-secure.middlewares: default@file |
163 | | - traefik.http.routers.gotify-secure.rule: Host(`gotify.domain-name.de`) |
164 | | - traefik.http.routers.gotify-secure.service: gotify |
165 | | - traefik.http.routers.gotify-secure.tls: "true" |
166 | | - traefik.http.routers.gotify-secure.tls.certresolver: http_resolver |
167 | | - traefik.http.routers.gotify.entrypoints: web |
168 | | - traefik.http.routers.gotify.rule: Host(`gotify.domain-name.de`) |
169 | | - traefik.http.services.gotify.loadbalancer.server.port: "80" |
170 | | - healthcheck: |
171 | | - test: ["CMD-SHELL", "ls /app/data || exit 1"] |
172 | | - interval: 5s |
173 | | - timeout: 3s |
174 | | - retries: 5 |
175 | | - start_period: 10s |
176 | | - networks: |
177 | | - default: null |
178 | | - proxy: null |
| 26 | +```bash |
| 27 | +# Clone the repository |
| 28 | +git clone https://github.com/androidseb25/iGotify-Notification-Assistent.git |
| 29 | +cd iGotify-Notification-Assistent |
179 | 30 |
|
180 | | - igotify: |
181 | | - container_name: igotify |
182 | | - hostname: igotify |
183 | | - image: ghcr.io/androidseb25/igotify-notification-assist:latest |
184 | | - restart: unless-stopped |
185 | | - security_opt: |
186 | | - - no-new-privileges:true |
187 | | - pull_policy: always |
188 | | - depends_on: |
189 | | - gotify: |
190 | | - condition: service_healthy |
191 | | - healthcheck: |
192 | | - test: [ "CMD", "curl", "-f", "http://localhost:8080/Version" ] |
193 | | - interval: "3s" |
194 | | - timeout: "3s" |
195 | | - retries: 5 |
196 | | - networks: |
197 | | - - net |
198 | | - ports: |
199 | | - - "8681:8080" |
200 | | - volumes: |
201 | | - - api-data:/app/data |
202 | | - #environment: # option environment see above note |
203 | | - # GOTIFY_URLS: '' |
204 | | - # GOTIFY_CLIENT_TOKENS: '' |
205 | | - # SECNTFY_TOKENS: '' |
206 | | - labels: |
207 | | - traefik.docker.network: proxy |
208 | | - traefik.enable: "true" |
209 | | - traefik.http.routers.igotify-secure.entrypoints: websecure |
210 | | - traefik.http.routers.igotify-secure.middlewares: default@file |
211 | | - traefik.http.routers.igotify-secure.rule: Host(`igotify.domain-name.de`) |
212 | | - traefik.http.routers.igotify-secure.service: igotify |
213 | | - traefik.http.routers.igotify-secure.tls: "true" |
214 | | - traefik.http.routers.igotify-secure.tls.certresolver: http_resolver |
215 | | - traefik.http.routers.igotify.entrypoints: web |
216 | | - traefik.http.routers.igotify.rule: Host(`igotify.domain-name.de`) |
217 | | - traefik.http.services.igotify.loadbalancer.server.port: "8080" |
218 | | - networks: |
219 | | - default: null |
220 | | - proxy: null |
| 31 | +# Configure environment |
| 32 | +cp .env.example .env |
| 33 | +# Edit .env and set GOTIFY_DEFAULTUSER_PASS |
221 | 34 |
|
222 | | -networks: |
223 | | - default: |
224 | | - proxy: |
225 | | - external: true |
226 | | -volumes: |
227 | | - data: |
228 | | - api-data: |
| 35 | +# Start the stack |
| 36 | +docker compose up -d |
229 | 37 | ``` |
230 | 38 |
|
231 | | -*Thank you to @majo1989 for sharing this config* |
232 | | -
|
233 | | -</details> |
234 | | -
|
235 | | - |
236 | | -
|
237 | | -### (Optional) NGINX Proxy Manager |
238 | | -
|
239 | | -When someone have problem's with incoming notifications on the app, please try this options under Advance Settings for the setuped proxies |
| 39 | +### Option 2: Linux Service |
240 | 40 |
|
241 | 41 | ```bash |
242 | | -proxy_set_header Host $http_host; |
243 | | -proxy_connect_timeout 1m; |
244 | | -proxy_send_timeout 1m; |
245 | | -proxy_read_timeout 1m; |
| 42 | +curl -sSL https://raw.githubusercontent.com/androidseb25/iGotify-Notification-Assistent/main/install.sh | bash |
246 | 43 | ``` |
247 | 44 |
|
248 | | -Also **don't** check the boxes which say "HTTP/2 Support" and "HSTS enabled". |
249 | | - |
250 | | -*Thank you to @TBT-TBT for sharing this notice* |
251 | | - |
252 | | - |
253 | | - |
254 | | -## 🔧 Install iGotify app |
255 | | - |
256 | | -Download from [AppStore](https://apps.apple.com/de/app/igotify/id6473452512?itsct=apps_box_badge&itscg=30200) |
| 45 | +### Default Ports |
257 | 46 |
|
258 | | -[](https://apps.apple.com/de/app/igotify/id6473452512?itsct=apps_box_badge&itscg=30200) |
| 47 | +| Service | Port | |
| 48 | +|---------|------| |
| 49 | +| Gotify | 8680 | |
| 50 | +| iGotify | 8681 | |
259 | 51 |
|
260 | | -For Bugs or feedback please send me a PM in Discord under the name sebakaderangler or fill out the issue formular here on GitHub. |
| 52 | +## Documentation |
261 | 53 |
|
262 | | -On the login screen you need to enter the Gotify Server URL and the URL from the Notification Assist, if you use the URL with a port please enter it, too! (Image 1) |
| 54 | +For detailed documentation, visit the **[Wiki](https://github.com/androidseb25/iGotify-Notification-Assistent/wiki)**: |
263 | 55 |
|
264 | | -After the checks for the URL are finished and correct you need to login with your login credentials. (Image 2) |
| 56 | +- [How it works](https://github.com/androidseb25/iGotify-Notification-Assistent/wiki#how-it-works) - Architecture and token explanation |
| 57 | +- [Docker Installation](https://github.com/androidseb25/iGotify-Notification-Assistent/wiki#docker) - Full Docker setup with environment variables |
| 58 | +- [Linux Service](https://github.com/androidseb25/iGotify-Notification-Assistent/wiki#linux-service) - Native installation guide |
| 59 | +- [Reverse Proxy](https://github.com/androidseb25/iGotify-Notification-Assistent/wiki#reverse-proxy) - NGINX Proxy Manager configuration |
| 60 | +- [Roadmap](https://github.com/androidseb25/iGotify-Notification-Assistent/wiki#roadmap) - Planned features |
265 | 61 |
|
266 | | - |
| 62 | +## iOS App |
267 | 63 |
|
268 | | - |
269 | | - |
| 64 | +[](https://apps.apple.com/app/igotify/id6473452512) |
270 | 65 |
|
271 | | - |
272 | | - |
273 | | -And if everythink is ok, you're logged in 🎉 |
| 66 | +## Bugs & Feedback |
274 | 67 |
|
275 | | -Now you receive background notifications when Gotify receives a message. |
| 68 | +For bugs or feedback please send me a PM in Discord under the name [**sebakaderangler**](https://discord.com/users/432049343802114048) or fill out the [issue form](https://github.com/androidseb25/iGotify-Notification-Assistent/issues) here on GitHub. |
276 | 69 |
|
277 | | -## Translation |
278 | | - |
279 | | -If you want to be a part of the translation team please create a issue: |
280 | | - |
281 | | -**Title: Translation: *language*** |
| 70 | +## SecNtfy Status |
282 | 71 |
|
283 | | -**Description: crowdin username and why you would be a part of the translation team** |
| 72 | +[Service Status](https://ipv64.net/status/secntfy) |
284 | 73 |
|
285 | | -maybe you've been invited soon |
| 74 | +## Contributing |
286 | 75 |
|
287 | | -The link to the crowdin project: [https://de.crowdin.com/project/igotify](https://de.crowdin.com/project/igotify) |
| 76 | +See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. |
288 | 77 |
|
289 | | -## SecNtfy Status |
| 78 | +## License |
290 | 79 |
|
291 | | -Here you can find the online status of the service [Status](https://ipv64.net/status/secntfy) |
| 80 | +[MIT License](LICENSE) |
0 commit comments