利用ntfy实时接收消息
前言
最近在上某绿色网站以及和本站站友交流时候发现了一个问题就是pm总是接收不到消息,虽然本站是有tg私信通知的,但是tg接收不到消息又是一个问题,虽然可以通过fcm来解决,不过国内的手机emmm,就一眼难尽了,好在在使用matrix服务器时候也找到了一个工具,既可以作为push client来使用又可以使用unifiedpush来进行推送,就是ntfy
自建服务器
虽然ntfy提供了官方的服务器,但是经过我的测试,如果其他用户知道你的后缀便可以监控你的服务器,所以还是自建服务器比较合适相信本站的用户必定人手一个服务器,所以不在话下,反代软件是traefik,可自行选择删改
安装必须软件包
总有一款适合你
apk add neovim
apt install neovim
dnf install neovim
pacman -S neovim首先创建一个文件夹,比如
mkdir ntfy&&cd ntfy在其中创建traefik的文件夹并写入配置,如下
mkdir proxy
nvim proxy/traefik.yaml
>>>
api:
dashboard: false
# 安全模式
insecure: true
providers:
file:
directory: /etc/traefik/directory
watch: true
entryPoints:
web:
address: ":38080"
websecure:
address: ":38443"
certificatesResolvers:
letsencrypt:
acme:
email: "ssl@domain.com"
storage: "/etc/traefik/acme.json"
httpChallenge:
entryPoint: websecure
middlewares:
hsts:
headers:
stsSeconds: 15552000
stsIncludeSubdomains: truePodman&Docker部署
运行以下脚本哈,一步到位,记得修改你的域名,如果是docker用户将podman改为docker即可,rootless用户需要自行设置高位端口和防火墙规则
nvim run.sh
>>>
#!/bin/bash
podman run -d \
--name ntfy \
--network traefik-network \
-e TZ="Asia/Shanghai" \
-e NTFY_BASE_URL="https://push.yourdomain.com" \
-e NTFY_CACHE_FILE="/var/lib/ntfy/cache.db" \
-e NTFY_AUTH_FILE="/var/lib/ntfy/auth.db" \
-e NTFY_AUTH_DEFAULT_ACCESS="deny-all" \
-e NTFY_BEHIND_PROXY="true" \
-e NTFY_ATTACHMENT_CACHE_DIR="/var/lib/ntfy/attachments" \
-v "./push:/var/lib/ntfy" \
docker.io/binwiederhier/ntfy serve
podman run -d \
--name traefik \
--network traefik-network \
-p 80:38080 \
-p 443:38443 \
-v "./proxy:/etc/traefik" \
docker.io/library/traefik:latestDocker compose
目前podman也是兼容compose的,只是有很多兼容性问题,不建议用哈,使用docker compose可以一步到位,不用在下述再配置反代,运行vim,写入以下文件到compose文件
nvim compose.yml
>>>
# version: '3.8' 最新docker版本弃用了哈
services:
ntfy:
image: docker.io/binwiederhier/ntfy
container_name: ntfy
environment:
- TZ=Asia/Shanghai
- NTFY_BASE_URL=https://push.yourdomain.com
- NTFY_CACHE_FILE=/var/lib/ntfy/cache.db
- NTFY_AUTH_FILE=/var/lib/ntfy/auth.db
- NTFY_AUTH_DEFAULT_ACCESS=deny-all
- NTFY_BEHIND_PROXY=true
- NTFY_ATTACHMENT_CACHE_DIR=/var/lib/ntfy/attachments
volumes:
- ./push:/var/lib/ntfy
labels:
- "traefik.enable=true"
- "traefik.http.routers.nfty.rule=Host(`push.yourdomain.com`)"
- "traefik.http.routers.nfty.service=nety-service"
- "traefik.http.routers.nfty.entrypoints=websecure"
- "traefik.http.routers.nfty.tls.certresolver=letsencrypt"
- "traefik.http.services.nfty-service.loadbalancer.server.port=80"
networks:
- traefik-network
command: serve
traefik:
image: docker.io/library/traefik:latest
container_name: traefik
ports:
- "80:38080"
- "443:38443"
volumes:
- ./proxy:/etc/traefik
networks:
- traefik-network
# 可写可不写,compose会自动创建network
networks:
traefik-network:
driver: bridgeNixOS
使用nixos则较为复杂,目前比较完善的是home-manager的podman module,可以使用rootless的systemd管理使用以下配置,然后运行nixos rebuild即可,会使用nixos的一看就懂
{ config, pkgs, ... }:
let
baseDir = "/home/${your users}/Ntfy";
in
{
services.podman = {
enable = true;
# Networks
networks = {
traefik-network = {
autoStart = true;
};
};
# Containers
containers = {
# Ntfy Push
ntfy = {
image = "docker.io/binwiederhier/ntfy";
autoStart = true;
environment = {
TZ = "Asia/Shanghai";
NTFY_BASE_URL = "https://push.yourdomain.com";
NTFY_CACHE_FILE = "/var/lib/ntfy/cache.db";
NTFY_AUTH_FILE = "/var/lib/ntfy/auth.db";
NTFY_AUTH_DEFAULT_ACCESS = "deny-all";
NTFY_BEHIND_PROXY = "true";
NTFY_ATTACHMENT_CACHE_DIR = "/var/lib/ntfy/attachments";
};
volumes = [ "${baseDir}/push:/var/lib/ntfy" ];
network = [ "traefik-network" ];
exec = "serve";
};
# Traefik Proxy
traefik = {
image = "docker.io/library/traefik:latest";
autoStart = true;
ports = [
"38080:80"
"38443:443" # rootless不允许使用特权端口,需要设置端口转发
];
volumes = [ "${baseDir}/proxy:/etc/traefik" ];
network = [ "traefik-network" ];
};
};
};
}端口转发
# 使用 iptables 进行端口转发
networking.firewall.extraCommands = ''
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 38080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 38443
'';反代
Traefik反代
mkdir proxy/directory/
nvim proxy/directory/ntfy.yml
>>>
http:
routers:
nety:
rule: "Host(`push.yourdomain.com`)"
service: "nety-service"
entryPoints:
- "websecure"
tls:
certResolver: letsencrypt
services:
nety-service:
loadBalancer:
servers:
- url: "http://ntfy"这里注意一下如果要套cf记得开启full tls模式
Nginx反代
deepseek
openai
服务端设置
具体参考官网
创建用户
根据提示创建用户
docker exec ntfy ntfy user --help可以注意到我开启了deny模式,这个模式下不登陆是无法使用我们的服务器的,所以我们需要设置acl规则使unifiedpush可以正常运行
UnifiedPush 要求应用程序服务器(例如 Synapse、Fediverse Server 等)对用于推送消息的主题具有匿名写入访问权限。UnifiedPush 使用的主题名称均以 up* 前缀开头。有关更多详细信息,请参阅 UnifiedPush 文档。
要为私有服务器启用对 UnifiedPush 的支持(即 auth-default-access: "deny-all" ),您应该允许对整个前缀进行匿名写入访问
docker或者podman
docker exec ntfy ntfy access '*' 'up*' write-only或者明确允许每个主题进行匿名写入访问:
docker exec ntfy ntfy access '*' upYzMtZGZiYTY5 write-only客户端布置
不想贴图,纯文字
Ntfy客户端
打开软件,点击右上角,点击设置,点击默认服务器,输入你自己的服务器,点击管理用户,输入你的用户名和密码
TG客户端
这里推荐使用nagram,点击左上角三个杠杠,点击设置,点击N-设置,点击通用,向下翻到最低找到通知推送服务,点击选择unified push即可