gpadmin 后台管理 gpadmin

gphper • 3984 次点击    
这个项目是以Gin框架为基础搭建的后台管理平台,虽然很多人都认为go是用来开发高性能服务端项目的,但是也难免有要做web管理端的需求,总不能再使用别的语言来开发吧。所以整合出了GinAdmin项目,请大家多提意见指正!欢迎 star ⭐⭐ ![logo](https://static.studygolang.com/210727/a39535af4ee2a61e6a6f55265117e6d4.jpg) ![logo](https://static.studygolang.com/210727/9e444b2e2e98a5a81e6d812d3668e71c.jpg) ## 依赖 * golang > 1.8 * Gin * BootStrap * LayUi * WebUpload * [Light Year Admin Using Iframe](#https://gitee.com/yinqi/Light-Year-Admin-Using-Iframe) ## 功能清单 权限控制 日志管理 模板页面 自动分页 Docker部署 静态资源打包 性能监控 ## 使用文档 - [开始使用](#开始使用) - [docker-compose构建环境](#docker-compose) - [项目目录](#结构) - [分页](#分页) - [日志](#日志) - [数据库](#数据库) - [定时任务](#定时任务) - [配置文件](#配置文件) - [模板页面](#模板页面) - [用户权限](#用户权限) - [API文档](#API文档) - [线上部署](#线上部署) - [性能监控](#性能监控) ### <a name="开始使用">开始使用</a> 1. git 克隆地址 ``` git clone https://github.com/gphper/ginadmin.git ``` 2. 下载依赖包 ```go go mod download ``` 3. 配置 `configs/config.ini`文件 ``` [mysql] username=root password=123456 database=db_beego host=127.0.0.1 port=3306 max_open_conn=50 max_idle_conn=20 [redis] addr=localhost:6379 db=0 password="" [session] session_name=gosession_id [base] port=:8091 ``` 4. 运行 `go run main.go`访问地址 http://localhost:端口地址/admin/login。默认账户:admin 密码:111111 ### <a name="docker-compose">docker-compose构建环境</a> 1. 替换conf目录下的配置项 ```ini [mysql] username=docker password=123456 database=docker_mysql host=localmysql port=3306 max_open_conn=50 max_idle_conn=20 [session] session_name=gosession_id [base] host=0.0.0.0 port=20010 fill_data=true ``` 2. 执行命令 docker-compose up ### <a name="结构">项目目录</a> ``` |--api // Api接口控制器 |--build // 封装的公共方法 |--cmd // 命令行工具 |--configs // 配置文件 |--deployments // docker-compose 部署文件 |--internal //核心代码 |--logs // 日志存放目录 |--pkg // 公共调用部分 |--web //视图静态文件 ``` ### <a name="分页">分页</a> 1. 使用 `pkg/comment/util.go` 里面的 `PageOperation` 进行分页 ```go adminDb := models.Db.Table("admin_users").Select("nickname","username").Where("uid != ?", 1) adminUserData := comment.PageOperation(c, adminDb, 1, &adminUserList) ``` 2. 在html中使用 ```go {{ .adminUserData.PageHtml }} ``` ### <a name="日志">日志</a> 1. 系统日志 设置路由中间件来收集系统日志和错误日志,设置 `internal/router/default.go` 文件 2. 自定义日志 使用 loggers.LogInfo()` 方法记录日志 `github/gphper/ginadmin/pkg/loggers` ```golang loggers.LogInfo("admin", "this is a info message", map[string]string{ "user_info": "this is a user info", }) ``` 3. 切换存储介质 * 系统日志在 `internal/router/default.go` 文件更换中间件切换日志存储介质 * 自定义日志在loggers.LogInfo 方法使用`facade.NewZaplog` 和 `facade.NewRedislog` 切换 ### <a name="数据库">数据库</a> 1. models下定义的文件均需要实现 `TableName() string` 方法,并将实现该结构体的指针写入到 `GetModels` 方法中 ```go func GetModels() []interface{} { return []interface{}{ &AdminUsers{}, &AdminGroup{}, } } ``` 2. model需要继承 BaseModle 并且实现 TableName 方法,如果需要初始化填充数据的话,需要实现 FillData() 方法,并将数据填充需要执行的代码写到函数体里。详情参照 AdminUsers 3. 数据库迁移,先使用`go install cmd\ginadmin-cli`安装ginadmin-cli 命令,执行命令行工具 ```go ginadmin-cli db migrate ``` 4. 数据填充,需在相应目录下实现 `FillData()` 方法执行如下命令 ```go ginadmin-cli db seed ``` 5. 可以通过设置 ini 配置文件中的 `fill_data`和`migrate_table` 分别控制程序重启时自动迁移数据表和填充数据 ### <a name="定时任务">定时任务</a> - 在 `pkg/cron/cron.go` 添加定时执行任务 ### <a name="配置文件">配置文件</a> 1. 现在 `configs/config.go` 添加配置项的 struct 类型,例如 ```go type AppConf struct { BaseConf `ini:"base"` } type BaseConf struct { Port string `ini:"port"` } ``` 2. 在 `configs/config.ini` 添加配置信息 ``` [base] port=:8091 ``` 3. 在代码中调用配置文件的信息 ```go configs.App.BaseConf.Port ``` ### <a name="模板页面">模板页面</a> - 所有的后台模板都写到 `web/views/template` 目录下面,并且分目录存储,调用时按照 `目录/模板名称` 的方式调用 ### <a name="用户权限">用户权限</a> - 菜单权限定义到 `internal/menu/menu.go` 文件下,定义完之后在用户组管理里面编辑权限 - casbin版集成了casbin权限管理框架,官方地址:[casbin](#https://casbin.org/docs/zh-CN/get-started) - 框架中的常用方法定义在 `comment/auth/casbinauth/asbin.go` 文件中 - 在控制器中可用从 `gin.context` 获取登录用户信息 ```go info,_ := c.Get("userInfo") ``` - template 中判断权限的函数 `judgeContainPriv` 定义在 `pkg/template/default.go` 文件下 ```go "judgeContainPriv": func(username string, obj string, act string) bool { if username == "admin" { return true } ok, err := casbinauth.Check(username, obj, act) if !ok || err != nil { return false } return true }, ``` ### <a name="API文档">API文档</a> - 使用 swagg 生成api文档,生成文件再docs目录下 ```swag init -g cmd/ginadmin/main.go``` - 在根目录执行 `go build .\cmd\ginadmin\` 然后啊访问 http://localhost:20010/swagger/index.html ### <a name="线上部署">线上部署</a> - 使用 `go build -tags=release .\cmd\ginadmin` 生成二进制文件 - 打包静态资源部署 `go build -tags=embed .\cmd\ginadmin` ### <a name="性能监控">性能监控</a> * 推荐使用 prometheus + grafana 进行性能监控,参考示例 https://github.com/gphper/ginmonitor
授权协议:
Apache
开发语言:
go 查看源码»
3984 次点击  ∙  2 赞  
加入收藏 微博
8 回复  |  直到
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传