无APP推送服务PushDeer的搭建

周六休息了一天,周日继续

无APP推送服务PushDeer的搭建


本文是应网友 水杯与蚂蚁 的要求折腾的;

PushDeer 是什么?

PushDeer 是一个开源的无 APP 推送解决方案,使用 gorush作为推送中间件。其特色包括:「易用」、「可控」和「渐进」。PushDeer 是一个商业开源项目,采用「开放源码」、「自用免费」、「在线服务收费」的方式进行运作。

gorush 是什么?

gorush 是使用 Go (Golang) 编写的 Gin 框架的推送通知微服务器。

申明

【注意】:

  1. 本文只是记录了老苏折腾的过程,不要将这个镜像运用到生产环境,因为老苏没有时间进行测试;
  2. 之所以折腾是因为官方的安装方式虽然简单,但是过程中需要通过 composer 包管理系统安装依赖库,但因为众所周知的原因,存在很大的失败几率;
  3. 老苏只是试图解决安装失败的问题,没有时间深入研究 PushDeer ,相关的问题建议看官方的文档说明;
  4. 以下记录不一定适用于 PushDeer 未来的版本;

所以,如果你按照本文安装后遇到问题,建议改用官方的方式进行安装;你可以通过留言的方式提问,但老苏最近无法保证一定能回复,见谅~

构建镜像

如果你不想自己构建,可以跳过,直接阅读下一章节

官方的 Dockerfiledocker/web 目录下,老苏增加了两行 COPY api ./apiCOPY push ./push

这个 api 不仅仅是源代码中的 api 目录中的内容,老苏还把安装成功后的 vendor 目录放进去了;

和官方的源代码构建相比,好处是你在安装之前不需要先下载源代码,安装过程中也不用从网上下载依赖库

无APP推送服务PushDeer的搭建

所以不存在失败的情况,但是坏处是:

  1. 不能跟随官方使用最新的代码;
  2. 基础镜像 webdevops/php-apache:8.0-alpine 本来就比较大,现在塞进了源代码和依赖库,所以体积更大了,安装完成后有 1.2G
  3. 大概率老苏不会再更新镜像了,想要新版本只能自己动手了 😁,主要是工作忙(其实是懒)。反正老苏已经把都给了大家;

下面的 Dockerfile 是已经修改之后的

FROM webdevops/php-apache:8.0  
  
# 复制 api 和 push 目录到容器内  
COPY api ./api  
COPY push ./push  
  
# 首先配置 vhost  
COPY vhost.conf /opt/docker/etc/httpd/vhost.conf  
# COPY web.vhost.conf /opt/docker/etc/httpd/vhost.common.d/  
  
# 然后运行初始化脚本  
# https://dockerfile.readthedocs.io/en/latest/content/Customization/provisioning.html  
COPY init.sh /opt/docker/provision/entrypoint.d/  
#CMD chmod +x /opt/docker/provision/entrypoint.d/init.sh  
RUN echo "session.save_handler = Redisn" >> /opt/docker/etc/php/php.webdevops.ini  
RUN echo "session.save_path = 'tcp://redis:6379'n" >> /opt/docker/etc/php/php.webdevops.ini  
RUN echo "session.gc_maxlifetime = '259200'n" >> /opt/docker/etc/php/php.webdevops.ini  
  
# ADD supervisord-proxy.conf /opt/docker/etc/supervisor.d/prism-proxy.conf  
RUN mkdir /data  
COPY gorush /data/gorush  
RUN chmod +x /data/gorush   
  
ADD supervisord-ios.conf /opt/docker/etc/supervisor.d/push-ios.conf  
ADD supervisord-clip.conf /opt/docker/etc/supervisor.d/push-clip.conf  
  
ADD larave-cron /etc/cron.d  
RUN chmod +x /etc/cron.d/larave-cron   
  
# 配置 https  
# 在本目录下创建ssl目录,放入证书(server.crt,server.key),然后去掉下一行的注释  
# ADD ssl /app/ssl  
  
EXPOSE 80

另一个需要修改的文件是 init.sh 文件,主要是新增了:

  1. cp -r /api ./app/cp -r /push ./app/ 是把容器内的 apipush代码目录复制到映射的卷;
  2. 增设了国内源,这个作用有限,因为实际上导致失败的原因是有些库在 github 上;
  3. beginend 是老苏为了调试看着方便加的;
#!/bin/bash

# 将容器内的 api 目录复制到 /app 目录中
echo "------begin------"
cp -r /api ./app/
cp -r /push ./app/

# 设置国内源
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

# 初始化 laravel
cd /app/api && composer install && cp -n .env.example .env && php artisan key:generate && php artisan migrate --seed

mkdir -p /app/api/storage
chmod -R 0777 /app/api/storage

mkdir -p /app/api/bootstrap/cache/
chmod -R 0777 /app/api/bootstrap/cache/
echo "------end------"

接下来就可以开始构建了,构建的基本命令如下👇

# 下载代码(国内)
git clone https://gitee.com/easychen/pushdeer.git
  
# 下载代码(国外)
git clone https://github.com/easychen/pushdeer.git
  
# 进入目录  
cd pushdeer/docker/web/

# 复制 api 和 push 到当前目录的 web 目录中
cp -r ../../api ./
cp -r ../../push ./

# 从安装成功的机器上,将 vendor 目录复制到 api 目录中

# 修改 Dockerfile 文件,增加了将 api 目录(包含 vendor 目录)和 push 目录复制容器中的动作;

# 修改 init.sh
## 1、将容器内的 api 目录 复制到 app/api 和 push 目录复制到 app/push 的动作 ;
## 2、增加国内源 https://mirrors.aliyun.com/composer/;

# 构建镜像
docker build -t wbsu2003/pushdeer:v1 .

docker-compose 安装

将下面的内容保存为 docker-compose.yml 文件,这个文件是在官方的 docker-compose.self-hosted.yml 基础上改的

version: '2.1'

services:
  mariadb:
    image: mariadb:10.6
    container_name: pushdeer_mariadb
    healthcheck:
      test: ["CMD", "MySQLadmin", "ping", "--silent","--password=$$MYSQL_ROOT_PASSWORD"]
      timeout: 10s
      retries: 3
    volumes:
      - ./data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=theVeryp@ssw0rd
      - MYSQL_DATABASE=pushdeer
      - MYSQL_USER=pushdeer
      - MYSQL_PASSWORD=123456

  redis: 
    image: redis:6.2
    container_name: pushdeer_redis
    healthcheck:
      test: ["CMD", "redis-cli","ping"]
    environment:
      - ALLOW_EMPTY_PASSWORD=yes 
  
  app:
    image: wbsu2003/pushdeer:latest
    #build: './docker/web/'
    container_name: pushdeer_app
    ports:
      - 8820:80
    volumes:
      - ./app:/app
    depends_on:
      mariadb:
        condition: service_healthy
      redis:
        condition: service_healthy
    environment:
      - DB_HOST=mariadb
      - DB_PORT=3306
      - DB_USERNAME=pushdeer
      - DB_DATABASE=pushdeer
      - DB_PASSWORD=123456
      - GO_PUSH_IOS_TOPIC=com.pushdeer.self.ios
      - GO_PUSH_IOS_CLIP_TOPIC=com.pushdeer.self.ios.Clip
      - APP_DEBUG=true

然后执行下面的命令

# 新建文件夹 pushdeer 和 子目录
mkdir -p /volume2/docker/pushdeer/{app,data}

# 进入 pushdeer 目录
cd /volume2/docker/pushdeer

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

无APP推送服务PushDeer的搭建

如提示 docker服务未安装/找不到/未启动,可在 docker-compose 前加 sudo 再试

运行

虽然不用再下载依赖库,但是启动还是要花点时间的,理论上要在日志中看到 end才行

无APP推送服务PushDeer的搭建

群晖上也可以看到的

无APP推送服务PushDeer的搭建

在浏览器中输入 http://群晖IP:8820 就能看到主界面,如果还是不行,那就多刷几次

无APP推送服务PushDeer的搭建

按照官方的说法,看到这个界面表示容器已经启动。

⚠️ 自架服务器端需每年2月拉取一次更新推送证书

这是官方的提示,至于怎么更新,老苏没去研究

测试

因为 Android 的快应用还在开发,所以老苏测试了 Android APPiphone

Android

Android 客户端下载地址:

  • 国外用户:https://github.com/easychen/pushdeer/releases

  • 国内用户:https://gitee.com/easychen/pushdeer/releases

但是发现不支持自架版,没有找到入口

无APP推送服务PushDeer的搭建

后来发现官方已经关闭了

无APP推送服务PushDeer的搭建

iOS

虽然还不支持 Android 的快应用,但是已经支持 iOS App Clips,老苏借了一台 iphone 测试,只要用摄像头扫描主页的二维码即可

要求  ios14+ 系统

懒得截图,直接盗了官方的动图

无APP推送服务PushDeer的搭建

先注册设备后才可以获得 key

无APP推送服务PushDeer的搭建

然后你可以在浏览器中用后面的地址直接给 iphone 发消息 http://192.168.0.197:8820/message/push?pushkey=<key>&text=要发送的内容

例如:http://192.168.0.197:8820/message/push?pushkey=PDU1TN1WUQ1AbO34A09dhe7D57nuwjES93WSF&text=老苏随便发的

发送成功或者失败,都会有返回值

无APP推送服务PushDeer的搭建

如果是 okiOS 手机上会看到发送的消息

无APP推送服务PushDeer的搭建

因为反复重装调试,所以老苏遇到过下面这样的错误,这是因为注册设备用到了device token,应用一旦重装,device token会变,所以需要重新注册一次

无APP推送服务PushDeer的搭建

API

这个应该是对二次开发有用,官方有 Swagger格式的在线文档:https://ilovintit.github.io/pushdeer-api-doc

无APP推送服务PushDeer的搭建

顶部有个 PushDeerOS.json 的地址,建议将这个文件下载到本地,然后用 API 调试工具,比如 PostmanApiPostApifox,直接导入了下载的 PushDeerOS.json文件

这次老苏用了 Apifox,各种操作所需要的token 可以在日志中获找到

无APP推送服务PushDeer的搭建

参考文档

pushdeer.com
地址:http://pushdeer.com/

pushdeer: 此为PushDeer在国内的镜像仓库,pr和issue请提交到GitHub
地址:https://gitee.com/easychen/pushdeer

appleboy/gorush: A push notification server written in Go (Golang).
地址:https://github.com/appleboy/gorush

@所有人:写文不易,如果你都看到了这里,请点个在看,分享给更多的朋友;为确保你能收到每一篇文章,请主页右上角设置星标。

原文始发于微信公众号(各种折腾):无APP推送服务PushDeer的搭建

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/55526.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!