selfhosted-apps-docker/gotify-ntfy-signal
2023-02-05 19:26:14 +01:00
..
readme.md update 2023-02-05 19:26:14 +01:00

gotify ntfy signal

guide-by-example

logo

Purpose & Overview

Instant notifications if email feels old timey and crowded


Overview

  • gotify - great for single person use, but the moment theres more people they need to share single account and so lack the ability to choose what to get and what not to get
  • ntfy - simple original approach to just subscribing to "topics" without authentification. Very simple single line push notification. Support for multiple user, supports ios.
  • signal-cli-rest-api - no gui, need a sim card phone number registred, notification are just send to phone numbers. The wider spread of it might make it a winner since no need for another app.

Afte few weeks of tinkering with these... ntfy is the winner for me, for now.
Compose files for the other two are at the end.

docker-compose for ntfy

docker-compose.yml

services:

  ntfy:
    image: binwiederhier/ntfy
    container_name: ntfy
    hostname: ntfy
    env_file: .env
    restart: unless-stopped
    command:
      - serve
    volumes:
      - ./ntfy-cache:/var/cache/ntfy
      - ./ntfy-etc:/etc/ntfy

networks:
  default:
    name: $DOCKER_MY_NETWORK
    external: true

.env

# GENERAL
MY_DOMAIN=example.com
DOCKER_MY_NETWORK=caddy_net
TZ=Europe/Bratislava

Reverse proxy

Caddy is used, details here.

Caddyfile

ntfy.{$MY_DOMAIN} {
  reverse_proxy ntfy:80
}

The usage

Documentations

Linux

curl -d "blablablaaa" https://ntfy.example.com/whatevers

Windows

  • win10+

    Invoke-RestMethod -Method 'Post' -Uri https://ntfy.example.com/whatevers -Body "blablablaaa" -UseBasicParsing

  • win8.1 and older need bit extra for https to work

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    Invoke-RestMethod -Method 'Post' -Uri https://ntfy.example.com/whatevers -Body "blablablaaa" -UseBasicParsing
    

Linux systemd unit file service

To allows use of ntfy OnFailure and OnSuccess inside systemd unit files.

To send useful info specifiers are used.

  • %n - full unit name
  • %p - prefix part of the name
  • %i - instance name, between @ and suffix
  • %H - machine hostname

Systemd template unit file is used. These contains @ to allow for dynamical naming at runtime. They are called with additional info added between @ and the suffix .service

ntfy@.service

[Unit]
Description=ntfy notification service
After=network.target

[Service]
Type=simple
ExecStart=/bin/curl -d "%i | %H" https://ntfy.example.com/systemd

Example of a service using the above defined service to send notifications.

borg.service

[Unit]
Description=BorgBackup docker
OnFailure=ntfy@failure-%p.service
OnSuccess=ntfy@success-%p.service

[Service]
Type=simple
ExecStart=/opt/borg_backup.sh

gotify and signal compose

gotify-docker-compose.yml

services:

  gotify:
    image: gotify/server
    container_name: gotify
    hostname: gotify
    restart: unless-stopped
    env_file: .env
    volumes:
      - "./gotify_data:/app/data"

networks:
  default:
    name: caddy_net
    external: true

signal-docker-compose.yml

  signal:
    image: bbernhard/signal-cli-rest-api
    container_name: signal
    hostname: signal
    env_file: .env
    restart: unless-stopped
    volumes:
      - "./signal-cli-config:/home/.local/share/signal-cli" #map "signal-cli-config" folder on host system into docker container. the folder contains the password and cryptographic keys when a new number is registered

networks:
  default:
    name: caddy_net
    external: true