這個專案是以Gin框架為基礎搭建的後臺管理平臺,雖然很多人都認為go是用來開發高效能服務端專案的,但是也難免有要做web管理端的需求,總不能再使用別的語言來開發吧。所以整合出了GinAdmin專案,請大家多提意見指正!歡迎 star ⭐⭐
演示地址
- 122.152.196.83/admin/login 賬號:admin 密碼: 111111
依賴
- golang > 1.8
- Gin
- BootStrap
- LayUi
- WebUpload
- Light Year Admin Using Iframe
功能清單
許可權控制
日誌管理
模板頁面
自動分頁
Docker部署
靜態資源打包
效能監控
使用文件
開始使用
git 克隆地址
git clone https://github.com/gphper/ginadmin.git
下載依賴包
go mod download
配置
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
執行
go run main.go
訪問地址 http://localhost:埠地址/admin/login。預設賬戶:admin 密碼:111111
docker-compose構建環境
替換conf目錄下的配置項
[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
執行命令 docker-compose up
專案目錄
|--api // Api介面控制器
|--build // 封裝的公共方法
|--cmd // 命令列工具
|--configs // 配置檔案
|--deployments // docker-compose 部署檔案
|--internal //核心程式碼
|--logs // 日誌存放目錄
|--pkg // 公共呼叫部分
|--web //檢視靜態檔案
分頁
- 使用
pkg/comment/util.go
裡面的PageOperation
進行分頁adminDb := models.Db.Table("admin_users").Select("nickname","username").Where("uid != ?", 1) adminUserData := comment.PageOperation(c, adminDb, 1, &adminUserList)
- 在html中使用
{{ .adminUserData.PageHtml }}
日誌
系統日誌
設定路由中介軟體來收集系統日誌和錯誤日誌,設定
internal/router/default.go
檔案自定義日誌
使用 loggers.LogInfo()
方法記錄日誌
github/gphper/ginadmin/pkg/loggers`loggers.LogInfo("admin", "this is a info message", map[string]string{ "user_info": "this is a user info", })
切換儲存介質
系統日誌在
internal/router/default.go
檔案更換中介軟體切換日誌儲存介質自定義日誌在loggers.LogInfo 方法使用
facade.NewZaplog
和facade.NewRedislog
切換
資料庫
models下定義的檔案均需要實現
TableName() string
方法,並將實現該結構體的指標寫入到GetModels
方法中func GetModels() []interface{} { return []interface{}{ &AdminUsers{}, &AdminGroup{}, } }
model需要繼承 BaseModle 並且實現 TableName 方法,如果需要初始化填充資料的話,需要實現 FillData() 方法,並將資料填充需要執行的程式碼寫到函式體裡。詳情參照 AdminUsers
資料庫遷移,先使用
go install cmd\ginadmin-cli
安裝ginadmin-cli 命令,執行命令列工具ginadmin-cli db migrate
資料填充,需在相應目錄下實現
FillData()
方法執行如下命令ginadmin-cli db seed
可以通過設定 ini 配置檔案中的
fill_data
和migrate_table
分別控制程式重啟時自動遷移資料表和填充資料
定時任務
- 在
pkg/cron/cron.go
新增定時執行任務
配置檔案
現在
configs/config.go
新增配置項的 struct 型別,例如type AppConf struct { BaseConf `ini:"base"` } type BaseConf struct { Port string `ini:"port"` }
在
configs/config.ini
新增配置資訊[base] port=:8091
在程式碼中呼叫配置檔案的資訊
configs.App.BaseConf.Port
模板頁面
- 所有的後臺模板都寫到
web/views/template
目錄下面,並且分目錄儲存,呼叫時按照目錄/模板名稱
的方式呼叫
使用者許可權
選單許可權定義到
internal/menu/menu.go
檔案下,定義完之後在使用者組管理裡面編輯許可權casbin版整合了casbin許可權管理框架,官方地址:casbin
框架中的常用方法定義在
comment/auth/casbinauth/asbin.go
檔案中在控制器中可用從
gin.context
獲取登入使用者資訊info,_ := c.Get("userInfo")
template 中判斷許可權的函式
judgeContainPriv
定義在pkg/template/default.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 },
API文件
使用 swagg 生成api文件,生成檔案再docs目錄下
swag init -g cmd/ginadmin/main.go
在根目錄執行
go build .\cmd\ginadmin\
然後啊訪問 localhost:20010/swagger/index.html
線上部署
- 使用
go build -tags=release .\cmd\ginadmin
生成二進位制檔案 - 打包靜態資源部署
go build -tags=embed .\cmd\ginadmin
效能監控
- 推薦使用 prometheus + grafana 進行效能監控,參考示例 github.com/gphper/ginmonitor
本作品採用《CC 協議》,轉載必須註明作者和本文連結