演示请前往官网体验(谢绝灌水)
🛠 技术栈
PaoPao主要由以下优秀的开源项目/工具构建
后端:
前端:
🏗 快速开始
环境要求
- Go (1.18+)
- Node.js (14+)
- MySQL (5.7+)
- Redis
- Zinc
Zinc是一款轻量级全文搜索引擎,可以查阅 https://zincsearch.com/ 安装
以上环境版本为PaoPao官方的开发版本,仅供参考,其他版本的环境未进行充分测试
安装说明
方式一. 手动安装(推荐)
克隆代码库
git clone https://github.com/rocboss/paopao-ce.git
后端
-
导入项目根目录下的
scripts/paopao.sql
文件至MySQL数据库 -
拷贝项目根目录下
config.yaml.sample
文件至config.yaml
,按照注释完成配置编辑 -
编译后端
编译api服务:make build
编译api服务、内嵌web前端ui:
make build TAGS='embed'
编译后在
release
目录可以找到对应可执行文件。release/paopao-ce
-
直接运行后端
运行api服务:make run
运行api服务、web前端ui服务:
make run TAGS='embed'
提示: 如果需要内嵌web前端ui,请先构建web前端(建议设置web/.env为VITE_HOST="")。
-
使用内置的Migrate机制自动升级维护SQL DDL:
# 添加 Migration 功能到 Features 中 开启migrate功能 vim config.yaml # file: config.yaml # Features: # Default: ["Base", "MySQL", "Zinc", "MinIO", "LoggerZinc", "Migration"] # 编译时加入migration tag编译出支持migrate功能的可执行文件 make build TAGS='migration' release/paopao-ce # 或者 带上migration tag直接运行 make run TAGS='migration'
注意:默认编译出来的可执行文件是不内置migrate功能,需要编译时带上migration tag才能内置支持migrage功能。
前端
-
进入前端目录
web
,拷贝.env
到.env.local
,编辑.env.local
文件中后端服务地址及其他配置项,下载依赖包cd ./web && cp .env .env.local vim .env.local yarn
-
编译前端
yarn build
build完成后,可以在dist目录获取编译产出,配置nginx指向至该目录即可
桌面端
-
进入前端目录
web
,拷贝.env
到.env.local
,编辑.env.local
文件中后端服务地址及其他配置项,下载依赖包cd ./web && cp .env .env.local vim .env.local yarn
-
编译前端
yarn build
-
构建桌面端
yarn tauri build
桌面端是使用Rust + tauri编写 的,需要安装tauri的依赖,具体参考https://tauri.studio/v1/guides/getting-started/prerequisites.
开发文档
Docs文档说明
docs
目录提供了各种开发文档,包括:
- deploy - paopao-ce部署文档
- discuss - 开发相关的问题交流论述文档
- openapi - paopao-ce后端导出API文档
- proposal - paopao-ce功能特性提按文档
比如,关于paopao-ce的设计定位,可以参考docs/proposal/001-关于paopao-ce的设计定位,简要阐述了paopao-ce是如何定位自身的。
API文档
开发者可以在本地开启Docs
服务,浏览后端导出的API服务接口文档。
config.yaml
添加Docs
功能项:
...
Features:
Default: ["Base", "MySQL", "Option", "LocalOSS", "LoggerFile", "Docs"]
Docs: ["Docs:OpenAPI"]
...
- 构建时将
docs
添加到TAGS中:
make run TAGS='docs'
# visit http://127.0.0.1:8011/docs/openapi
配置说明
config.yaml.sample
是一份完整的配置文件模版,paopao-ce启动时会读取./custom/config.yaml
、./config.yaml
任意一份配置文件(优先读取最先找到的文件)。
cp config.yaml.sample config.yaml
vim config.yaml # 修改参数
paopao-ce
配置文件中的 Features
小节是声明paopao-ce运行时开启哪些功能项:
...
Features:
Default: ["Base", "MySQL", "Option", "LocalOSS", "LoggerFile"]
Develop: ["Base", "MySQL", "Option", "Sms", "AliOSS", "LoggerZinc"]
Demo: ["Base", "MySQL", "Option", "Sms", "MinIO", "LoggerZinc"]
Slim: ["Base", "Sqlite3", "LocalOSS", "LoggerFile"]
Base: ["Zinc", "Redis", "Alipay",]
Option: ["SimpleCacheIndex"]
Sms: "SmsJuhe"
...
如上: Default/Develop/Demo/Slim 是不同 功能集套件(Features Suite), Base/Option 是子功能套件, Sms是关于短信验证码功能的参数选项。
这里 Default
套件 代表的意思是: 使用Base/Option
中的功能,外加 MySQL/LocalOSS/LoggerFile
功能,也就是说开启了Zinc/Redis/Alipay/SimpleCacheIndex/MySQL/LocalOSS/LoggerFile
7项功能; Develop
套件依例类推。
使用Feautures:
release/paopao-ce --help
Usage of release/paopao-ce:
-features value
use special features
-no-default-features
whether use default features
# 默认使用 Default 功能套件
release/paopao-ce
# 不包含 default 中的功能集,仅仅使用 develop 中声明的功能集
release/paopao-ce --no-default-features --features develop
# 使用 default 中的功能集,外加 sms 功能
release/paopao-ce --features sms
# 手动指定需要开启的功能集
release/paopao-ce --no-default-features --features sqlite3,localoss,loggerfile,redis
目前支持的功能集合:
功能项 | 类别 | 状态 | 备注 |
---|---|---|---|
Web |
子服务 | 内测 | 开启Web服务 |
Admin |
子服务 | WIP | 开启Admin后台运维服务 |
SpaceX |
子服务 | WIP | 开启SpaceX服务 |
Bot |
子服务 | WIP | 开启Bot服务 |
NativeOBS |
子服务 | WIP | 开启NativeOBS服务 |
Docs |
子服务 | WIP | 开启开发者文档服务 |
Frontend:Web |
子服务 | 稳定 | 开启独立前端服务 |
Frontend:EmbedWeb |
子服务 | 稳定 | 开启内嵌于后端Web API服务中的前端服务 |
Deprecated:Web |
子服务 | 稳定 | 开启旧的Web服务 |
Gorm |
数据库 | 稳定(默认) | 使用gorm作为数据库的ORM,默认使用 Gorm + MySQL 组合 |
Sqlx |
数据库 | WIP | 使用sqlx作为数据库的ORM |
Sqlc |
数据库 | WIP | 使用sqlc自动生成ORM代码 |
MySQL |
数据库 | 稳定(默认) | 使用MySQL作为数据库 |
Postgres |
数据库 | 稳定 | 使用PostgreSQL作为数据库 |
Sqlite3 |
数据库 | 稳定 | 使用Sqlite3作为数据库 |
AliOSS |
对象存储 | 稳定(推荐) | 阿里云对象存储服务 |
COS |
对象存储 | 内测 | 腾讯云对象存储服务 |
HuaweiOBS |
对象存储 | 内测 | 华为云对象存储服务 |
MinIO |
对象存储 | 稳定 | MinIO对象存储服务 |
S3 |
对象存储 | 内测 | AWS S3兼容的对象存储服务 |
LocalOSS |
对象存储 | 内测 | 提供使用本地目录文件作为对象存储的功能,仅用于开发调试环境 |
OSS:Retention |
对象存储 | 内测 | 基于对象存储系统的对象过期自动删除特性实现 先创建临时对象再持久化的功能 |
OSS:TempDir |
对象存储 | 内测 | 基于对象存储系统的对象拷贝/移动特性实现 先创建临时对象再持久化的功能 |
Redis |
缓存 | 稳定 | Redis缓存功能 |
SimpleCacheIndex |
缓存 | Deprecated | 提供简单的 广场推文列表 的缓存功能 |
BigCacheIndex |
缓存 | 稳定(推荐) | 使用BigCache缓存 广场推文列表,缓存每个用户每一页,简单做到千人千面 |
Zinc |
搜索 | 稳定(推荐) | 基于Zinc搜索引擎提供推文搜索服务 |
Meili |
搜索 | 稳定(推荐) | 基于Meilisearch搜索引擎提供推文搜索服务 |
Bleve |
搜索 | WIP | 基于Bleve搜索引擎提供推文搜索服务 |
LoggerFile |
日志 | 稳定 | 使用文件写日志 |
LoggerZinc |
日志 | 稳定(推荐) | 使用Zinc写日志 |
LoggerMeili |
日志 | 内测 | 使用Meilisearch写日志 |
Friendship |
关系模式 | 内测 | 弱关系好友模式,类似微信朋友圈 |
Followship |
关系模式 | WIP | 关注者模式,类似Twitter的Follow模式 |
Lightship |
关系模式 | 内测(默认) | 开放模式,所有推文都公开可见 |
Alipay |
支付 | 稳定 | 开启基于支付宝开放平台的钱包功能 |
Sms |
短信验证 | 稳定 | 开启短信验证码功能,用于手机绑定验证手机是否注册者的;功能如果没有开启,手机绑定时任意短信验证码都可以绑定手机 |
Docs:OpenAPI |
开发文档 | 稳定 | 开启openapi文档功能,提供web api文档说明(visit http://127.0.0.1:8008/docs/openapi) |
Pyroscope |
性能优化 | 内测 | 开启Pyroscope功能用于性能调试 |
PhoneBind |
其他 | 稳定 | 手机绑定功能 |
功能项状态详情参考 features-status.
源代码分支管理
主代码库
github.com/rocboss/paopao-ce
git branch main beta dev feature/bleve feature/followship feature/mir feature/localoss jc/alimy r/paopao-plus r/paopao-pro x/sqlc x/sqlx分支说明
名称 说明 备注 main
主分支 分支 main
是主分支,也是paopao-ce的稳定版本发布分支,只有经过内部测试,没有重大bug出现的稳定代码才会推进到这个分支;该分支主要由beta
分支代码演进而来,原则上只接受bug修复PR。rc版本/稳定版本
发布都应该在main
主分支中进行。beta
公测分支 分支 beta
是公测分支,代码推进到main
主分支的候选分支;该分支主要由dev
分支代码演进而来,接受bug修复以及新功能优化的PR,原则上不接受新功能PR。alpha/beta版本
发布都应该在beta
公测分支下进行。dev
开发分支 分支 dev
是开发分支,不定期频繁更新,接受 新功能PR、代码优化PR、bug修复PR;新功能PR 都应该首先提交给dev
分支进行合并,bug修复/代码优化 后 冻结新功能 将代码演进合并到beta
分支。feature/*
子功能分支 feature/*
是新功能子分支,一般新功能子分支都是 从dev
开发分支fork出来的;子功能分支 只专注于该新功能 代码的开发/优化,待开发接近内测阶段 提交新功能PR给dev
分支进行review/merge,待新功能代码演进到beta
分支后,原则上是可以删除该分支,但也可以保留到稳定版本发布。该分支专注于新功能的开发,只接受新功能的bug修复/优化PR。jc/*
维护者的开发分支 jc/*
是代码库维护者的开发分支,一般包含一些局部优化或者bug修复代码,有时可以直接将代码merge到dev/beta
分支,原则上不允许直接merge代码到main
主分支。x/*
实验分支 x/*
是技术实验分支,某些技术的引入需要经过具体的代码实现与真实场景的测评,考量评估后如果某项技术适合引入到paopao-ce,就fork出一个feature/*
分支,作为新功能引入到paopao-ce。一般一些比较激进的技术,从dev
分支fork出一个新的x/*
分支,各种尝试、考量、评估后,或丢弃、或引入到paopao-ce。t/*
临时分支 t/*
是临时发版本分支,一般beta
分支演进到正式版本发布前的最后某个beta版本(比如v0.2.0-beta)就从beta分支fork出一个t/*
分支用于向main
分支提交 PR 用于Review,待 PR Reviewed 合并到main
分支后,可以删除这个临时创建的分支。这样设计主要是考虑到有时合并到main
分支时,需要Review的时间可能会长一些,而dev分支的代码又急需推进到beta分支以发布下一个alpha版本用于内测,相当于为下一个测试版本发布腾地方。r/*
发行版本分支 r/*
是不同发行版本分支,不同发行版本各有不同的侧重点,可以根据需要选择适合的发行版本。发行版本分支说明
名称 说明 维护者 备注 paopao-ce
paopao-ce 主发行版本 ROC 该分支 数据逻辑层 使用gorm作为数据逻辑层的ORM框架,适配MySQL/PostgreSQL/Sqlite3数据库。 r/paopao-ce-plus
paopao-ce-plus 发行版本 北野 该分支 数据逻辑层 使用sqlx作为数据逻辑层的ORM框架,专注于为MySQL/PostgreSQL/Sqlite3使用更优化的查询语句以提升数据检索效率。建议熟悉sqlx的开发人员可以基于此版本来做 二次开发。 r/paopao-ce-pro
paopao-ce-pro 发行版本 北野 该分支 数据逻辑层 使用sqlc作为sql语句生成器自动生成ORM代码,专门针对特定数据库MySQL/PostgreSQL进行查询优化,熟悉sqlc的开发人员可以基于此版本来做 二次开发。(另:分支目前只使用pgx-v5适配了PostgreSQL数据库,后续或许会适配MySQL/TiDB数据库。)
部署站点信息
具体部署站点信息请查阅 deployed-sites. 欢迎站长将已部署PaoPao实例的站点信息添加到 deployed-sites 列表中。
其他说明
建议后端服务使用
supervisor
守护进程,并通过nginx
反向代理后,提供API给前端服务调用。短信通道使用的聚合数据,如果申请不下来,可以考虑替换其他服务商。
代码结构比较简单,方便扩展,开发文档请参阅docs.
from