Skip to content

Joclto/InfoPush

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

InfoPush

English Stars

自建、轻量的消息推送服务

HTTP 接口推送 + WebSocket 实时送达 · Android / Windows 多端覆盖

Release GHCR License Last Commit

FastAPI Kotlin Tauri PostgreSQL

快速入口 · 🌐 在线体验 · ⬇️ 下载客户端 · 🐳 Docker 镜像 · 📖 API 文档

InfoPush Architecture

免费公共服务

提供一个免费公共服务端供大家试用:

服务地址http://124.222.143.179:8000

  • API 文档:http://124.222.143.179:8000/docs
  • 无需自行部署,在客户端登录页面填入上述地址即可使用
  • 服务仅供体验,请勿用于生产环境

项目结构

InfoPush/
├── server/          # 后端服务(FastAPI + PostgreSQL)
├── app/             # Android 客户端(Kotlin + Jetpack Compose)
└── desktop/         # Windows 桌面客户端(Tauri v2 + Rust)

功能特性

  • 用户注册 / 登录,JWT 鉴权
  • 每个用户拥有唯一 Push Token,支持重置
  • 支持 POST / GET 两种方式推送消息
  • 消息类型:text / markdown / html
  • WebSocket 实时推送,含心跳保活
  • 消息持久化存储,支持分页查询与已读标记
  • Docker Compose 一键部署(FastAPI + PostgreSQL + Nginx)

快速开始

使用预构建镜像(推荐)

每次发布版本会自动构建 Docker 镜像并推送到 GitHub Container Registry:

# 拉取最新版本
docker pull ghcr.io/joclto/infopush:latest

# 或指定版本
docker pull ghcr.io/joclto/infopush:0.1.0

镜像仅包含 API 服务,仍需配合 PostgreSQL 使用。可参考下方 docker-compose.yml 部署。

Windows 桌面客户端

前往 Releases 页面 下载最新安装包。

后端部署(Docker Compose)

cd server

# 复制环境变量配置
cp .env.example .env
# 编辑 .env,至少修改 SECRET_KEY

# 启动服务
docker compose up -d

服务默认监听 http://localhost:8000,API 文档见 http://localhost:8000/docs

本地开发(不使用 Docker)

cd server

# 安装依赖
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt

# 配置环境变量
cp .env.example .env

# 启动服务
python -m app.main

Android 客户端

使用 Android Studio 打开 app/ 目录,修改服务器地址后编译安装即可。

Windows 桌面客户端

cd desktop

# 安装前端依赖
pnpm install

# 开发模式
pnpm tauri dev

# 构建安装包
pnpm tauri build

需要预先安装:Rust、Node.js 20+、pnpm、Visual Studio Build Tools(C++ 桌面开发工作负载)。

桌面客户端功能:

  • 登录 / 注册,支持服务器地址记忆
  • 消息列表实时更新,已读 / 未读区分
  • 消息详情(text / markdown / html 渲染,XSS 防护)
  • 标记已读 / 全部已读
  • 试一试:三种模板(文本 / Markdown / 链接)自定义推送
  • 系统托盘常驻,关闭最小化到托盘
  • Windows Toast 通知
  • 自动登录,退出登录
  • Push Token 一键复制

推送 API

注册 / 登录

POST /api/auth/register
Content-Type: application/json

{"username": "alice", "password": "123456"}

登录成功返回 access_tokenpush_tokenpush_token 用于推送消息。

发送推送(POST)

POST /push/{push_token}
Content-Type: application/json

{
  "title": "标题",
  "content": "消息内容",
  "content_type": "text",
  "url": "https://example.com"
}

发送推送(GET,适合 curl / 浏览器)

GET /push/{push_token}?title=标题&content=消息内容

推送响应示例

{
  "code": 200,
  "msg": "推送成功",
  "message_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "online_devices": 1
}

若设备离线,消息仍会持久化存储,客户端上线后可主动拉取。

消息 API

方法 路径 说明
GET /api/messages 分页获取消息列表
GET /api/messages/{id} 获取单条消息
PUT /api/messages/{id}/read 标记已读
PUT /api/messages/read-all 全部标记已读

所有消息接口需在 Header 中携带 Authorization: Bearer {access_token}

WebSocket

客户端通过 WebSocket 订阅实时消息:

ws://your-server/ws/{push_token}

服务端每 30 秒发送一次 ping,客户端需回复 pong,90 秒内无响应则断开连接。

环境变量

变量 说明 默认值
DATABASE_URL PostgreSQL 连接串
SECRET_KEY JWT 签名密钥(生产环境必须修改)
ACCESS_TOKEN_EXPIRE_MINUTES Token 有效期(分钟) 10080(7天)
HOST 监听地址 0.0.0.0
PORT 监听端口 8000

技术栈

后端

  • Python 3.12 / FastAPI / Uvicorn
  • SQLAlchemy 2.0(async)+ PostgreSQL
  • JWT(python-jose)+ bcrypt(passlib)
  • WebSocket(内置 FastAPI)
  • Docker / Docker Compose / Nginx

Android

  • Kotlin / Jetpack Compose
  • Room 数据库
  • OkHttp / Retrofit
  • WebSocket 长连接

Windows 桌面

  • Tauri v2(Rust + WebView2)
  • Rust(reqwest / tokio-tungstenite / serde)
  • TypeScript / HTML / CSS
  • marked + DOMPurify

License

MIT

About

Self-hosted message push service with HTTP push + WebSocket real-time delivery. Supports Android, Windows desktop, Docker deployment.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages