由于Element/ElementX的默认谷歌推送服务在某些地区并不稳定,经常出现漏信息不推送或是间歇性消息轰炸的问题,遂部署Ntfy推送服务给Element/ElementX使用(ios可能无法修改推送服务),来解决Element不推送或是Element推送存在的网络问题/框架问题

以下教程以安卓设备及ElementX为例

相关资料

Ntfy官方文档:https://docs.ntfy.sh/

UnifiedPush官方文档:https://unifiedpush.org/

Element官方文档:https://ems-docs.element.io/books/element-support/page/using-unified-push-and-ntfy-for-push-notifications

使用Ntfy官方服务

由于Matrix以及Element实现的端到端加密,使用非私有化的官方服务并不是那么难以接受。经过技术的更新,现在已经能够不需要对服务端做更改就使用Ntfy官方的推送服务了

下载Ntfy客户端

首先前往下载Ntfy客户端:

GooglePlay:https://play.google.com/store/apps/details?id=io.heckel.ntfy

F-Droid:https://f-droid.org/en/packages/io.heckel.ntfy/

完成安装后,打开Ntfy客户端并调整设备设置保证Ntfy的后台存活

更改Element推送服务提供者

进入Element的设置-通知-高级设置-Push notification provider,切换推送提供者从Firebase(谷歌)到ntfy

稍等片刻Element完成设置后,Ntfy应当会弹出正在监听1个内容的通知,进入Ntfy客户端,应当能看见一个来自于io.element.android.x的统一推送

此时应当已经可以收到Element的推送

自托管部署Ntfy服务

Ntfy官方为私有化部署提供了几乎所有方式,具体可以前往上文提到的Ntfy官方文档中查看。强烈建议选择更适合自己的部署方式,这里以Ubuntu的直接部署和Docker部署为例

服务端部署

直接部署

在终端中执行以下命令来安装

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://archive.heckel.io/apt/pubkey.txt | sudo gpg --dearmor -o /etc/apt/keyrings/archive.heckel.io.gpg
sudo apt install apt-transport-https
sudo sh -c "echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/archive.heckel.io.gpg] https://archive.heckel.io/apt debian main' \
    > /etc/apt/sources.list.d/archive.heckel.io.list"  
sudo apt update
sudo apt install ntfy
sudo systemctl enable ntfy
sudo systemctl start ntfy

安装完成后,访问服务器服务器ip域名应当可以显示Ntfy的管理面板

Docker部署/配置

使用Docker部署时可以直接通过修改docker-compose文件来更改设置

新建docker-compose.yml文件并写入以下内容,注意参考注释根据实际情况修改

version: '3'
services:
  ntfy:
    image: binwiederhier/ntfy
    restart: unless-stopped
    environment:
      NTFY_BASE_URL: http://ntfy.example.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
      NTFY_ENABLE_LOGIN: true
    volumes:
      - ./:/var/lib/ntfy
    ports:
      - 80:80	# 前一个80改为需要映射到主机的端口
    command: serve

更多Docker的配置内容可以查看官方文档:https://docs.ntfy.sh/config/#__tabbed_2_1

进入docker-compose.yml所在目录运行以下指令来运行:

docker-compose up -d

服务端配置

可以修改/etc/ntfy/server.yml 来修改服务端的设置,以下是最基础的设定,修改base-url为自己的域名

base-url: "http://ntfy.example.com"
cache-file: "/var/cache/ntfy/cache.db"
attachment-cache-dir: "/var/cache/ntfy/attachments"

如果没有反向代理可以不配置以上内容直接使用,反向代理后的的https可能有些问题,如果之后客户端连不上,可以尝试http

客户端部署

下载Ntfy客户端

首先前往下载Ntfy客户端:

GooglePlay:https://play.google.com/store/apps/details?id=io.heckel.ntfy

F-Droid:https://f-droid.org/en/packages/io.heckel.ntfy/

完成安装后,打开Ntfy客户端并调整设备设置保证Ntfy的后台存活

打开Ntfy设置-通用-默认服务器 ,更改为自己服务器的地址。如需还原成官方地址,清空保存即可

更改Element推送服务提供者

进入Element的设置-通知-高级设置-Push notification provider,切换推送提供者从Firebase(谷歌)到ntfy

稍等片刻Element完成设置后,Ntfy应当会弹出正在监听1个内容的通知,进入Ntfy客户端,应当能看见一个来自于io.element.android.x的统一推送

此时应当已经可以收到Element的推送