2.9 KiB
Ntfi
This is a daemon with the single purpose of centralizing credentials and configuration for pushing notifications to ntfy.sh or private instances of ntfy.
This daemon does not support subscriptions for now, only publishing.
Important
This is not a replacement for ntfy.sh, it is a complement to avoid having to configure multiple services in a stack, and to create abstractions for topic names.
Building
Ntfi is built using box. You can compile it right away with box compile,
but the recommended way is using the Makefile to ensure the version information
is included:
$ make phar
Using
Bare metal (Linux):
$ cp config.dist.yaml config.yaml
$ editor config.yaml
$ ./ntfid.phar --config config.yaml
With Docker:
$ cp config.dist.yaml config.yaml
$ editor config.yaml
$ docker exec --rm -it -p 13000:13000 -v $PWD/config.yaml:/app/config.yaml \
dev.noccylabs.info/noccylabs/ntfi:latest
With Docker Compose:
Make sure to create config.yaml from config.dist.yaml in the same directory
as the compose.yaml file.
services:
ntfi:
image: dev.noccylabs.info/noccylabs/ntfi:latest
# only include ports if you need to publish from outside of the stack
ports:
- 13000:13000
volumes:
- ./config.yaml:/app/config.yaml
restart: always
Configuration
Listen
This is a single key defining the HTTP listen address. This defaults to
0.0.0.0:13000.
Servers
Configure the servers that you want to be able to relay notifications to. The
default configuration defines a single server, default which is configured
to send messages to ntfy.sh as an anonymous user.
| Key | Req | Detail |
|---|---|---|
server |
Y | The server name without protocol (always https) |
token |
- | API token to use when authenticating |
username |
- | Username for authenticating |
password |
- | Password for authenticating |
Note
Note that for authentication to work, you need to specify either
token, orusernameandpassword. Iftokenis empty, and onlyusernameorpasswordis set, no authentication will be used.
Channels
These are the channels that can be sent to. Each channel name matches the request URL, and placeholders can be used to extract and reassemble a destination topic.
| Key | Req | Detail |
|---|---|---|
destination |
Y | The destination, as <server>/<topic> |
Examples:
# match exact topic and send to rewritten topic
"serverevents":
destination: "default/sometopicnameforserverevents"
# parse and use only part of topic, sending to another server
"prefix_{topic}":
destination: "prefixed/{topic}"
# or append a prefix to the topic, sending to yet another server
"{topic}":
destination: "prefixing/prefix_{topic}"