Files
admin/vds-ntfy-push.md
vitya f9bdb97be3 docs(.wiki,.tasks): vds-kzntsv-bootstrap done — 3 phases shipped
VDS Rusonyx 160 NVMe (89.253.255.94 / vds.kzntsv.site) активирован
2026-05-20. 3 фазы за ~6 часов:

- Phase 1: harden + docker 29.5.1 + traefik v2.11 + portainer 2.21.5
- Phase 2: shared DB park (postgres 16 / mariadb 11.4 / mongo 7 /
  redis 7) via traefik raw TCP forward + self-signed TLS
- Phase 3: миграция gitea (132 repos), verdaccio (2063 pkgs), registry
  fresh install (user accepted loss old images) + Joxit GUI

Ingest 1 source + 1 entity (vds-kzntsv) + 6 concepts (traefik-tcp-
passthrough-vs-starttls / portainer-2.21-admin-password-regression /
db-tls-self-signed-via-traefik-raw-tcp / rusonyx-vps-onboarding-quirks
/ registry-gc-mount-and-modify-flag / compose-bcrypt-escape-trap).

3 follow-up  tasks: vds-gc-cron, vds-backup-rsync-kreknin, vds-ntfy-push.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 22:39:31 +03:00

77 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# vds-ntfy-push
## Goal
Self-host [ntfy.sh](https://ntfy.sh) на VDS для push-нотификаций на телефон. Docker-image `binwiederhier/ntfy`. Использовать для:
- [[vds-backup-rsync-kreknin]] backup status (вместо/параллельно email на vitya.kuznetsov@gmail.com)
- Monitoring alerts (CMS down, traefik certs истекают, disk fill, registry GC fail, etc.)
- Любые ad-hoc уведомления от ops-скриптов
Domain: `ntfy.vds.kzntsv.site` (под уже существующим wildcard `*.vds.kzntsv.site`).
## Open questions
- [ ] **Auth model:** ntfy supports anonymous (open топики — anyone with topic name может subscribe/publish) или с auth (per-user/per-topic ACL). Для push на личный телефон — anonymous с длинными UUID-топиками практично; auth ближе production. Recommend: auth + ACL.
- [ ] **Топики:** один общий (`vitya-ops`) или по сервису (`vds-backup`, `cms-monitor`, `traefik-alerts`)? Per-service удобнее для filtering на телефоне.
- [x] ~~**Phone app:**~~ Android (resolved 2026-05-20) → ntfy Android app, pure self-host без APNs middleware.
- [ ] **Persistence:** sqlite DB в `/opt/stacks/ntfy/data/`. Тривиально.
## Implementation sketch
`/opt/stacks/ntfy/docker-compose.yml`:
```yaml
services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
restart: unless-stopped
command:
- serve
networks:
- proxy
volumes:
- ./data:/var/cache/ntfy
- ./etc:/etc/ntfy
environment:
NTFY_BASE_URL: https://ntfy.vds.kzntsv.site
NTFY_CACHE_FILE: /var/cache/ntfy/cache.db
NTFY_AUTH_FILE: /var/cache/ntfy/auth.db
NTFY_AUTH_DEFAULT_ACCESS: deny-all
NTFY_BEHIND_PROXY: true
NTFY_ATTACHMENT_CACHE_DIR: /var/cache/ntfy/attachments
labels:
- traefik.enable=true
- traefik.http.routers.ntfy.rule=Host(`ntfy.vds.kzntsv.site`)
- traefik.http.routers.ntfy.entrypoints=websecure
- traefik.http.routers.ntfy.tls.certresolver=letsEncrypt
- traefik.http.services.ntfy.loadbalancer.server.port=80
networks:
proxy:
external: true
```
После up — `docker exec ntfy ntfy user add --role=admin vitya` → задать пароль → грант access на топики.
Publish from any script:
```bash
curl -u "vitya:$NTFY_PASS" \
-H "Title: VDS backup completed" \
-H "Tags: white_check_mark" \
-H "Priority: default" \
-d "Size 12.5G, 18m12s, kreknin OK" \
https://ntfy.vds.kzntsv.site/vds-backup
```
Phone subscribes to `https://ntfy.vds.kzntsv.site/vds-backup` (с basic auth) — получает уведомление.
## Decisions log
-усто — задача только заведена._
## Notes
- Триггер: после `[[vds-kzntsv-bootstrap]]` Phase 3 и до или одновременно с `[[vds-backup-rsync-kreknin]]` (backup pipeline хочет ntfy для статус-уведомлений).
- Интегрируется с `[[vds-backup-rsync-kreknin]]` — backup script публикует через ntfy + дублируется email'ом для надёжности.