Add ntfy push notifications + mailrise SMTP bridge
- ntfy: self-hosted push notification service (port 8086) - mailrise: SMTP-to-ntfy converter (port 8025) - Configs in ./ntfy/server.yml and ./ntfy/mailrise.yml - Token-based authentication for ntfy - Updated docs and .gitignore
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -15,6 +15,8 @@
|
|||||||
!AGENTS.md
|
!AGENTS.md
|
||||||
!discord-agent/
|
!discord-agent/
|
||||||
!discord-agent/**
|
!discord-agent/**
|
||||||
|
!ntfy/
|
||||||
|
!ntfy/**
|
||||||
|
|
||||||
# Never track actual secrets
|
# Never track actual secrets
|
||||||
.env
|
.env
|
||||||
|
|||||||
11
AGENTS.md
11
AGENTS.md
@@ -13,7 +13,7 @@ The infrastructure is split into 5 independent compose files sharing a common `.
|
|||||||
| **Media** | `docker-compose.media.yml` | Media: arr stack, jellyfin, qbittorrent, slskd, metube, maloja, scrobbler |
|
| **Media** | `docker-compose.media.yml` | Media: arr stack, jellyfin, qbittorrent, slskd, metube, maloja, scrobbler |
|
||||||
| **Documents** | `docker-compose.documents.yml` | Paperless-ngx + AI, onlyoffice, stirling-pdf, open-webui |
|
| **Documents** | `docker-compose.documents.yml` | Paperless-ngx + AI, onlyoffice, stirling-pdf, open-webui |
|
||||||
| **Photo & ROM Library** | `docker-compose.photo-roms.yml` | Immich, syncthing, retrom |
|
| **Photo & ROM Library** | `docker-compose.photo-roms.yml` | Immich, syncthing, retrom |
|
||||||
| **Utilities** | `docker-compose.utils.yml` | Gitea, tandoor, speedtest-tracker, rustdesk, redbot, linkwarden, neolink, iperf3 |
|
| **Utilities** | `docker-compose.utils.yml` | Gitea, tandoor, speedtest-tracker, rustdesk, redbot, linkwarden, neolink, iperf3, ntfy, mailrise |
|
||||||
|
|
||||||
## Core Infrastructure Agents (infra.yml)
|
## Core Infrastructure Agents (infra.yml)
|
||||||
|
|
||||||
@@ -115,6 +115,14 @@ The infrastructure is split into 5 independent compose files sharing a common `.
|
|||||||
### Discord Bots
|
### Discord Bots
|
||||||
- **RedBot** - Discord bot with custom cogs (internal_net)
|
- **RedBot** - Discord bot with custom cogs (internal_net)
|
||||||
|
|
||||||
|
### Notifications
|
||||||
|
- **Ntfy** - Push notification service (port 8086)
|
||||||
|
- Token-based authentication
|
||||||
|
- Subscribable topics: alerts, backups, paperless
|
||||||
|
- **Mailrise** - SMTP-to-ntfy bridge (port 8025)
|
||||||
|
- Converts email alerts into push notifications
|
||||||
|
- Works with any service that supports SMTP notifications
|
||||||
|
|
||||||
### Network Tools
|
### Network Tools
|
||||||
- **iperf3-server** - Network performance testing (port 5201)
|
- **iperf3-server** - Network performance testing (port 5201)
|
||||||
|
|
||||||
@@ -173,6 +181,7 @@ Networks are defined in `docker-compose.infra.yml` and referenced as `external:
|
|||||||
├── rustdesk/ (Remote desktop)
|
├── rustdesk/ (Remote desktop)
|
||||||
├── redbot/ (Discord bot)
|
├── redbot/ (Discord bot)
|
||||||
├── stirling/ (PDF tools)
|
├── stirling/ (PDF tools)
|
||||||
|
├── ntfy/ (Notification configs)
|
||||||
└── Various other service configs
|
└── Various other service configs
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ The deployment is split into **5 independent compose stacks** sharing a common `
|
|||||||
| **Media** | `docker-compose.media.yml` | prowlarr, flaresolverr, qbittorrent, radarr, sonarr, lidarr, bazarr, seerr, jellyfin, slskd, metube, maloja, multi-scrobbler |
|
| **Media** | `docker-compose.media.yml` | prowlarr, flaresolverr, qbittorrent, radarr, sonarr, lidarr, bazarr, seerr, jellyfin, slskd, metube, maloja, multi-scrobbler |
|
||||||
| **Documents** | `docker-compose.documents.yml` | onlyoffice, paperless-ngx (db, broker, tika, gotenberg, webserver, ai), stirling-pdf, open-webui |
|
| **Documents** | `docker-compose.documents.yml` | onlyoffice, paperless-ngx (db, broker, tika, gotenberg, webserver, ai), stirling-pdf, open-webui |
|
||||||
| **Photo & ROM Library** | `docker-compose.photo-roms.yml` | immich (server, postgres, ml, redis), syncthing, retrom (db, adminer, service, jaeger) |
|
| **Photo & ROM Library** | `docker-compose.photo-roms.yml` | immich (server, postgres, ml, redis), syncthing, retrom (db, adminer, service, jaeger) |
|
||||||
| **Utilities** | `docker-compose.utils.yml` | gitea (server + db), tandoor (db + web), speedtest-tracker (app + db), rustdesk (hbbs + hbbr), redbot, iperf3-server, neolink, linkwarden (app + db + meilisearch) |
|
| **Utilities** | `docker-compose.utils.yml` | gitea (server + db), tandoor (db + web), speedtest-tracker (app + db), rustdesk (hbbs + hbbr), redbot, iperf3-server, neolink, linkwarden (app + db + meilisearch), ntfy, mailrise |
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
@@ -58,6 +58,8 @@ The deployment is split into **5 independent compose stacks** sharing a common `
|
|||||||
| Utilities | iperf3-server | Network performance test | 5201 |
|
| Utilities | iperf3-server | Network performance test | 5201 |
|
||||||
| Utilities | Neolink | Reolink camera bridge | 8554 |
|
| Utilities | Neolink | Reolink camera bridge | 8554 |
|
||||||
| Utilities | Linkwarden | Bookmark manager | 3400 |
|
| Utilities | Linkwarden | Bookmark manager | 3400 |
|
||||||
|
| Utilities | Ntfy | Push notification service | 8086 |
|
||||||
|
| Utilities | Mailrise | SMTP-to-ntfy notification bridge | 8025 |
|
||||||
|
|
||||||
### Network Segmentation
|
### Network Segmentation
|
||||||
|
|
||||||
@@ -100,6 +102,7 @@ Networks are created by `infra.yml` and referenced as external by all other stac
|
|||||||
├── surmai/
|
├── surmai/
|
||||||
├── syncthing/
|
├── syncthing/
|
||||||
├── tandoor/
|
├── tandoor/
|
||||||
|
├── ntfy/ (notification configs)
|
||||||
├── wud/
|
├── wud/
|
||||||
└── .env (shared environment variables)
|
└── .env (shared environment variables)
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ mkdir -p /docker/{immich,qBittorrent,paperless,stirling,syncthing,gitea}
|
|||||||
mkdir -p /docker/{speedtest-tracker,rustdesk,redbot,maloja,scrobble}
|
mkdir -p /docker/{speedtest-tracker,rustdesk,redbot,maloja,scrobble}
|
||||||
mkdir -p /docker/{retrom/config,retrom/data}
|
mkdir -p /docker/{retrom/config,retrom/data}
|
||||||
mkdir -p /docker/{wud,ntopng,slskd,npm/data,npm/letsencrypt,npm/mysql}
|
mkdir -p /docker/{wud,ntopng,slskd,npm/data,npm/letsencrypt,npm/mysql}
|
||||||
mkdir -p /docker/{Homepage/config,neolink,tandoor,linkwarden}
|
mkdir -p /docker/{Homepage/config,neolink,tandoor,linkwarden,ntfy}
|
||||||
|
|
||||||
# Set correct permissions
|
# Set correct permissions
|
||||||
PUID=$(id -u)
|
PUID=$(id -u)
|
||||||
@@ -84,9 +84,11 @@ docker volume create docker_dbdata
|
|||||||
docker volume create docker_aidata
|
docker volume create docker_aidata
|
||||||
docker volume create docker_onlyoffice
|
docker volume create docker_onlyoffice
|
||||||
docker volume create docker_redisdata
|
docker volume create docker_redisdata
|
||||||
|
docker volume create ntfy_cache
|
||||||
|
docker volume create ntfy_auth
|
||||||
|
|
||||||
# Restore volume data
|
# Restore volume data
|
||||||
for volume in portainer_data open-webui docker_dbdata docker_aidata docker_onlyoffice docker_redisdata; do
|
for volume in portainer_data open-webui docker_dbdata docker_aidata docker_onlyoffice docker_redisdata ntfy_cache ntfy_auth; do
|
||||||
if [ -f "/path/to/backup/volumes/${volume}.tar.gz" ]; then
|
if [ -f "/path/to/backup/volumes/${volume}.tar.gz" ]; then
|
||||||
docker run --rm \
|
docker run --rm \
|
||||||
-v ${volume}:/volume \
|
-v ${volume}:/volume \
|
||||||
|
|||||||
@@ -240,6 +240,31 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./linkwarden/meili_data:/meili_data
|
- ./linkwarden/meili_data:/meili_data
|
||||||
|
|
||||||
|
ntfy:
|
||||||
|
image: binwiederhier/ntfy
|
||||||
|
container_name: ntfy
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- web_net
|
||||||
|
ports:
|
||||||
|
- "8086:8086"
|
||||||
|
volumes:
|
||||||
|
- ./ntfy:/etc/ntfy
|
||||||
|
- ntfy_cache:/var/cache/ntfy
|
||||||
|
- ntfy_auth:/var/lib/ntfy
|
||||||
|
command: serve
|
||||||
|
logging: *default-logging
|
||||||
|
|
||||||
|
mailrise:
|
||||||
|
image: yoryan/mailrise
|
||||||
|
container_name: mailrise
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8025:8025"
|
||||||
|
volumes:
|
||||||
|
- ./ntfy/mailrise.yml:/etc/mailrise/mailrise.yml:ro
|
||||||
|
logging: *default-logging
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
web_net:
|
web_net:
|
||||||
name: web_net
|
name: web_net
|
||||||
@@ -250,3 +275,7 @@ networks:
|
|||||||
internal_net:
|
internal_net:
|
||||||
name: internal_net
|
name: internal_net
|
||||||
external: true
|
external: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
ntfy_cache:
|
||||||
|
ntfy_auth:
|
||||||
|
|||||||
13
ntfy/mailrise.yml
Normal file
13
ntfy/mailrise.yml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
smtp:
|
||||||
|
hostname: mailrise
|
||||||
|
port: 8025
|
||||||
|
|
||||||
|
ntfy:
|
||||||
|
default:
|
||||||
|
url: http://ntfy:8086
|
||||||
|
token: tk_yourtokenhere
|
||||||
|
|
||||||
|
configs:
|
||||||
|
alerts: alerts
|
||||||
|
backups: backups
|
||||||
|
paperless: paperless
|
||||||
6
ntfy/server.yml
Normal file
6
ntfy/server.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
listen-http: ":8086"
|
||||||
|
cache-file: "/var/cache/ntfy/cache.db"
|
||||||
|
auth-file: "/var/lib/ntfy/auth.db"
|
||||||
|
auth-default-access: "deny-all"
|
||||||
|
behind-proxy: true
|
||||||
|
base-url: "https://ntfy.kansaigaijin.com"
|
||||||
Reference in New Issue
Block a user