Socket
Book a DemoInstallSign in
Socket

gitee.com/windcoder/qingyucms

Package Overview
Dependencies
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gitee.com/windcoder/qingyucms

Go
Version
v0.0.0-20230831015452-8743551fd4fb
Version published
Created
Source

项目简介

本项目是对原个人 Java 项目 qycms 的 GoLang 版改造, 由于时间有限,这一版直接使用了B站的开源微服务框架 Kratos ,配套前端项目 qyblog-web,采用 vue3 + Ant Design Vue重构,使用 nuxt3 实现 ssr,小程序部分使用 uni-app 重构。

当前功能

项目目前以个人博客自用为主,加上微服务化会增加实际运行成本,短期内不会有微服务化的考虑。目前实现了如下的基础功能。

  • 文章系统
    • 文章:基本的文章增删改查管理
    • 页面:单独的特殊页面,不会展示在文章列表中,需要手动配置在菜单。
    • 分类:文章所属分类
    • 标签:文章所属标签
    • 评论:小型的评论管理,当有新评论时提供邮件提醒。
  • 媒体库管理
    • 媒体库配置(本地、七牛、阿里)
    • 媒体库文件展示:目前只实现了本地和七牛云的。
  • 链接管理
    • 导航:默认的只有顶部和页脚菜单
    • 友联:目前仅支持后端手动添加
    • 短链接:方便将网址隐藏成 http://xxx/go/xxx 的格式
  • 系统管理
    • 用户管理:默认只有管理员,暂未设计对外开放注册的功能
    • 角色管理:目前权限粒度控制在角色层,本身使用 casbin 实现 RBAC权限模型,方便后期扩展。
    • 菜单管理:管理端页面的菜单管理,与权限管理配套使用。
    • API管理:管理端页面的涉及的接口api管理,因为前后端分离,需要与权限管理配套使用。
    • 站点管理:涉及站点名称、页头页脚自定义代码添加等定制化配置管理。
  • 定时任务
    • 更新网站地图:网站的sitemap文件定时更新,有需要时可手动调用更新。
    • 更新评论统计:评论系统设计多表,设计相对复杂,前端页面的评论总数处于延迟定时更新,有需要时可手动调用更新。
    • 更新文章浏览量统计:浏览量本身记录在 redis 缓存中定时同步,有需要时可手动调用更新。
    • 推送回复邮件消息:博主的回复消息会定时发送给留言者,有需要时可手动调用更新,但这个的手动推送一般用不到。

未来功能

部分待做功能

  • 细粒度权限控制:目前只支持到了菜单,暂时未做按钮级别的前端控制逻辑。
  • 专题功能
  • 微语功能:类似说说那些简短的一句话
  • 电子书单/书架
  • MetaWebLog API:一种文章发布思路,实现后可用 MWeb 直接发文,同时 CSDN 等多数博客支持这一协议,可以扩展相关同步发布等功能。

单体服务架构

项目目录及作用如下,属于标准的 Kratos 的单体应用模板,基本上是遵循 project-layout 的。

  • api: 所有所用接口均在这里生成,由于基于 grpc,所以也是 dao 所在位置
  • cmd:用于启动命令等生成
  • configs:配置文件所在位置
  • doc:文档
    • api:自动生成 API JSON 文件
    • sql:数据库文件
    • templates:邮件等模板
  • internal 服务实现所在位置
    • biz:定义 do,具体业务层,DO 与 PO 互转层
    • conf: 定义读取配置文件的对象。由于目前将 casbin 规则文件放在了这里,Dockerfile的配置文件指定指令未变更,直接使用docker部署会有问题。
    • data:定义 PO,数据库连接创建以及增删改查等基本服务, PO服务执行层。
    • job:定时任务
    • server: http与grpc协议服务实际注册层,如果需要多个api文件中请求注册到项目中,则需要调整这里面的http或者 grpc 文件,增加类似 v1.RegisterUserHTTPServer(srv, userService)的语句。
    • service:dao 与 do 互转层

API 生成

# 创建api
kratos proto add api/qycms_bff/admin/v1/qy_admin_api_group.proto
kratos proto add api/qycms_bff/web/v1/qy_web_article.proto
# 生成api
kratos proto client api/
kratos proto client  internal/qycms_blog/conf/conf.proto

API JSON文件生成

暂时需要手动在 Makefile 文件中手动配置需要生成 API 的文件,然后执行 make swagger 会在对应的文件夹下面生成json文件

暂时将目前配置的部分接口文档复制到了 doc/api 文件夹下面一份。

Kratos Project Template

Install Kratos

go install github.com/go-kratos/kratos/cmd/kratos/v2@latest

Create a service

# Create a template project
kratos new server

cd server
# Add a proto template
kratos proto add api/server/server.proto
# Generate the proto code
kratos proto client api/server/server.proto
# Generate the source code of service by proto file
kratos proto server api/server/server.proto -t internal/service

go generate ./...
go build -o ./bin/ ./...
./bin/server -conf ./configs

Generate other auxiliary files by Makefile

# Download and update dependencies
make init
# Generate API files (include: pb.go, http, grpc, validate, swagger) by proto file
make api
# Generate all files
make all

Automated Initialization (wire)

# install wire
go get github.com/google/wire/cmd/wire

# generate wire
cd cmd/server
wire

Docker

# build
docker build -t <your-docker-image-name> .

# run
docker run --rm -p 8000:8000 -p 9000:9000 -v </path/to/your/configs>:/data/conf <your-docker-image-name>

FAQs

Package last updated on 31 Aug 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts