Skip to content

rocboss/paopao-ce

main
Switch branches/tags
Code

Latest commit

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
pkg
 
 
 
 
web
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Go Report Card Forks Stargazers MIT License Contributors

Logo

PaoPao

🔥一个清新文艺的微社区
View Demo · Pull Request · Features


预览

Web端:
明色主题

暗色主题

更多演示请前往官网体验(谢绝灌水)

桌面端:

(back to top)

🛠 技术栈

PaoPao主要由以下优秀的开源项目/工具构建

🏗 快速开始

环境要求

  • Go (1.17+)
  • Node.js (14+)
  • MySQL (5.7+)
  • Redis
  • Zinc

* Zinc是一款轻量级全文搜索引擎,可以查阅 https://zincsearch.com/ 安装

以上环境版本为PaoPao官方的开发版本,仅供参考,其他版本的环境未进行充分测试

安装说明

方式一. 手动安装(推荐)

克隆代码库

git clone https://github.com/rocboss/paopao-ce.git

后端

  1. 导入项目根目录下的 scripts/paopao.sql 文件至MySQL数据库

  2. 拷贝项目根目录下 config.yaml.sample 文件至 config.yaml,按照注释完成配置编辑

  3. 编译后端
    编译api服务:

    make build

    编译api服务、内嵌web前端ui:

    make build TAGS='embed'

    编译后在release目录可以找到对应可执行文件。

    release/paopao-ce
  4. 直接运行后端
    运行api服务:

    make run

    运行api服务、web前端ui服务:

    make run TAGS='embed'

    提示: 如果需要内嵌web前端ui,请先构建web前端(建议设置web/.env为VITE_HOST="")。

  5. 使用内置的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功能。

前端

  1. 进入前端目录 web,拷贝.env.env.local,编辑 .env.local 文件中后端服务地址及其他配置项,下载依赖包

    cd ./web && cp .env .env.local
    vim .env.local
    yarn
  2. 编译前端

    yarn build

    build完成后,可以在dist目录获取编译产出,配置nginx指向至该目录即可

桌面端

  1. 进入前端目录 web,拷贝.env.env.local,编辑 .env.local 文件中后端服务地址及其他配置项,下载依赖包

    cd ./web && cp .env .env.local
    vim .env.local
    yarn
  2. 编译前端

    yarn build
  3. 构建桌面端

    yarn tauri build

    桌面端是使用Rust + tauri编写 的,需要安装tauri的依赖,具体参考https://tauri.studio/v1/guides/getting-started/prerequisites.

方式二. 使用Docker构建、运行

  • 后端:
# 默认参数构建, 默认内嵌web ui并设置api host为空
docker build -t your/paopao-ce:tag .

# 内嵌web ui并且自定义API host参数
docker build -t your/paopao-ce:tag --build-arg API_HOST=http://api.paopao.info .

# 内嵌web ui并且使用本地web/.env中的API host
docker build -t your/paopao-ce:tag --build-arg USE_API_HOST=no .

# 内嵌web ui并且使用本地编译的web/dist构建
docker build -t your/paopao-ce:tag --build-arg USE_DIST=yes .

# 只编译api server
docker build -t your/paopao-ce:tag --build-arg EMBED_UI=no .

# 运行
docker run -d -p 8008:8008 -v ${PWD}/config.yaml.sample:/app/paopao-ce/config.yaml your/paopao-ce:tag
  • 前端:
cd web

# 默认参数构建
docker build -t your/paopao-ce:web .

# 自定义API host 参数构建
docker build -t your/paopao-ce:web --build-arg API_HOST=http://api.paopao.info .

# 使用本地编译的dist构建
docker build -t your/paopao-ce:web --build-arg USE_DIST=yes .

# 运行
docker run -d -p 8010:80 your/paopao-ce:web

方式三. 使用 docker-compose 运行

git clone https://github.com/rocboss/paopao-ce.git
docker compose up --build
# visit paopao-ce(http://127.0.0.1:8008) and phpMyadmin(http://127.0.0.1:8080)

默认是使用config.yaml.sample的配置,如果需要自定义配置,请拷贝默认配置文件(比如config.yaml),修改后再同步配置到docker-compose.yaml如下:

# file: docker-compose.yaml
...
  backend:
    build:
      context: .
    restart: always
    depends_on:
      - db
      - redis
      - zinc
    # modify below to reflect your custom configure
    volumes:
      - ./config.yaml:/app/paopao-ce/config.yaml
    ports:
      - 8008:8008
    networks:
      - paopao-network
....

注意:默认提供的 docker-compose.yaml 初衷是搭建本机开发调试环境,如果需要产品部署供外网访问,请自行调优配置参数或使用其他方式部署。

API 文档

构建时将 docs 添加到TAGS中:

make run TAGS='docs'

# visit http://127.0.0.1:8008/docs

配置说明

config.yaml.sample 是一份完整的配置文件模版,paopao-ce启动时会读取./configs/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 

目前支持的功能集合:

  • 数据库: MySQL/Sqlite3/PostgreSQL
    Gorm + MySQL/Sqlite3/PostgreSQL 使用gorm作为数据库的ORM,默认使用 Grom + MySQL组合(目前状态:稳定,默认,推荐使用);
    Sqlx + MySQL/PostgreSQL 使用sqlx作为数据库的ORM(目前状态:WIP);
  • 对象存储: AliOSS/COS/HuaweiOBS/MinIO/LocalOSS
    AliOSS 阿里云对象存储服务;
    COS 腾讯云对象存储服务;
    HuaweiOBS 华为云对象存储服务;
    MinIO MinIO对象存储服务;
    S3 AWS S3兼容的对象存储服务;
    LocalOSS 提供使用本地目录文件作为对象存储的功能,仅用于开发调试环境;
  • 缓存: Redis/SimpleCacheIndex/BigCacheIndex
    SimpleCacheIndex 提供简单的 广场推文列表 的缓存功能;
    BigCacheIndex 使用BigCache缓存 广场推文列表,缓存每个用户每一页,简单做到千人千面(推荐使用);
  • 搜索: Zinc/Meili
    Zinc 基于Zinc搜索引擎提供推文搜索服务(目前状态: 稳定,推荐使用);
    Meili 基于Meilisearch搜索引擎提供推文搜索服务(目前状态: 稳定,推荐使用);
  • 日志: LoggerFile/LoggerZinc/LoggerMeili
    LoggerFile 使用文件写日志(目前状态: 稳定);
    LoggerZinc 使用Zinc写日志(目前状态: 稳定,推荐使用);
    LoggerMeili 使用Meilisearch写日志(目前状态: 内测阶段);
  • 支付: Alipay
    Alipay 开启基于支付宝开放平台的钱包功能;
  • 短信验证码: SmsJuhe(需要开启sms)
    Sms 开启短信验证码功能,用于手机绑定验证手机是否注册者的;功能如果没有开启,手机绑定时任意短信验证码都可以绑定手机;
  • 其他: PhoneBind/OSS:Retention/OSS:TempDir
    PhoneBind 手机绑定功能;
    OSS:Retention 基于对象存储系统的对象过期自动删除特性实现 先创建临时对象再持久化的功能(目前状态: 内测阶段);
    OSS:TempDir 基于对象存储系统的对象拷贝/移动特性实现 先创建临时对象再持久化的功能(目前状态: 内测阶段);

搭建依赖环境

Zinc 搜索引擎:

  • Zinc运行
# 创建用于存放zinc数据的目录
mkdir -p data/zinc/data

# 使用Docker运行zinc
docker run -d --name zinc --user root -v ${PWD}/data/zinc/data:/data -p 4080:4080 -e ZINC_FIRST_ADMIN_USER=admin -e ZINC_FIRST_ADMIN_PASSWORD=admin -e DATA_PATH=/data public.ecr.aws/prabhat/zinc:latest

# 查看zinc运行状态
docker ps
CONTAINER ID   IMAGE                                COMMAND                  CREATED        STATUS        PORTS                    NAMES
41465feea2ff   getmeili/meilisearch:v0.27.0         "tini -- /bin/sh -c …"   20 hours ago   Up 20 hours   0.0.0.0:7700->7700/tcp   paopao-ce-meili-1
7daf982ca062   public.ecr.aws/prabhat/zinc:latest   "/go/bin/zinc"           3 weeks ago    Up 6 days     0.0.0.0:4080->4080/tcp   zinc

# 使用docker compose运行
docker compose up -d zinc
# visit http://localhost:4080 打开自带的ui管理界面
  • 修改Zinc配置
# features中加上 Zinc 和 LoggerZinc
Features:
  Default: ["Zinc", "LoggerZinc", "Base", "Sqlite3", "BigCacheIndex","MinIO"]
...
LoggerZinc: # 使用Zinc写日志
  Host: 127.0.0.1:4080  # 这里的host就是paopao-ce能访问到的zinc主机
  Index: paopao-log
  User: admin
  Password: admin
  Secure: False         # 如果使用https访问zinc就设置为True
...
Zinc: # Zinc搜索配置
  Host: 127.0.0.1:4080
  Index: paopao-data
  User: admin
  Password: admin
  Secure: False

Meilisearch 搜索引擎:

  • Meili运行
mkdir -p data/meili/data

# 使用Docker运行
docker run -d --name meili -v ${PWD}/data/meili/data:/meili_data -p 7700:7700 -e MEILI_MASTER_KEY=paopao-meilisearch getmeili/meilisearch:v0.27.0
# visit http://localhost:7700 打开自带的搜索前端ui

# 使用docker compose运行,需要删除docker-compose.yaml中关于meili的注释
docker compose up -d meili

# 使用docker运行meilisearch的ui管理前端
docker run -d --name uirecord -p 7701:3000 bitriory/uirecord
# visit http://localhost:7701

# 使用docker compose运行meilisearch的ui管理前端,需要删除docker-compose.yaml中关于uirecord的注释
docker compose up -d uirecord
# visit http://loclahost:7701

# 查看meili运行状态
docker compose ps
NAME                   COMMAND                  SERVICE             STATUS              PORTS
paopao-ce-meili-1      "tini -- /bin/sh -c …"   meili               running             0.0.0.0:7700->7700/tcp
paopao-ce-uirecord-1   "docker-entrypoint.s…"   uirecord            running             0.0.0.0:7701->3000/tcp
  • 修改Meili配置
# features中加上 Meili 和 LoggerMeili
Features:
  Default: ["Meili", "LoggerMeili", "Base", "Sqlite3", "BigCacheIndex","MinIO"]
...
LoggerMeili: # 使用Meili写日志
  Host: 127.0.0.1:7700
  Index: paopao-log
  ApiKey: paopao-meilisearch
  Secure: False
  MinWorker: 5               # 最小后台工作者, 设置范围[5, 100], 默认5
  MaxLogBuffer: 100          # 最大log缓存条数, 设置范围[10, 10000], 默认100
...
Meili: # Meili搜索配置
  Host: 127.0.0.1:7700      # 这里的host就是paopao-ce能访问到的meili主机
  Index: paopao-data
  ApiKey: paopao-meilisearch
  Secure: False             # 如果使用https访问meili就设置为True

MinIO 对象存储服务

  • MinIO运行
mkdir -p data/minio/data

# 使用Docker运行
docker run -d --name minio -v ${PWD}/data/minio/data:/data -p 9000:9000 -p 9001:9001 -e MINIO_ROOT_USER=minio-root-user -e  MINIO_ROOT_PASSWORD=minio-root-password -e MINIO_DEFAULT_BUCKETS=paopao:public bitnami/minio:latest

# 使用docker compose运行, 需要删除docker-compose.yaml中关于minio的注释
docker compose up -d minio
  • 修改Minio配置
# features中加上 MinIO
Features:
  Default: ["MinIO", "Meili", "LoggerMeili", "Base", "Sqlite3", "BigCacheIndex"]
...
MinIO: # MinIO 存储配置
  AccessKey: Q3AM3UQ867SPQQA43P2F      # AccessKey/SecretKey 需要登入minio管理界面手动创建,管理界面地址: http://127.0.0.1:9001
  SecretKey: zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
  Secure: False
  Endpoint: 127.0.0.1:9000             # 根据部署的minio主机修改对应地址
  Bucket: paopao                       # 如上,需要在管理界面创建bucket并赋予外部可读写权限
  Domain: 127.0.0.1:9000               # minio外网访问的地址(如果想让外网访问,这里需要设置为外网可访问到的minio主机地址)
...

其他说明

建议后端服务使用 supervisor 守护进程,并通过 nginx 反向代理后,提供API给前端服务调用。

短信通道使用的聚合数据,如果申请不下来,可以考虑替换其他服务商。

代码结构比较简单,很方便扩展

👯‍♀️ 贡献

喜欢的朋友欢迎给个Star、贡献PR。

License

Distributed under the MIT License. See LICENSE for more information.