feat: add Gotify notification server with iGotify iOS support

Add comprehensive push notification infrastructure with:
- Gotify server for push notifications with admin password configuration
- iGotify Assistant service for iOS notification relay via Apple Push Notifications
- Dual subdomain setup (gotify.* and gotify-assistant.*)
- Proper service dependencies and container communication via hairpinning
- Caddy reverse proxy configuration for both services
- DNS A records for both subdomains
- Added to monitoring services category
- Tested with successful notification delivery

Services accessible at:
- https://gotify.thesatelliteoflove.com (main server)
- https://gotify-assistant.thesatelliteoflove.com (iOS assistant)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-06-19 12:46:51 -06:00
parent a338186a77
commit ff89683038
7 changed files with 83 additions and 2 deletions

View File

@ -45,6 +45,10 @@
ip: "152.53.36.98" ip: "152.53.36.98"
- name: bookmarks - name: bookmarks
ip: "152.53.36.98" ip: "152.53.36.98"
- name: gotify
ip: "152.53.36.98"
- name: gotify-assistant
ip: "152.53.36.98"
- name: nerder.land - name: nerder.land
dns_records: dns_records:
- name: "forms" - name: "forms"

View File

@ -29,6 +29,8 @@ subdomains:
appriseapi: "appriseapi.{{ primary_domain }}" appriseapi: "appriseapi.{{ primary_domain }}"
dockge: "dockge.{{ primary_domain }}" dockge: "dockge.{{ primary_domain }}"
code: "code.{{ primary_domain }}" # Code Server code: "code.{{ primary_domain }}" # Code Server
gotify: "gotify.{{ primary_domain }}" # Gotify notifications
gotify_assistant: "gotify-assistant.{{ primary_domain }}" # iGotify iOS assistant
# Email domains for notifications # Email domains for notifications
email_domains: email_domains:

View File

@ -7,7 +7,7 @@ service_categories:
media: ["audiobookshelf", "calibre", "ghost", "pinchflat", "pinry", "hoarder", "manyfold"] media: ["audiobookshelf", "calibre", "ghost", "pinchflat", "pinry", "hoarder", "manyfold"]
productivity: ["paperlessngx", "baikal", "syncthing", "mmdl", "heyform", "dawarich", "pingvin"] productivity: ["paperlessngx", "baikal", "syncthing", "mmdl", "heyform", "dawarich", "pingvin"]
communication: ["gotosocial", "postiz"] communication: ["gotosocial", "postiz"]
monitoring: ["glance", "changedetection", "appriseapi"] monitoring: ["glance", "changedetection", "appriseapi", "gotify"]
# Common service configuration # Common service configuration
services: services:

View File

@ -83,6 +83,14 @@ home.thesatelliteoflove.com {
reverse_proxy authentik-server-1:9000 reverse_proxy authentik-server-1:9000
} }
gotify.thesatelliteoflove.com {
reverse_proxy gotify-gotify-1:80
}
gotify-assistant.thesatelliteoflove.com {
reverse_proxy gotify-igotify-assistant-1:8080
}
repair.nerder.land { repair.nerder.land {
root * /srv/repair root * /srv/repair

View File

@ -0,0 +1,19 @@
- name: Create gotify directories
ansible.builtin.file:
path: "{{ item }}"
state: directory
loop:
- /opt/stacks/gotify
- name: Template out the gotify compose file
ansible.builtin.template:
src: gotify-compose.yml.j2
dest: /opt/stacks/gotify/compose.yml
owner: root
mode: 644
- name: Deploy gotify stack
community.docker.docker_compose_v2:
project_src: /opt/stacks/gotify
files:
- compose.yml

View File

@ -12,3 +12,7 @@
- name: Install appriseapi - name: Install appriseapi
import_tasks: appriseapi.yml import_tasks: appriseapi.yml
tags: appriseapi tags: appriseapi
- name: Install gotify
import_tasks: gotify.yml
tags: gotify

View File

@ -0,0 +1,44 @@
services:
gotify:
image: gotify/server:latest
restart: unless-stopped
volumes:
- gotify_data:/app/data
environment:
- GOTIFY_DEFAULTUSER_PASS={{ vault_gotify.admin_password }}
- TZ=America/Denver
labels:
glance.name: Gotify
glance.icon: si:gotify
glance.url: "https://{{ subdomains.gotify }}/"
glance.description: Push notification server
extra_hosts:
- "{{ subdomains.auth }}:{{ docker.hairpin_ip }}"
- "{{ subdomains.gotify_assistant }}:{{ docker.hairpin_ip }}"
igotify-assistant:
image: ghcr.io/androidseb25/igotify-notification-assist:latest
restart: unless-stopped
volumes:
- igotify_data:/app/data
environment:
- TZ=America/Denver
depends_on:
- gotify
labels:
glance.name: iGotify Assistant
glance.icon: si:apple
glance.url: "https://{{ subdomains.gotify_assistant }}/"
glance.description: iOS notification assistant
extra_hosts:
- "{{ subdomains.auth }}:{{ docker.hairpin_ip }}"
- "{{ subdomains.gotify }}:{{ docker.hairpin_ip }}"
volumes:
gotify_data:
igotify_data:
networks:
default:
external: true
name: "{{ docker.network_name }}"