无APP推送服务PushDeer的搭建
周六休息了一天,周日继续
本文是应网友 水杯与蚂蚁
的要求折腾的;
PushDeer 是什么?
PushDeer
是一个开源的无APP
推送解决方案,使用gorush
作为推送中间件。其特色包括:「易用」、「可控」和「渐进」。PushDeer
是一个商业开源项目,采用「开放源码」、「自用免费」、「在线服务收费」的方式进行运作。
gorush 是什么?
gorush
是使用Go
(Golang
) 编写的Gin
框架的推送通知微服务器。
申明
【注意】:
- 本文只是记录了老苏折腾的过程,不要将这个镜像运用到生产环境,因为老苏没有时间进行测试;
- 之所以折腾是因为官方的安装方式虽然简单,但是过程中需要通过
composer
包管理系统安装依赖库,但因为众所周知的原因,存在很大的失败几率; - 老苏只是试图解决安装失败的问题,没有时间深入研究
PushDeer
,相关的问题建议看官方的文档说明; - 以下记录不一定适用于
PushDeer
未来的版本;
所以,如果你按照本文安装后遇到问题,建议改用官方的方式进行安装;你可以通过留言的方式提问,但老苏最近无法保证一定能回复,见谅~
构建镜像
如果你不想自己构建,可以跳过,直接阅读下一章节
官方的 Dockerfile
在 docker/web
目录下,老苏增加了两行 COPY api ./api
和 COPY push ./push
这个
api
不仅仅是源代码中的api
目录中的内容,老苏还把安装成功后的vendor
目录放进去了;
和官方的源代码构建相比,好处是你在安装之前不需要先下载源代码,安装过程中也不用从网上下载依赖库
所以不存在失败的情况,但是坏处是:
- 不能跟随官方使用最新的代码;
- 基础镜像
webdevops/php-apache:8.0-alpine
本来就比较大,现在塞进了源代码和依赖库,所以体积更大了,安装完成后有1.2G
; - 大概率老苏不会再更新镜像了,想要新版本只能自己动手了 😁,主要是工作忙(其实是懒)。反正老苏已经把
鱼
和渔
都给了大家;
下面的 Dockerfile
是已经修改之后的
1 | FROM webdevops/php-apache:8.0 |
另一个需要修改的文件是 init.sh
文件,主要是新增了:
-
cp -r /api ./app/
和cp -r /push ./app/
是把容器内的api
和push
代码目录复制到映射的卷; - 增设了国内源,这个作用有限,因为实际上导致失败的原因是有些库在
github
上; begin
和end
是老苏为了调试看着方便加的;
1 |
|
接下来就可以开始构建了,构建的基本命令如下👇
1 | # 下载代码(国内) |
docker-compose 安装
将下面的内容保存为 docker-compose.yml
文件,这个文件是在官方的 docker-compose.self-hosted.yml
基础上改的
1 | version: '2.1' |
然后执行下面的命令
1 | # 新建文件夹 pushdeer 和 子目录 |
如提示
docker
服务未安装/找不到/未启动,可在docker-compose
前加sudo
再试
运行
虽然不用再下载依赖库,但是启动还是要花点时间的,理论上要在日志中看到 end
才行
群晖上也可以看到的
在浏览器中输入 http://群晖IP:8820
就能看到主界面,如果还是不行,那就多刷几次
按照官方的说法,看到这个界面表示容器已经启动。
⚠️ 自架服务器端需每年2月拉取一次更新推送证书
这是官方的提示,至于怎么更新,老苏没去研究
测试
因为 Android
的快应用还在开发,所以老苏测试了 Android APP
和 iphone
Android
Android
客户端下载地址:
国外用户:https://github.com/easychen/pushdeer/releases
国内用户:https://gitee.com/easychen/pushdeer/releases
但是发现不支持自架版,没有找到入口
后来发现官方已经关闭了
iOS
虽然还不支持 Android
的快应用,但是已经支持 iOS App Clips
,老苏借了一台 iphone
测试,只要用摄像头扫描主页的二维码即可
要求
ios14+
系统
懒得截图,直接盗了官方的动图
先注册设备后才可以获得 key
然后你可以在浏览器中用后面的地址直接给 iphone
发消息 http://192.168.0.197:8820/message/push?pushkey=<key>&text=要发送的内容
例如:http://192.168.0.197:8820/message/push?pushkey=PDU1TN1WUQ1AbO34A09dhe7D57nuwjES93WSF&text=老苏随便发的
发送成功或者失败,都会有返回值
如果是 ok
,iOS
手机上会看到发送的消息
因为反复重装调试,所以老苏遇到过下面这样的错误,这是因为注册设备用到了device token
,应用一旦重装,device token
会变,所以需要重新注册一次
API
这个应该是对二次开发有用,官方有 Swagger
格式的在线文档:https://ilovintit.github.io/pushdeer-api-doc
顶部有个 PushDeerOS.json
的地址,建议将这个文件下载到本地,然后用 API
调试工具,比如 Postman
、ApiPost
、Apifox
,直接导入了下载的 PushDeerOS.json
文件
这次老苏用了
Apifox
,各种操作所需要的token
可以在日志中获找到
参考文档
pushdeer.com
地址:http://pushdeer.com/pushdeer: 此为PushDeer在国内的镜像仓库,pr和issue请提交到GitHub
地址:https://gitee.com/easychen/pushdeerappleboy/gorush: A push notification server written in Go (Golang).
地址:https://github.com/appleboy/gorush