NaplóindexDockup / terepjegyzet
Note / self-host-ntfy

Az ntfy saját üzemeltetése 2026-ban: topicok, hozzáférés-vezérlés és kézbesítés

Gyakorlati útmutató az ntfy saját üzemeltetéséhez Dockerrel, portokkal, tartós adatokkal, TLS-sel, biztonsággal, biztonsági mentésekkel és a production használatot akadályozó hibákkal. Lépésről lépésre.

A legtöbb ntfy-telepítési leírás az első oldalbetöltésnél véget ér. Ez túl korai: a cache efemer, vagy a WebSocket-/SSE-kapcsolatok időtúllépés miatt megszakadnak a proxynál. Hasznos production teszt egy ennél szigorúbb folyamat — küldj üzenetet curl-lel, fogadd HTTP- és WebSocket-feliratkozásokon keresztül, csatolj egy fájlt, és tesztelj egy hitelesített topicot.

Az ntfy szerepe egyszerű: push értesítések küldése egy egyszerű HTTP-kéréssel. Az üzemeltetési hatóköre túlmutat a webfolyamaton, ezért még a valódi adatok megérkezése előtt egyértelműen meg kell nevezni a függőséget, a tárolt állapotot és a nyilvános útvonalat.

Az ntfy production felépítése

Az ntfy HTTP-folyamata a 80-as porton figyel; ezt a portot tartsd az alkalmazáshálózaton, és csak a platform útvonalát tedd közzé. A helyi runtime-követelmény egy config volume és egy opcionális auth-adatbázis. A közzététel előtt, majd egy konténer lecserélése után is teszteld ezt a határvonalat.

Írd le a határvonalat rövid szerződésként: ki felel a követelményért, melyik credentialt használod, milyen timeout fogadható el, és hogyan jelenik meg a hiba. Ezután futtasd le ezt a tranzakciót: küldj üzenetet curl-lel, fogadd HTTP- és WebSocket-feliratkozásokon keresztül, csatolj egy fájlt, és tesztelj egy hitelesített topicot. A futtatás közben figyeld a hosszú életű feliratkozói kapcsolatokat, a csatolmányok méretét, a cache megőrzési idejét és a kimenő push relayeket, mert ez a terhelés hasznosabb kiindulási méretet ad, mint egy tétlen konténer.

Indítsd el az ntfy-t anélkül, hogy elrejtenéd a mozgó alkatrészeket

A konténert cserélhető runtime-ként használd, ne az igazság forrásaként.

docker run -d \
  --name ntfy \
  --restart unless-stopped \
  -p 127.0.0.1:80:80 \
  -v ntfy-data:/var/cache/ntfy \
  -e NTFY_BASE_URL=https://app.example.com \
  binwiederhier/ntfy:latest serve

Az elérhetővé tétel előtt ellenőrizd a helyi követelményt: egy config volume-ot és egy opcionális auth-adatbázist. Az elérhetővé tétel előtt vizsgáld meg a konténer felhasználóját, az írható útvonalakat és a figyelő listenert. Futtasd le a teljes műveletet — küldj üzenetet curl-lel, fogadd HTTP- és WebSocket-feliratkozásokon keresztül, csatolj egy fájlt, és tesztelj egy hitelesített topicot —, majd mentsd el a pontos image-referenciát, amely az eredményt produkálta.

Adj az ntfy-nek egyetlen kanonikus címet

A base-url értékét állítsd a publisherek és feliratkozók által használt nyilvános HTTPS-originre. A kiválasztott hostname-t továbbítsd a konténer 80-as portjára, add tovább az eredeti hostot és a HTTPS-sémát, és ne tegyél közzé egy második, közvetlen origint.

Teszteld az ntfy-t egy tiszta, külső kliensről. Válaszd külön az ingress hibáját az ismert alkalmazási határvonaltól — a cache efemer, vagy a WebSocket-/SSE-kapcsolatok időtúllépés miatt megszakadnak a proxynál. A tanúsítvány-, DNS- vagy 502-es hiba az útválasztáshoz tartozik; az a kérés, amely eléri az ntfy-t, majd később hibázik, az alkalmazás állapotához, kapacitásához vagy egy támogató követelményhez kapcsolódik. Az egyedi domainhez használható TLS-útmutató az első csoporttal foglalkozik.

Bizonyítsd be, hogy az ntfy túléli a cserét

Mielőtt a konténer optimalizálásába kezdenél, védd az ntfy állapotát. A szükséges készlet a konfiguráció, az auth-adatbázis és a megőrzendő csatolmányok. A bootstrap előtt csatold fel a /var/cache/ntfy útvonalat, írj bele ártalmatlan mintaadatokat, majd cseréld le a konténert annak bizonyítására, hogy az útvonal valóban tartós. Ha több tárolónak kell összhangban lennie, dokumentáld, milyen sorrendben állítod le az írásokat és készíted el a mentéseket.

A másolatokat a deployment szerveren kívül tartsd, és titkosítsd a credentialeket vagy privát tartalmakat tartalmazó anyagokat. A helyreállítás akkor sikeres, ha visszatérnek a felhasználók, az ACL-ek, a konfiguráció és a megőrzött csatolmányok, valamint egy hitelesített feliratkozó új üzenetet kap. A tartós mount és a független másolat közötti különbséggel a tartós storage-ról és snapshotokról szóló útmutató foglalkozik.

Ne add oda az ntfy-nek az egész hostot

Az ntfy esetében az értékes felület nem feltétlenül a landing page. A fő hiba az, ha engedélyezed a nyilvános topic-találgatást, miközben az üzenetek üzemeltetési részleteket tartalmaznak. Ezt tudatosan ellensúlyozd: használj topic ACL-eket, mert az egyszerűen kitalálhatatlan topicnevek nem jelentenek erős autorizációt az üzemeltetési üzenetekhez.

A NTFY_BASE_URL konfiguráció, nem secret; az értékét tartsd explicit módon megadva, miközben véded az ntfy által használt külön credentialeket. Használj nem privilegizált konténerfelhasználót, ha az image támogatja, és ne mountolj oda nem kapcsolódó credentialeket. Az ingressnél alkalmazz rate- vagy méretkorlátokat, ahol a nem megbízható munkafolyamatok hosszú életű feliratkozói kapcsolatokat, csatolmány-méretet, cache-megőrzést és kimenő push relayeket fogyaszthatnak.

Frissítsd az ntfy-t találgatás nélkül

Minden deployment után használd smoke testként ezt a műveletet: küldj üzenetet curl-lel, fogadd HTTP- és WebSocket-feliratkozásokon keresztül, csatolj egy fájlt, és tesztelj egy hitelesített topicot. A hozzá tartozó metrikák a hosszú életű feliratkozói kapcsolatok, a csatolmányok mérete, a cache megőrzése és a kimenő push relayek; ott állíts be riasztást, ahol ezek az erőforrások megközelítik azt a pontot, amely már rontja a felhasználói műveletet.

A fő változási kockázat az, hogy az ntfy frissítése előtt ellenőrizni kell a konfigurációs kulcsokat, az auth-adatbázis migrációit és a kliensek elvárásait. A biztonságos release visszaállítható snapshotból indul, és a forgalom átterelése előtt validál minden egyirányú állapotváltozást. Ha a cache efemer, vagy a WebSocket-/SSE-kapcsolatok időtúllépés miatt megszakadnak a proxynál, a hibás konténert tartsd meg elég hosszú ideig ahhoz, hogy elolvashasd a konfigurációját és az első hibaüzenetet.

Az ntfy release gate-je

Az ntfy release candidate-je akkor kap forgalmat, ha teljesít egy rögzített forgatókönyvet: küldj üzenetet curl-lel, fogadd HTTP- és WebSocket-feliratkozásokon keresztül, csatolj egy fájlt, és tesztelj egy hitelesített topicot. Rögzítsd az image digestjét, a tényleges, nem titkos konfigurációt, a nyilvános origint és a forgatókönyv időbélyegeit. A tesztadatok legyenek eldobhatók, de annyira valósághűek, hogy ugyanazt az útvonalat teszteljék, amelyet a felhasználók is használnak.

Futtasd le a tesztet a runtime cseréje után, majd építsd újra a szolgáltatást a konfigurációból, az auth-adatbázisból és a megőrzendő csatolmányokból. A helyreállítás akkor sikeres, ha visszatérnek a felhasználók, az ACL-ek, a konfiguráció és a megőrzött csatolmányok, valamint egy hitelesített feliratkozó új üzenetet kap. Hasonlítsd össze a hosszú életű feliratkozói kapcsolatokra, a csatolmányok méretére, a cache megőrzésére és a kimenő push relayekre vonatkozó erőforrás-méréseket az előző release értékeivel, és a promotion előtt vizsgáld ki az érdemi eltéréseket.

Végül hajtsd végre ezt a kontrollált hibát: küldj az adott határvonalhoz kapcsolódó erőforrás- vagy formátumkorlát közelében lévő, ártalmatlan bemenetet: a cache efemer, vagy a WebSocket-/SSE-kapcsolatok időtúllépés miatt megszakadnak a proxynál. Ellenőrizd, hogy az ntfy érthetően jelzi a hibát, nem károsítja a meglévő állapotot, és a helyes feltétel visszatérése után újra működik. Ments el egy redaktált naplórészletet és a helyreállítási időt. Ezek az ellenőrzések együtt nem csupán a folyamat életben létét, hanem a működést, a tartósságot és az üzemeltethetőséget is lefedik.

Tartsd explicit módon az ntfy-t, miközben a Dockup kezeli az útválasztást

Az útválasztás, a tanúsítványok, a szolgáltatás cseréje és a csatolt storage ésszerű automatizálási célpontok. A Dockup ezeket kezeli az ntfy számára, és a kapcsolódó managed adatbázist is létrehozhatja, illetve csatlakozhat az ügyfél saját szerverén futó szolgáltatásokhoz.

Amit nem szabad kitalálnia, az az ntfy trust policy-ja. A deployment után állítsd a base-url értékét a publisherek és feliratkozók által használt nyilvános HTTPS-originre, érvényesítsd ezt a határvonalat — használj topic ACL-eket, mert az egyszerűen kitalálhatatlan topicnevek nem jelentenek erős autorizációt az üzemeltetési üzenetekhez —, majd ellenőrizd ennek a forgatókönyvnek az eredményét: küldj üzenetet curl-lel, fogadd HTTP- és WebSocket-feliratkozásokon keresztül, csatolj egy fájlt, és tesztelj egy hitelesített topicot. Az eredmény egy egykattintásos infrastruktúra alkalmazásspecifikus átvételi teszttel.

Gyakran ismételt kérdések

Mire van szüksége az ntfy-nek production deployment esetén?

Az ntfy konténerét a 80-as porton egyetlen HTTPS-originen keresztül tedd elérhetővé. A helyi runtime-követelmény egy config volume és egy opcionális auth-adatbázis. Ne tekintsd késznek az ntfy-t addig, amíg nem tudsz üzenetet küldeni curl-lel, azt HTTP- és WebSocket-feliratkozásokon keresztül fogadni, fájlt csatolni és egy hitelesített topicot tesztelni.

Mely ntfy-adatoknak kell bekerülniük a biztonsági mentésbe?

Tedd tartóssá a /var/cache/ntfy útvonalat, és ugyanabba a helyreállítási manifestbe vedd fel a konfigurációt, az auth-adatbázist és a megőrzendő csatolmányokat. A tiszta ntfy-restore csak akkor sikeres, ha visszatérnek a felhasználók, az ACL-ek, a konfiguráció és a megőrzött csatolmányok, valamint egy hitelesített feliratkozó új üzenetet kap.

Szüksége van az ntfy-nek HTTPS-re reverse proxy mögött?

A nyilvános ntfy-originhez használj HTTPS-t, a 80-as portot pedig tartsd a belső útvonalon. Helyesen alkalmazd az ntfy beállítását: a base-url értékét állítsd a publisherek és feliratkozók által használt nyilvános HTTPS-originre. Az ntfy esetében a HTTPS átvitel közben védi a credentialeket és a felhasználói tartalmakat, valamint egységessé teszi az originérzékeny kliensviselkedést.

Hogyan kell tesztelni az ntfy frissítését?

Állítsd vissza az aktuális ntfy-állapotot egy izolált deploymentbe, alkalmazd a jelölt verziót, majd ismételd meg az átvételi tranzakciót. Fordíts különös figyelmet arra, hogy az ntfy frissítése előtt ellenőrizni kell a konfigurációs kulcsokat, az auth-adatbázis migrációit és a kliensek elvárásait. Tartsd meg az előző ntfy-image-et addig, amíg nem érted az adat-migráció és a rollback határvonalát.