Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/caomeiyouren/push-all-in-cloud
基于 push-all-in-one 和 hono 开发的云函数推送服务。支持 nodejs/docker/vercel 等多种部署方式
https://github.com/caomeiyouren/push-all-in-cloud
docker hono nodejs notifications push push-notifications vercel
Last synced: about 2 months ago
JSON representation
基于 push-all-in-one 和 hono 开发的云函数推送服务。支持 nodejs/docker/vercel 等多种部署方式
- Host: GitHub
- URL: https://github.com/caomeiyouren/push-all-in-cloud
- Owner: CaoMeiYouRen
- License: agpl-3.0
- Created: 2024-07-03T12:17:12.000Z (6 months ago)
- Default Branch: master
- Last Pushed: 2024-10-21T11:55:54.000Z (2 months ago)
- Last Synced: 2024-10-21T17:10:10.621Z (2 months ago)
- Topics: docker, hono, nodejs, notifications, push, push-notifications, vercel
- Language: TypeScript
- Homepage: https://push.cmyr.dev
- Size: 472 KB
- Stars: 4
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
push-all-in-cloud
> 基于 push-all-in-one 和 hono 开发的云函数推送服务。支持 nodejs/docker/vercel 等部署方式
## 🏠 主页
[https://github.com/CaoMeiYouRen/push-all-in-cloud#readme](https://github.com/CaoMeiYouRen/push-all-in-cloud#readme)
## 📦 依赖要求
- node >=18
- pnpm >= 9## 🚀 部署
### Vercel 部署(推荐)
点击以下按钮一键部署到 Vercel。
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FCaoMeiYouRen%2Fpush-all-in-cloud.git)
### Docker 镜像
支持两种注册表:
- Docker Hub: [`caomeiyouren/push-all-in-cloud`](https://hub.docker.com/r/caomeiyouren/push-all-in-cloud)
- GitHub: [`ghcr.io/caomeiyouren/push-all-in-cloud`](https://github.com/CaoMeiYouRen/push-all-in-cloud/pkgs/container/push-all-in-cloud)支持以下架构:
- `linux/amd64`
- `linux/arm64`有以下几种 tags:
| Tag | 描述 | 举例 |
| :------------- | :------- | :------------ |
| `latest` | 最新 | `latest` |
| `{YYYY-MM-DD}` | 特定日期 | `2024-06-07` |
| `{sha-hash}` | 特定提交 | `sha-0891338` |
| `{version}` | 特定版本 | `1.2.3` |### Docker Compose 部署
下载 [docker-compose.yml](https://github.com/CaoMeiYouRen/push-all-in-cloud/blob/master/docker-compose.yml)
```sh
wget https://raw.githubusercontent.com/CaoMeiYouRen/push-all-in-cloud/refs/heads/master/docker-compose.yml
```检查有无需要修改的配置
```sh
vim docker-compose.yml # 也可以是你喜欢的编辑器
```> 在公网部署时请务必修改 AUTH_PUSH_KEY、AUTH_FORWARD_KEY 环境变量
>启动
```sh
docker-compose up -d
```在浏览器中打开 `http://{Server IP}:3000` 即可查看结果
### Node.js 部署
确保本地已安装 Node.js 和 pnpm。
```sh
# 下载源码
git clone https://github.com/CaoMeiYouRen/push-all-in-cloud.git --depth=1
cd push-all-in-cloud
# 安装依赖
pnpm i --frozen-lockfile
# 构建项目
pnpm build
# 启动项目
pnpm start
```在浏览器中打开 `http://{Server IP}:3000` 即可查看结果
## 👨💻 使用
如果在本地部署,基础路径为 `http://localhost:3000`
在服务器或云函数部署则为 `http(s)://{Server IP}`。
例如:
如果基础路径为 `https://example.vercel.app`,则 `/push` 的完整路径为 `https://example.vercel.app/push`
### 接口说明
| 路径 | 请求方法 | 请求格式 | 请求内容 | 响应内容 | 说明 |
| -------- | -------- | ---------------- | ----------- | --------------- | ------------------------------------------------------------ |
| /push | POST | application/json | PushBody | PushResponse | 将消息推送到服务端配置的多个推送渠道。使用本方式需要配置环境变量 |
| /forward | POST | application/json | ForwardBody | ForwardResponse | 将消息转发到目标推送渠道。使用本方式无需配置环境变量,但需要在推送时设置推送渠道 |```ts
type PushBody = {
title: string
desp?: string
}type PushType = "ServerChanTurbo" | "Dingtalk" | "CustomEmail" | "WechatRobot" | "WechatApp" | "PushPlus" | "IGot" | "Qmsg" | "XiZhi" | "PushDeer" | "Discord" | "Telegram" | "OneBot"
type ForwardBody = {
title: string
desp?: string
type: PushType
// config 相关配置请参考下文的环境变量配置
config: Record
}type PushResponse = {
message: string
data: PromiseSettledResult, 'data' | 'headers' | 'status' | 'statusText'>>[]
}type ForwardResponse = {
message: string
data: Pick, 'data' | 'headers' | 'status' | 'statusText'>
}
```### /push 接口调用例子
```ts
// 注意:/push 接口需要先配置环境变量!!!
const url = 'http://your-server-address/push'; // 请将 http://your-server-address 替换为真实地址!
const authToken = 'your-auth-push-key'; // 请将 your-auth-push-key 替换为真实 AUTH_PUSH_KEYconst payload = {
title: '测试推送标题',
desp: '这是测试推送的内容'
};fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${authToken}`
},
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```### /forward 接口调用例子
```ts
const url = 'http://your-server-address/forward'; // 请将 http://your-server-address 替换为真实地址!
const authToken = 'your-auth-forward-key'; // 请将 your-auth-forward-key 替换为真实 AUTH_FORWARD_KEYconst payload = {
title: '测试推送标题',
desp: '这是测试推送的内容',
type: 'Telegram', // 选择推送渠道,例如 Telegram
config: {
TELEGRAM_BOT_TOKEN: 'your-telegram-bot-token',
TELEGRAM_CHAT_ID: 'your-telegram-chat-id'
}
};fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${authToken}`
},
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
```### 环境变量配置
| 环境变量 | 说明 |
| ----------------------- | ------------------------------------------------------------ |
| PORT | 运行端口 |
| AUTH_PUSH_KEY | 【建议设置】访问 /push 路由,执行推送请求需要的 key。验证方式为 `Bearer Auth`。由于该路由需要在环境变量配置推送渠道,所以不设置该项将有接口被盗刷的风险。 |
| AUTH_FORWARD_KEY | 访问 /forward 路由,执行转发推送需要的 key。验证方式为 `Bearer Auth`。 |
| SCTKEY | Server 酱·Turbo SCTKEY。官方文档:https://sct.ftqq.com/ |
| SERVER_CHAN_V3_KEY | Server 酱³ 的 sendkey。官方文档:https://sc3.ft07.com/doc |
| EMAIL_AUTH_USER | 自定义邮箱。发件邮箱 |
| EMAIL_AUTH_PASS | 发件授权码(或密码) |
| EMAIL_HOST | 发件域名 |
| EMAIL_PORT | 发件端口 |
| EMAIL_TO_ADDRESS | 收件邮箱 |
| DINGTALK_ACCESS_TOKEN | 【推荐】钉钉机器人 access_token。官方文档:https://developers.dingtalk.com/document/app/custom-robot-access |
| DINGTALK_SECRET | 钉钉机器人加签安全秘钥(HmacSHA256) |
| WX_ROBOT_KEY | 企业微信群机器人。官方文档:https://work.weixin.qq.com/help?person_id=1&doc_id=13376 |
| WX_ROBOT_MSG_TYPE | 消息类型,默认 `text` |
| WX_APP_CORPID | 【推荐】企业微信企业 ID,获取方式参考 https://work.weixin.qq.com/api/doc/90000/90135/91039#14953/corpid |
| WX_APP_AGENTID | 企业应用的 id。企业内部开发,可在应用的设置页面查看 |
| WX_APP_SECRET | 应用的凭证密钥,获取方式参考:https://work.weixin.qq.com/api/doc/90000/90135/91039#14953/secret |
| WX_APP_USERID | 指定接收消息的成员。若不指定则默认为 ”@all”。 |
| PUSH_PLUS_TOKEN | pushplus 推送加开放平台。官方文档:http://pushplus.hxtrip.com/doc/ |
| PUSH_PLUS_TEMPLATE_TYPE | 发送消息模板,默认为 html |
| PUSH_PLUS_CHANNEL_TYPE | 发送渠道,默认为 wechat |
| I_GOT_KEY | iGot 推送,官方文档:https://wahao.github.io/Bark-MP-helper |
| QMSG_KEY | Qmsg 酱 推送,官方文档:https://qmsg.zendee.cn |
| XI_ZHI_KEY | 息知 推送,官方文档:https://xz.qqoq.net/#/index |
| PUSH_DEER_PUSH_KEY | 【推荐】PushDeer 推送,官方文档:https://github.com/easychen/pushdeer |
| DISCORD_WEBHOOK | 【推荐】Discord Webhook Url 可在服务器设置 -> 整合 -> Webhook -> 创建 Webhook 中获取。官方文档:https://support.discord.com/hc/zh-tw/articles/228383668-%E4%BD%BF%E7%94%A8%E7%B6%B2%E7%B5%A1%E9%89%A4%E6%89%8B-Webhooks- |
| DISCORD_USERNAME | 机器人显示的名称 |
| TELEGRAM_BOT_TOKEN | 【推荐】Telegram Bot 机器人令牌。您可以从 https://t.me/BotFather 获取 Token。官方文档:https://core.telegram.org/bots/api#making-requests |
| TELEGRAM_CHAT_ID | 支持对话/群组/频道的 Chat ID。您可以转发消息到 https://t.me/JsonDumpBot 获取 Chat ID |
| ONE_BOT_BASE_URL | OneBot 推送。OneBot HTTP 基础路径。官方文档:https://github.com/botuniverse/onebot-11 |
| ONE_BOT_ACCESS_TOKEN | OneBot AccessToken |
| ONE_BOT_MSG_TYPE | 消息类型 |
| ONE_BOT_RECIEVER_ID | 用户/群组 ID,即 QQ 号或群号 |## 🛠️ 开发
```sh
npm run dev
```## 🔧 编译
```sh
npm run build
```## 🔍 Lint
```sh
npm run lint
```## 👤 作者
**CaoMeiYouRen**
* Website: [https://blog.cmyr.ltd/](https://blog.cmyr.ltd/)
* GitHub: [@CaoMeiYouRen](https://github.com/CaoMeiYouRen)
## 🤝 贡献
欢迎 贡献、提问或提出新功能!
如有问题请查看 [issues page](https://github.com/CaoMeiYouRen/push-all-in-cloud/issues).
贡献或提出新功能可以查看[contributing guide](https://github.com/CaoMeiYouRen/push-all-in-cloud/blob/master/CONTRIBUTING.md).## 💰 支持
如果觉得这个项目有用的话请给一颗⭐️,非常感谢
## 🌟 Star History
[![Star History Chart](https://api.star-history.com/svg?repos=CaoMeiYouRen/push-all-in-cloud&type=Date)](https://star-history.com/#CaoMeiYouRen/push-all-in-cloud&Date)
## 📝 License
Copyright © 2024 [CaoMeiYouRen](https://github.com/CaoMeiYouRen).
This project is [AGPL-3.0](https://github.com/CaoMeiYouRen/push-all-in-cloud/blob/master/LICENSE) licensed.***
_This README was generated with ❤️ by [cmyr-template-cli](https://github.com/CaoMeiYouRen/cmyr-template-cli)_