一、什么是ntfy
ntfy(发音为notify)是一种基于HTTP 的简单pub-sub 通知服务。 它允许您通过脚本从任何计算机和/或使用REST API 向手机或桌面发送通知。 它是无限灵活的,并且是100% 免费软件。
ntfy接收消息设备可以是Android、IOS、浏览器。使用非常简单无需注册。
官方提供了免费的版本:https://ntfy.sh/app
二、ntfy安装
群晖(Container Manager)安装
下载
在注册表中搜索ntfy
,选择第一个binwiederhier/ntfy
,版本选择 latest
。
目录映射
在docker文件夹中,创建一个新文件夹,并将其命名为ntfy,并在其中建2个子文件夹,分别为cache和config
文件夹 | 装载路径 | 说明 |
docker/ntfy/cache | /var/cache/ntfy | 存放消息缓存 |
docker/ntfy/config | /etc/ntfy | 存放配置文件 |
端口
默认并没有指定端口,随便选择本地端口,不占用已经在使用的端口就行。
Docker安装
新建目录
mkdir -p /data/docker/ntfy/{cache,config}
进入ntfy目录
cd /data/docker/ntfy
启动容器
docker run -d \
--name ntfy \
-v $(pwd)/cache:/var/cache/ntfy \
-v $(pwd)/config:/etc/ntfy \
-p 8080:80 \
binwiederhier/ntfy
或者直接使用docker-compose
脚本如下:
version: "3"
services:
ntfy:
image: binwiederhier/ntfy:latest
container_name: ntfy
command:
- serve
environment:
- TZ=Asia/Shanghai
volumes:
- /home/ntfy/data/cache:/var/cache/ntfy
- /home/ntfy/data/config:/etc/ntfy
ports:
- 8080:80
restart: unless-stopped
三、反向代理
更多示例参考代理配置,这里仅摘录安全的Nginx配置。
# /etc/nginx/sites-*/ntfy
#
# This config requires the use of the -L flag in curl to redirect to HTTPS, and it keeps nginx output buffering
# enabled. While recommended, I have had issues with that in the past.
server {
listen 80;
server_name ntfy.sh;
location / {
return 302 https://$http_host$request_uri$is_args$query_string;
proxy_pass http://127.0.0.1:2586;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 3m;
proxy_send_timeout 3m;
proxy_read_timeout 3m;
client_max_body_size 0; # Stream request body to backend
}
}
server {
listen 443 ssl http2;
server_name ntfy.sh;
# See https://ssl-config.mozilla.org/#server=nginx&version=1.18.0&config=intermediate&openssl=1.1.1k&hsts=false&ocsp=false&guideline=5.6see https://ssl-config.mozilla.org/#server=nginx&version=1.18.0&config=intermediate&openssl=1.1.1k&hsts=false&ocsp=false&guideline=5.6
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_certificate /etc/letsencrypt/live/ntfy.sh/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ntfy.sh/privkey.pem;
location / {
proxy_pass http://127.0.0.1:2586;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 3m;
proxy_send_timeout 3m;
proxy_read_timeout 3m;
client_max_body_size 0; # Stream request body to backend
}
}
四、配置文件
参考官方配置文件示例
配置文件需要映射为容器中的 /etc/ntfy/server.yml 文件。
vim server.yml
base-url: "https://ntfy.xxxxx.com:8443"
cache-file: "/var/cache/ntfy/cache.db"
attachment-cache-dir: "/var/cache/ntfy/attachments"
upstream-base-url: "https://ntfy.sh"
配置好域名:https://ntfy.xxxxx.com,并在Nginx中设置端口为8443,在浏览器中输入https://ntfy.xxxxx.com:8443就能看到主界面。
默认情况下,ntfy 服务器对所有人开放,这意味着每个人都可以读取和写入任何主题(这就是 ntfy.sh 的配置方式)。要限制对您自己的服务器的访问,您可以选择配置身份验证和授权。配置方法可以看看官方文档:https://ntfy.sh/docs/config/#access-control
五、手机客户端
IOS版本,下载地址:https://apps.apple.com/us/app/ntfy/id1625396347
安卓版本,除了可以在Google Play下载(https://play.google.com/store/apps/details?id=io.heckel.ntfy&hl=en&gl=US)外,还可以在 F-Droid 下载:https://f-droid.org/en/packages/io.heckel.ntfy/