ntfy.sh selbst hosten (Unified Push)

Mit ntfy.sh können Sie Push Benachrichtigungen ohne jegliche Google Services zu Ihren Telefonen (bspw. Graphene OS basiert) oder PCs via Skript, cli oder Web mittels HTTP PUT- oder POST- Anfragen senden bzw. an den registrierten Geräten empfangen.

Quelle: ntfy.sh

Verbinden Sie sich dazu per SSH zu Ihrem Server und folgen den nachfolgenden Anweisungen:

sudo -s
mkdir -p /var/opt/docker/ntfy
cd /var/opt/docker/ntfy
nano docker-compose.yaml
services:
  ntfy:
    image: binwiederhier/ntfy
    command: serve
    environment:
      NTFY_BASE_URL: "https://ntfysh.ihredomain.de"
      NTFY_BEHIND_PROXY: "true"
      NTFY_AUTH_FILE: "/var/lib/ntfy/auth.db"
      NTFY_CACHE_FILE: "/var/cache/ntfy/cache.db"
      NTFY_CACHE_DURATION: "1d"
    volumes:
      - /var/cache/ntfy:/var/cache/ntfy
      - /var/lib/ntfy:/var/lib/ntfy
    ports:
      - "8180:80"
    restart: unless-stopped

NTFY bietet weitere Informationen sowie einen Configurator an, mit dessen Hilfe sich weitere Konfigurations- und Härtungsmassnahmen umsetzen lassen » hier

Starten Sie den Docker und analysieren im Log den erfolgreichen Start:

docker compose up -d

Starten Sie den Docker und analysieren im Log den erfolgreichen Start:

docker logs -f ntfy-ntfy-1

Nun erweitern wir den ReverseProxy/Webserver (nginx) um den ntfy-vHost. Passen Sie die http.conf um die ntfy-Domäne an:

nano /etc/nginx/conf.d/http.conf
[...]
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name bestehende.ihredomain.de ntfysh.ihredomain.de;
root /var/www;
[...]

Erstellen Sie den neuen vHost für die ntfy-Domäne:

nano /etc/nginx/conf.d/ntfy.ihredomain.de.conf
server {
  listen 443 ssl;
  listen [::]:443 ssl;
  http2 on;
  server_name ntfysh.ihredomain.de;
  ssl_certificate /etc/letsencrypt/rsa-certs/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/rsa-certs/privkey.pem;
  ssl_certificate /etc/letsencrypt/ecc-certs/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/ecc-certs/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/ecc-certs/chain.pem;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:50m;
  ssl_session_tickets off;
  ssl_protocols TLSv1.3 TLSv1.2;
  ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA>
  # ssl_ecdh_curve X448:secp521r1:secp384r1;
  ssl_ecdh_curve X25519MLKEM768:X25519:prime256v1;
  ssl_prefer_server_ciphers on;
  client_max_body_size 1G;
  client_body_timeout 86400s;
  client_body_buffer_size 512k;
  fastcgi_buffers 64 4K;
  gzip on;
  gzip_vary on;
  gzip_comp_level 4;
  gzip_min_length 256;
  gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
  gzip_types application/atom+xml text/javascript application/javascript application/json application/ld+json applica>
  add_header Strict-Transport-Security            "max-age=15768000; includeSubDomains; preload;" always;
  add_header Permissions-Policy                   "interest-cohort=()";
  add_header Referrer-Policy                      "no-referrer"   always;
  add_header X-Content-Type-Options               "nosniff"       always;
  add_header X-Download-Options                   "noopen"        always;
  add_header X-Frame-Options                      "SAMEORIGIN"    always;
  add_header X-Permitted-Cross-Domain-Policies    "none"          always;
  add_header X-Robots-Tag                         "noindex, nofollow" always;
  add_header X-XSS-Protection                     "1; mode=block" always;
  location / {
          proxy_set_header Connection "";
          proxy_set_header X-Forwarded-For $remote_addr;
          proxy_set_header Host $http_host;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_pass http://127.0.0.1:8180;
          proxy_buffering off;
          proxy_buffer_size 4k;
          proxy_buffers 64 4k;
          proxy_read_timeout 86400s;
          proxy_send_timeout 86400s;
  }
}

Erweitern Sie das Zertifikat um die neue ntfy-Domain (ntfysh.ihredomain.de):

su - acmeuser
acme.sh --issue -d bestehend.ihredomain.de -d ntfysh.ihredomain.de --server letsencrypt --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/rsa-certs/privkey.pem --ca-file /etc/letsencrypt/rsa-certs/chain.pem --cert-file /etc/letsencrypt/rsa-certs/cert.pem --fullchain-file /etc/letsencrypt/rsa-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
acme.sh --issue -d bestehend.ihredomain.de -d ntfysh.ihredomain.de --server letsencrypt --keylength ec-384 -w /var/www/letsencrypt --key-file /etc/letsencrypt/ecc-certs/privkey.pem --ca-file /etc/letsencrypt/ecc-certs/chain.pem --cert-file /etc/letsencrypt/ecc-certs/cert.pem --fullchain-file /etc/letsencrypt/ecc-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
exit

Starten Sie den Webserver (nginx) neu

systemctl restart nginx.service

Rufen Sie ihre ntfy-Domain auf » https://ntfysh.ihredomain.de

Ab sofort können Pushbenachrichtigungen von Anwendungen wie bspw.

über ihren ntfy-Server gesendet und empfangen werden. Dabei lassen sich auch eigene Nachrichten beliebig gestalten und mit Emojis an registrierte Geräte senden.

Unterstützung mit WERO