Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gphper/ginadmin
基于Gin开发的后台脚手架,集成了、数据库操作、日志管理、权限分配管理、多模板页面、自动分页器、数据库迁移和填充、Docker集成部署等功能、静态资源打包
https://github.com/gphper/ginadmin
admin casbin cms cms-framework embed gin gin-admin go golang gorm render swagger tempate
Last synced: 10 days ago
JSON representation
基于Gin开发的后台脚手架,集成了、数据库操作、日志管理、权限分配管理、多模板页面、自动分页器、数据库迁移和填充、Docker集成部署等功能、静态资源打包
- Host: GitHub
- URL: https://github.com/gphper/ginadmin
- Owner: gphper
- License: mit
- Created: 2021-04-18T11:06:20.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-10-11T12:09:02.000Z (30 days ago)
- Last Synced: 2024-10-16T18:58:54.177Z (24 days ago)
- Topics: admin, casbin, cms, cms-framework, embed, gin, gin-admin, go, golang, gorm, render, swagger, tempate
- Language: Go
- Homepage: https://gphper.github.io/ginadmindoc
- Size: 8.55 MB
- Stars: 216
- Watchers: 8
- Forks: 38
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-admin - ginadmin
README
# 最新文档查看
> https://gphper.github.io/ginadmindoc/#/# GinAdmin
这个项目是以Gin框架为基础搭建的后台管理平台,虽然很多人都认为go是用来开发高性能服务端项目的,但是也难免有要做web管理端的需求,总不能再使用别的语言来开发吧。所以整合出了GinAdmin项目,请大家多提意见指正!欢迎 star ⭐⭐
![login](https://user-images.githubusercontent.com/18718299/200120227-e7258587-7344-42e1-891d-5e42b0095020.jpg)
![index](https://user-images.githubusercontent.com/18718299/200120226-afaaf7b2-bea2-4e67-9b6b-09e077fd53a2.jpg)## 依赖
* golang > 1.8
* Gin
* BootStrap
* LayUi
* WebUpload
* [Light Year Admin Using Iframe](#https://gitee.com/yinqi/Light-Year-Admin-Using-Iframe)## 功能清单
:white_check_mark:权限控制
:white_check_mark:日志管理
:white_check_mark:模板页面
:white_check_mark:自动分页
:white_check_mark:Docker部署
:white_check_mark:静态资源打包
:white_check_mark:性能监控
:white_check_mark:API JWT
:white_check_mark:redis日志落盘保存
:white_check_mark:HTTP测试
:black_square_button:登录日志
:black_square_button:csrf 防御
:black_square_button:命令行操作
## 使用文档
- [演示地址](#演示地址)
- [开始使用](#开始使用)
- [构建环境](#docker-compose)
- [项目目录](#结构)
- [分页](#分页)
- [日志](#日志)
- [数据库](#数据库)
- [定时任务](#定时任务)
- [配置文件](#配置文件)
- [模板页面](#模板页面)
- [用户权限](#用户权限)
- [API文档](#API文档)
- [线上部署](#线上部署)
- [性能监控](#性能监控)
- [命令行操作](#命令行操作)
### :small_blue_diamond:演示地址
* http://122.152.196.83/admin/login 账号:admin 密码: 111111
### :small_blue_diamond:开始使用
1. git 克隆地址
```
git clone https://github.com/gphper/ginadmin.git
```2. 下载依赖包
```go
go mod download
```3. 配置 `configs/config.yaml`文件
```yaml
mysql:
- name: "default"
username: "root"
password: "123456"
database: "db_ginadmin"
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:
host: 0.0.0.0
port: 20011
log_media: "redis"
```4. 运行 `go run .\cmd\ginadmin`访问地址 http://localhost:端口地址/admin/login。默认账户:admin 密码:111111
5. vscode调试配置文件 `launch.json`
```json
{
"version": "0.2.0",
"configurations": [
{
"name": "ginadmin",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceRoot}/cmd/ginadmin",
"trace": true,
"args":[
"--root_path=${workspaceRoot}"
],
}
}
```### :small_blue_diamond:构建开发环境
1. 替换conf目录下的配置项
```yaml
mysql:
- name: "default"
username: "docker"
password: "123456"
database: "docker_mysql"
host: "localmysql"
port: 3306
max_open_conn: 50
max_idle_conn: 20
redis:
addr: "localredis:6379"
db: 0
password: "ginadmin"
session:
session_name: "gosession_id"
base:
host: 0.0.0.0
port: 20010
log_media: "redis"
```2. 执行命令 `docker-compose up -d`
3. 进入到容器中 `docker exec -it ginadmin-web bash`
4. 下载扩展 `go mod tidy`
5. 运行项目 ` go run ./cmd/ginadmin/ run` 访问地址 `http://localhost:20010/admin/login`
6. 桌面连接redis地址
```
地址:127.0.0.1
端口:6380
密码:ginadmin
```7. 桌面连接mysql地址
```
地址:localhost
端口:3310
用户名:docker
密码:123456
```### :small_blue_diamond:项目目录
```
|--api // Api接口控制器
|--build // 封装的公共方法
|--cmd // 命令行工具
|--configs // 配置文件
|--deployments // docker-compose 部署文件
|--internal //核心代码
|--logs // 日志存放目录
|--pkg // 公共调用部分
|--web //视图静态文件
```### :small_blue_diamond:分页
1. 使用 `pkg/paginater/paginater.go` 里面的 `PageOperation` 进行分页
```go
adminDb := models.Db.Table("admin_users").Select("nickname","username").Where("uid != ?", 1)
adminUserData := paginater.PageOperation(c, adminDb, 1, &adminUserList)
```
2. 在html中使用
```go
{{ .adminUserData.PageHtml }}
```### :small_blue_diamond:日志
1. 系统日志
设置路由中间件来收集系统日志和错误日志,设置 `internal/router/default.go` 文件2. 自定义日志
使用 loggers.LogInfo()` 方法记录日志 `github.com/gphper/ginadmin/pkg/loggers`
```golang
loggers.LogInfo("admin", "this is a info message", map[string]string{
"user_info": "this is a user info",
})
```3. 切换存储介质
在配置文件中修改 `log_media` 参数默认file文件存储可选redis存储### :small_blue_diamond:数据库
1. models下定义的文件均需要实现 `TableName() string` 方法,并将实现该结构体的指针写入到 `GetModels` 方法中
```go
func GetModels() []interface{} {
return []interface{}{
&AdminUsers{},
&AdminGroup{},
}
}
```2. model需要继承 BaseModle 并且实现 TableName 方法,如果需要初始化填充数据的话,需要实现 FillData() 方法,并将数据填充需要执行的代码写到函数体里。详情参照 AdminUsers
### :small_blue_diamond:定时任务
- 在 `pkg/cron/cron.go` 添加定时执行任务
### :small_blue_diamond:配置文件
1. 现在 `configs/config.go` 添加配置项的 struct 类型,例如
```go
type AppConf struct {
BaseConf `yaml:"base"`
}
type BaseConf struct {
Port string `yaml:"port"`
}
```2. 在 `configs/config.yaml` 添加配置信息
```
base:
port: 20011
```3. 在代码中调用配置文件的信息
```go
configs.App.BaseConf.Port
```### :small_blue_diamond:模板页面
- 所有的后台模板都写到 `web/views/template` 目录下面,并且分目录存储,调用时按照 `目录/模板名称` 的方式调用
### :small_blue_diamond:用户权限
- 菜单权限定义到 `internal/menu/menu.go` 文件下,定义完之后在用户组管理里面编辑权限
- casbin版集成了casbin权限管理框架,官方地址:[casbin](#https://casbin.org/docs/zh-CN/get-started)
- 框架中的常用方法定义在 `pkg/casbinauth/casbin.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
},
```### :small_blue_diamond:API文档
- 使用 swagg 生成api文档,生成文件再docs目录下
```
go install github.com/swaggo/swag/cmd/swag
swag init -g cmd/ginadmin/main.go
```- 在根目录执行 `go run .\cmd\ginadmin\ run` 然后啊访问 http://localhost:20010/swagger/index.html
### :small_blue_diamond:线上部署
- 使用 `go build .\cmd\ginadmin` 生成二进制文件
- 打包静态资源部署 `go build -tags=embed .\cmd\ginadmin`### :small_blue_diamond:性能监控
* 推荐使用 prometheus + grafana 进行性能监控,参考示例 https://github.com/gphper/ginmonitor
### :small_blue_diamond:命令行操作
* 运行程序命令
```
PS F:\ginadmin> go run .\cmd\ginadmin\ run -h
Run appUsage:
ginadmin run [flags]Flags:
-c, --config path string config path
-h, --help help for run
-m, --mode string dev or release (default "dev")
```
* 数据表迁移命令
```
PS F:\ginadmin> go run .\cmd\ginadmin\ db migrate -h
DB MigrateUsage:
ginadmin db migrate [-t table] [flags]Flags:
-c, --config path string config path
-h, --help help for migrate
-t, --table string input a table name
```* 数据填充命令
```
PS F:\ginadmin> go run .\cmd\ginadmin\ db seed -h
DB SeedUsage:
ginadmin db seed [-t table] [flags]Flags:
-c, --config path string config path
-h, --help help for seed
-t, --table string input a table name
```