本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

基于Go语言(Golang)的Gin框架开发的推送通知微服务器。
gorush是一个轻量级的推送通知服务器,支持iOS(APNS)和Android(FCM/GCM)平台,提供高性能的推送服务。该服务器采用Go语言开发,使用Gin框架构建RESTful API,支持多平台推送、消息队列、统计监控等功能,适用于需要向移动设备发送推送通知的应用服务。
可从发布页面下载预编译二进制文件。
使用Go安装:
$ go get -u -v github.com/appleboy/gorush
Linux系统:
$ wget [***] -O gorush
OS X系统:
$ wget [***] -O gorush
Windows系统:
$ wget [***] -O gorush.exe
________ .__ / _____/ ____ _______ __ __ ______| |__ / \ ___ / _ \\_ __ \| | \/ ___/| | \ \ \_\ \( <_> )| | \/| | /\___ \ | Y \ \______ / \____/ |__| |____//____ >|___| / \/ \/ \/ Usage: gorush [options] 服务器选项: -p, --port <port> 客户端连接端口 (默认: 8088) -c, --config <file> 配置文件路径 -m, --message <message> 通知消息内容 -t, --token <token> 设备令牌 --title <title> 通知标题 --proxy <proxy> 代理URL (仅用于GCM) --pid <pid path> 进程ID文件路径 iOS选项: -i, --key <file> 证书密钥文件路径 -P, --password <password> 证书密钥密码 --topic <topic> iOS主题 --ios 启用iOS推送 (默认: false) --production iOS生产环境模式 (默认: false) Android选项: -k, --apikey <api_key> Android API密钥 --android 启用Android推送 (默认: false) 通用选项: -h, --help 显示帮助信息 -v, --version 显示版本信息
使用以下命令发送单条Android通知:
$ gorush -android -m="通知消息内容" -k="API密钥" -t="设备令牌"
参数说明:
-m: 通知消息内容-k: Firebase Cloud Messaging API密钥-t: 设备令牌--title: 通知标题--proxy: 设置HTTP代理URL(仅用于GCM)使用以下命令发送单条iOS通知:
$ gorush -ios -m="通知消息内容" -i="证书文件路径" -t="设备令牌" -topic="APNs主题"
参数说明:
-m: 通知消息内容-i: Apple推送通知证书路径(pem或p12文件)-t: 设备令牌--title: 通知标题--topic: 远程通知主题--password: 证书密码默认使用APNs开发环境。如需使用生产环境,请添加-production标志:
$ gorush -ios -m="通知消息内容" -i="证书文件路径" -t="设备令牌" -production
确保配置文件存在(默认config.yml),默认端口为8088:
$ gorush -c config.yml
使用httpie工具获取API服务器状态:
$ http -v --verify=no --json GET https://localhost:8088/api/stat/go
gorush提供以下API端点:
/api/stat/go - 获取Golang运行时信息(cpu, 内存, gc等)/api/stat/app - 获取通知成功和失败统计/api/config - 获取服务器配置信息/sys/stats - 获取系统状态和性能统计/metrics - 获取Prometheus指标/api/push - 发送推送通知返回Golang运行时信息,HTTP状态码200:
{ "time": 1460686815848046600, "go_version": "go1.6.1", "go_os": "darwin", "go_arch": "amd64", "cpu_num": 4, "goroutine_num": 15, "gomaxprocs": 4, "cgo_call_num": 1, "memory_alloc": 7455192, "memory_total_alloc": 8935464, "memory_sys": ***, "memory_lookups": 17, "memory_mallocs": 31426, "memory_frees": ***, "memory_stack": 524288, "heap_alloc": 7455192, "heap_sys": 8912896, "heap_idle": 909312, "heap_inuse": 8003584, "heap_released": 0, "heap_objects": ***, "gc_next": 9754725, "gc_last": 1460686815762559700, "gc_num": 2, "gc_per_second": 0, "gc_pause_per_second": 0, "gc_pause": [ 0.326576, 0.227096 ] }
返回通知成功和失败统计信息:
{ "version": "v1.6.2", "queue_max": 8192, "queue_usage": 0, "total_count": 77, "ios": { "push_success": 19, "push_error": 38 }, "android": { "push_success": 10, "push_error": 10 } }
返回系统状态和性能统计:
{ "pid": 80332, "uptime": "1m42.428010614s", "uptime_sec": 102.428010614, "time": "2016-06-26 12:27:11.675973571 +0800 CST", "unixtime": ***, "status_code_count": { }, "total_status_code_count": { "200": 5 }, "count": 0, "total_count": 5, "total_response_time": "10.422441ms", "total_response_time_sec": 0.010422441000000001, "average_response_time": "2.084488ms", "average_response_time_sec": 0.0020844880000000002 }
返回Prometheus监控指标,可用于系统监控和告警。
发送推送通知的主要API端点。请求体需包含notifications数组,每个元素代表一个推送任务。
每个通知对象支持以下参数:
| 参数名 | 类型 | 描述 | 是否必需 | 备注 |
|---|---|---|---|---|
| tokens | 字符串数组 | 设备令牌列表 | 是 | |
| platform | 整数 | 平台类型(iOS=1, Android=2) | 是 | 1=iOS, 2=Android |
| message | 字符串 | 通知消息内容 | 否 | |
| title | 字符串 | 通知标题 | 否 | |
| priority | 字符串 | 消息优先级 | 否 | normal或high |
| content_available | 布尔值 | 数据消息是否唤醒应用 | 否 | |
| sound | 字符串 | 通知提示音类型 | 否 | |
| data | 对象 | 自定义数据 | 否 | |
| retry | 整数 | 失败重试次数 | 否 | 需小于配置中的max_retry值 |
| api_key | 字符串 | Android API密钥 | 否 | 仅Android |
| to | 字符串 | 目标设备令牌、通知密钥或主题 | 否 | 仅Android |
| collapse_key | 字符串 | 通知折叠键 | 否 | 仅Android |
| delay_while_idle | 布尔值 | 设备空闲时延迟发送 | 否 | 仅Android |
| time_to_live | 整数 | 消息在GCM存储的过期时间 | 否 | 仅Android |
| restricted_package_name | 字符串 | 应用包名 | 否 | 仅Android |
| dry_run | 布尔值 | 测试请求不实际发送 | 否 | 仅Android |
| notification | 对象 | GCM消息负载 | 否 | 仅Android |
| expiration | 整数 | 通知过期时间 | 否 | 仅iOS |
| apns_id | 字符串 | 通知唯一标识符 | 否 | 仅iOS |
| topic | 字符串 | 远程通知主题 | 否 | 仅iOS |
| badge | 整数 | 应用图标 badge 数量 | 否 | 仅iOS |
| category | 字符串 | 通知分类 | 否 | 仅iOS |
| alert | 对象 | iOS通知内容 | 否 | 仅iOS |
iOS通知alert对象支持以下参数:
| 参数名 | 类型 | 描述 | 是否必需 |
|---|---|---|---|
| title | 字符串 | 标题 | 否 |
| body | 字符串 | 消息内容 | 否 |
| subtitle | 字符串 | 副标题 | 否 |
| action | 字符串 | 操作按钮标签 | 否 |
| action-loc-key | 字符串 | 操作按钮本地化键 | 否 |
| launch-image | 字符串 | 启动图片文件名 | 否 |
| loc-args | 字符串数组 | 本地化参数 | 否 |
| loc-key | 字符串 | 本地化键 | 否 |
| title-loc-args | 字符串数组 | 标题本地化参数 | 否 |
| title-loc-key | 字符串 | 标题本地化键 | 否 |
Android通知对象支持以下参数:
| 参数名 | 类型 | 描述 | 是否必需 |
|---|---|---|---|
| icon | 字符串 | 通知图标 | 否 |
| tag | 字符串 | 通知标签 | 否 |
| color | 字符串 | 图标颜色,格式#rrggbb | 否 |
| click_action | 字符串 | 点击通知的动作 | 否 |
| body_loc_key | 字符串 | 内容本地化键 | 否 |
| body_loc_args | 字符串 | 内容本地化参数 | 否 |
| title_loc_key | 字符串 | 标题本地化键 | 否 |
| title_loc_args | 字符串 | 标题本地化参数 | 否 |
发送普通iOS通知:
{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 1, "message": "Hello World iOS!" } ] }
带alert和badge的iOS通知:
{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 1, "badge": 5, "alert": { "title": "游戏邀请", "body": "Bob想和你玩扑克", "action-loc-key": "PLAY" } } ] }
带自定义数据的iOS通知:
{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 1, "message": "Hello World iOS!", "data": { "key1": "welcome", "key2": 2 } } ] }
发送普通Android通知:
{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 2, "message": "Hello World Android!", "title": "您有新消息" } ] }
带notification payload的Android通知:
{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 2, "message": "Hello World Android!", "title": "您有新消息", "notification": { "icon": "myicon", "color": "#***" } } ] }
带自定义数据的Android通知:
{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 2, "message": "Hello World Android!", "title": "您有新消息", "data": { "Nick": "Mario", "body": "精彩比赛!", "Room": "PortugalVSDenmark" } } ] }
发送多条不同平台的通知:
{ "notifications": [ { "tokens": ["token_a", "token_b"], "platform": 1, "message": "Hello World iOS!" }, { "tokens": ["token_c", "token_d"], "platform": 2, "message": "Hello World Android!" } ] }
成功响应:
{ "success": "ok" }
错误响应状态码:
| 状态码 | 消息 | 说明 |
|---|---|---|
| 400 | Missing notifications field. | 请求缺少notifications字段 |
| 400 | Notifications field is empty. | notifications字段为空 |
| 400 | Number of notifications(50) over limit(10) | 通知数量超过限制 |
gorush使用YAML格式的配置文件,默认路径为
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429