Bump version
parent
048d17c365
commit
4a3a0de198
9
Makefile
9
Makefile
|
@ -116,7 +116,14 @@ clean: .PHONY
|
||||||
|
|
||||||
# Releasing targets
|
# Releasing targets
|
||||||
|
|
||||||
release: build-deps
|
release-check-tags:
|
||||||
|
$(eval LATEST_TAG := $(shell git describe --abbrev=0 --tags | cut -c2-))
|
||||||
|
if grep -q $(LATEST_TAG) docs/install.md; then\
|
||||||
|
echo "ERROR: Must update docs/install.md with latest tag first.";\
|
||||||
|
exit 1;\
|
||||||
|
fi
|
||||||
|
|
||||||
|
release: build-deps release-check-tags
|
||||||
goreleaser release --rm-dist --debug
|
goreleaser release --rm-dist --debug
|
||||||
|
|
||||||
release-snapshot: build-deps
|
release-snapshot: build-deps
|
||||||
|
|
182
README.md
182
README.md
|
@ -1,6 +1,6 @@
|
||||||
![ntfy](server/static/img/ntfy.png)
|
![ntfy](server/static/img/ntfy.png)
|
||||||
|
|
||||||
# ntfy.sh | simple HTTP-based pub-sub
|
# ntfy.sh | Send push notifications to your phone or desktop via PUT/POST
|
||||||
[![Release](https://img.shields.io/github/release/binwiederhier/ntfy.svg?color=success&style=flat-square)](https://github.com/binwiederhier/ntfy/releases/latest)
|
[![Release](https://img.shields.io/github/release/binwiederhier/ntfy.svg?color=success&style=flat-square)](https://github.com/binwiederhier/ntfy/releases/latest)
|
||||||
[![Slack channel](https://img.shields.io/badge/slack-@gophers/binwiederhier-success.svg?logo=slack)](https://gophers.slack.com/archives/C01JMTPGF2Q)
|
[![Slack channel](https://img.shields.io/badge/slack-@gophers/binwiederhier-success.svg?logo=slack)](https://gophers.slack.com/archives/C01JMTPGF2Q)
|
||||||
|
|
||||||
|
@ -19,181 +19,13 @@ too.
|
||||||
<img src="server/static/img/screenshot-phone-notification.jpg" height="180">
|
<img src="server/static/img/screenshot-phone-notification.jpg" height="180">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Usage
|
## **[Documentation](https://ntfy.sh/docs/)**
|
||||||
|
|
||||||
### Publishing messages
|
[Getting started](https://ntfy.sh/docs/) |
|
||||||
|
[Android/iOS](https://ntfy.sh/docs/subscribe/phone/) |
|
||||||
Publishing messages can be done via PUT or POST using. Topics are created on the fly by subscribing or publishing to them.
|
[API](https://ntfy.sh/docs/publish/) |
|
||||||
Because there is no sign-up, **the topic is essentially a password**, so pick something that's not easily guessable.
|
[Install / Self-hosting](https://ntfy.sh/docs/install/) |
|
||||||
|
[Building](https://ntfy.sh/docs/develop/)
|
||||||
Here's an example showing how to publish a message using `curl`:
|
|
||||||
|
|
||||||
```
|
|
||||||
curl -d "long process is done" ntfy.sh/mytopic
|
|
||||||
```
|
|
||||||
|
|
||||||
Here's an example in JS with `fetch()` (see [full example](examples)):
|
|
||||||
|
|
||||||
```
|
|
||||||
fetch('https://ntfy.sh/mytopic', {
|
|
||||||
method: 'POST', // PUT works too
|
|
||||||
body: 'Hello from the other side.'
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
### Subscribe to a topic
|
|
||||||
You can create and subscribe to a topic either in this web UI, or in your own app by subscribing to an
|
|
||||||
[EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource), a JSON feed, or raw feed.
|
|
||||||
|
|
||||||
#### Subscribe via web
|
|
||||||
If you subscribe to a topic via this web UI in the field below, messages published to any subscribed topic
|
|
||||||
will show up as **desktop notification**.
|
|
||||||
|
|
||||||
You can try this easily on **[ntfy.sh](https://ntfy.sh)**.
|
|
||||||
|
|
||||||
#### Subscribe via phone
|
|
||||||
You can use the [Ntfy Android App](https://play.google.com/store/apps/details?id=io.heckel.ntfy) to receive
|
|
||||||
notifications directly on your phone. Just like the server, this app is also [open source](https://github.com/binwiederhier/ntfy-android).
|
|
||||||
|
|
||||||
#### Subscribe via your app, or via the CLI
|
|
||||||
Using [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) in JS, you can consume
|
|
||||||
notifications like this (see [full example](examples)):
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const eventSource = new EventSource('https://ntfy.sh/mytopic/sse');<br/>
|
|
||||||
eventSource.onmessage = (e) => {<br/>
|
|
||||||
// Do something with e.data<br/>
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also use the same `/sse` endpoint via `curl` or any other HTTP library:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ curl -s ntfy.sh/mytopic/sse
|
|
||||||
event: open
|
|
||||||
data: {"id":"weSj9RtNkj","time":1635528898,"event":"open","topic":"mytopic"}
|
|
||||||
|
|
||||||
data: {"id":"p0M5y6gcCY","time":1635528909,"event":"message","topic":"mytopic","message":"Hi!"}
|
|
||||||
|
|
||||||
event: keepalive
|
|
||||||
data: {"id":"VNxNIg5fpt","time":1635528928,"event":"keepalive","topic":"test"}
|
|
||||||
```
|
|
||||||
|
|
||||||
To consume JSON instead, use the `/json` endpoint, which prints one message per line:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ curl -s ntfy.sh/mytopic/json
|
|
||||||
{"id":"SLiKI64DOt","time":1635528757,"event":"open","topic":"mytopic"}
|
|
||||||
{"id":"hwQ2YpKdmg","time":1635528741,"event":"message","topic":"mytopic","message":"Hi!"}
|
|
||||||
{"id":"DGUDShMCsc","time":1635528787,"event":"keepalive","topic":"mytopic"}
|
|
||||||
```
|
|
||||||
|
|
||||||
Or use the `/raw` endpoint if you need something super simple (empty lines are keepalive messages):
|
|
||||||
|
|
||||||
```
|
|
||||||
$ curl -s ntfy.sh/mytopic/raw
|
|
||||||
|
|
||||||
This is a notification
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Message buffering and polling
|
|
||||||
Messages are buffered in memory for a few hours to account for network interruptions of subscribers.
|
|
||||||
You can read back what you missed by using the `since=...` query parameter. It takes either a
|
|
||||||
duration (e.g. `10m` or `30s`) or a Unix timestamp (e.g. `1635528757`):
|
|
||||||
|
|
||||||
```
|
|
||||||
$ curl -s "ntfy.sh/mytopic/json?since=10m"
|
|
||||||
# Same output as above, but includes messages from up to 10 minutes ago
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also just poll for messages if you don't like the long-standing connection using the `poll=1`
|
|
||||||
query parameter. The connection will end after all available messages have been read. This parameter has to be
|
|
||||||
combined with `since=`.
|
|
||||||
|
|
||||||
```
|
|
||||||
$ curl -s "ntfy.sh/mytopic/json?poll=1&since=10m"
|
|
||||||
# Returns messages from up to 10 minutes ago and ends the connection
|
|
||||||
```
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
There are a few usage examples in the [examples](examples) directory. I'm sure there are tons of other ways to use it.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
Please check out the [releases page](https://github.com/binwiederhier/ntfy/releases) for binaries and
|
|
||||||
deb/rpm packages.
|
|
||||||
|
|
||||||
1. Install ntfy using one of the methods described below
|
|
||||||
2. Then (optionally) edit `/etc/ntfy/config.yml`
|
|
||||||
3. Then just run it with `ntfy` (or `systemctl start ntfy` when using the deb/rpm).
|
|
||||||
|
|
||||||
### Binaries and packages
|
|
||||||
**Debian/Ubuntu** (*from a repository*)**:**
|
|
||||||
```bash
|
|
||||||
curl -sSL https://archive.heckel.io/apt/pubkey.txt | sudo apt-key add -
|
|
||||||
sudo apt install apt-transport-https
|
|
||||||
sudo sh -c "echo 'deb [arch=amd64] https://archive.heckel.io/apt debian main' > /etc/apt/sources.list.d/archive.heckel.io.list"
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install ntfy
|
|
||||||
```
|
|
||||||
|
|
||||||
**Debian/Ubuntu** (*manual install*)**:**
|
|
||||||
```bash
|
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_amd64.deb
|
|
||||||
dpkg -i ntfy_1.5.0_amd64.deb
|
|
||||||
```
|
|
||||||
|
|
||||||
**Fedora/RHEL/CentOS:**
|
|
||||||
```bash
|
|
||||||
rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_amd64.rpm
|
|
||||||
```
|
|
||||||
|
|
||||||
**Docker:**
|
|
||||||
Without cache:
|
|
||||||
```
|
|
||||||
docker run -p 80:80 -it binwiederhier/ntfy
|
|
||||||
```
|
|
||||||
|
|
||||||
With cache:
|
|
||||||
```bash
|
|
||||||
docker run \
|
|
||||||
-v /var/cache/ntfy:/var/cache/ntfy \
|
|
||||||
-p 80:80 \
|
|
||||||
-it \
|
|
||||||
binwiederhier/ntfy \
|
|
||||||
--cache-file /var/cache/ntfy/cache.db
|
|
||||||
```
|
|
||||||
|
|
||||||
**Go:**
|
|
||||||
```bash
|
|
||||||
go get -u heckel.io/ntfy
|
|
||||||
```
|
|
||||||
|
|
||||||
**Manual install:**
|
|
||||||
```bash
|
|
||||||
# x86_64/amd64
|
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_x86_64.tar.gz
|
|
||||||
|
|
||||||
# armv7
|
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_armv7.tar.gz
|
|
||||||
|
|
||||||
# arm64/v8
|
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_arm64.tar.gz
|
|
||||||
|
|
||||||
# Extract and run
|
|
||||||
sudo tar -C /usr/bin -zxf ntfy_*.tar.gz ntfy
|
|
||||||
./ntfy
|
|
||||||
```
|
|
||||||
|
|
||||||
## Building
|
|
||||||
Building `ntfy` is simple. Here's how you do it:
|
|
||||||
|
|
||||||
```
|
|
||||||
make build-simple
|
|
||||||
# Builds to dist/ntfy_linux_amd64/ntfy
|
|
||||||
```
|
|
||||||
|
|
||||||
To build releases, I use [GoReleaser](https://goreleaser.com/). If you have that installed, you can run `make build` or
|
|
||||||
`make build-snapshot`.
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
I welcome any and all contributions. Just create a PR or an issue.
|
I welcome any and all contributions. Just create a PR or an issue.
|
||||||
|
|
|
@ -20,21 +20,21 @@ deb/rpm packages.
|
||||||
|
|
||||||
=== "x86_64/amd64"
|
=== "x86_64/amd64"
|
||||||
```bash
|
```bash
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_x86_64.tar.gz
|
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.1/ntfy_1.5.1_linux_x86_64.tar.gz
|
||||||
sudo tar -C /usr/bin -zxf ntfy_*.tar.gz ntfy
|
sudo tar -C /usr/bin -zxf ntfy_*.tar.gz ntfy
|
||||||
sudo ./ntfy
|
sudo ./ntfy
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "armv7/armhf"
|
=== "armv7/armhf"
|
||||||
```bash
|
```bash
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_armv7.tar.gz
|
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.1/ntfy_1.5.1_linux_armv7.tar.gz
|
||||||
sudo tar -C /usr/bin -zxf ntfy_*.tar.gz ntfy
|
sudo tar -C /usr/bin -zxf ntfy_*.tar.gz ntfy
|
||||||
sudo ./ntfy
|
sudo ./ntfy
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "arm64"
|
=== "arm64"
|
||||||
```bash
|
```bash
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_arm64.tar.gz
|
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.1/ntfy_1.5.1_linux_arm64.tar.gz
|
||||||
sudo tar -C /usr/bin -zxf ntfy_*.tar.gz ntfy
|
sudo tar -C /usr/bin -zxf ntfy_*.tar.gz ntfy
|
||||||
sudo ./ntfy
|
sudo ./ntfy
|
||||||
```
|
```
|
||||||
|
@ -82,7 +82,7 @@ Manually installing the .deb file:
|
||||||
|
|
||||||
=== "x86_64/amd64"
|
=== "x86_64/amd64"
|
||||||
```bash
|
```bash
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_amd64.deb
|
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.1/ntfy_1.5.1_linux_amd64.deb
|
||||||
sudo dpkg -i ntfy_*.deb
|
sudo dpkg -i ntfy_*.deb
|
||||||
sudo systemctl enable ntfy
|
sudo systemctl enable ntfy
|
||||||
sudo systemctl start ntfy
|
sudo systemctl start ntfy
|
||||||
|
@ -90,7 +90,7 @@ Manually installing the .deb file:
|
||||||
|
|
||||||
=== "armv7/armhf"
|
=== "armv7/armhf"
|
||||||
```bash
|
```bash
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_armv7.deb
|
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.1/ntfy_1.5.1_linux_armv7.deb
|
||||||
sudo dpkg -i ntfy_*.deb
|
sudo dpkg -i ntfy_*.deb
|
||||||
sudo systemctl enable ntfy
|
sudo systemctl enable ntfy
|
||||||
sudo systemctl start ntfy
|
sudo systemctl start ntfy
|
||||||
|
@ -98,7 +98,7 @@ Manually installing the .deb file:
|
||||||
|
|
||||||
=== "arm64"
|
=== "arm64"
|
||||||
```bash
|
```bash
|
||||||
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_arm64.deb
|
wget https://github.com/binwiederhier/ntfy/releases/download/v1.5.1/ntfy_1.5.1_linux_arm64.deb
|
||||||
sudo dpkg -i ntfy_*.deb
|
sudo dpkg -i ntfy_*.deb
|
||||||
sudo systemctl enable ntfy
|
sudo systemctl enable ntfy
|
||||||
sudo systemctl start ntfy
|
sudo systemctl start ntfy
|
||||||
|
@ -108,21 +108,21 @@ Manually installing the .deb file:
|
||||||
|
|
||||||
=== "x86_64/amd64"
|
=== "x86_64/amd64"
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_amd64.rpm
|
sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.5.1/ntfy_1.5.1_linux_amd64.rpm
|
||||||
sudo systemctl enable ntfy
|
sudo systemctl enable ntfy
|
||||||
sudo systemctl start ntfy
|
sudo systemctl start ntfy
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "armv7/armhf"
|
=== "armv7/armhf"
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_armv7.rpm
|
sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.5.1/ntfy_1.5.1_linux_armv7.rpm
|
||||||
sudo systemctl enable ntfy
|
sudo systemctl enable ntfy
|
||||||
sudo systemctl start ntfy
|
sudo systemctl start ntfy
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "arm64"
|
=== "arm64"
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.5.0/ntfy_1.5.0_linux_arm64.rpm
|
sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.5.1/ntfy_1.5.1_linux_arm64.rpm
|
||||||
sudo systemctl enable ntfy
|
sudo systemctl enable ntfy
|
||||||
sudo systemctl start ntfy
|
sudo systemctl start ntfy
|
||||||
```
|
```
|
||||||
|
|
Loading…
Reference in New Issue