{"id":13597822,"url":"https://github.com/gphper/ginadmin","last_synced_at":"2025-04-12T22:36:47.906Z","repository":{"id":37710631,"uuid":"359119605","full_name":"gphper/ginadmin","owner":"gphper","description":"基于Gin开发的后台脚手架，集成了、数据库操作、日志管理、权限分配管理、多模板页面、自动分页器、数据库迁移和填充、Docker集成部署等功能、静态资源打包","archived":false,"fork":false,"pushed_at":"2024-10-11T12:09:02.000Z","size":8970,"stargazers_count":229,"open_issues_count":4,"forks_count":39,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-04T02:08:06.135Z","etag":null,"topics":["admin","casbin","cms","cms-framework","embed","gin","gin-admin","go","golang","gorm","render","swagger","tempate"],"latest_commit_sha":null,"homepage":"https://gphper.github.io/ginadmindoc","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gphper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-18T11:06:20.000Z","updated_at":"2025-03-18T08:29:27.000Z","dependencies_parsed_at":"2024-06-18T21:34:18.035Z","dependency_job_id":"3359ba6b-1632-4876-b12a-63294fe38190","html_url":"https://github.com/gphper/ginadmin","commit_stats":{"total_commits":216,"total_committers":2,"mean_commits":108.0,"dds":0.0092592592592593,"last_synced_commit":"4a8e67427da97567172b4c8e2975d3937dcac48a"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gphper%2Fginadmin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gphper%2Fginadmin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gphper%2Fginadmin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gphper%2Fginadmin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gphper","download_url":"https://codeload.github.com/gphper/ginadmin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248642982,"owners_count":21138352,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["admin","casbin","cms","cms-framework","embed","gin","gin-admin","go","golang","gorm","render","swagger","tempate"],"created_at":"2024-08-01T17:00:41.868Z","updated_at":"2025-04-12T22:36:47.883Z","avatar_url":"https://github.com/gphper.png","language":"Go","readme":"# 最新文档查看\n\u003e https://gphper.github.io/ginadmindoc/#/\n\n# GinAdmin\n\n这个项目是以Gin框架为基础搭建的后台管理平台，虽然很多人都认为go是用来开发高性能服务端项目的，但是也难免有要做web管理端的需求，总不能再使用别的语言来开发吧。所以整合出了GinAdmin项目，请大家多提意见指正！欢迎 star ⭐⭐\n\n![login](https://user-images.githubusercontent.com/18718299/200120227-e7258587-7344-42e1-891d-5e42b0095020.jpg)\n![index](https://user-images.githubusercontent.com/18718299/200120226-afaaf7b2-bea2-4e67-9b6b-09e077fd53a2.jpg)\n\n\n## 依赖\n\n* golang \u003e 1.8\n* Gin\n* BootStrap\n* LayUi\n* WebUpload\n* [Light Year Admin Using Iframe](#https://gitee.com/yinqi/Light-Year-Admin-Using-Iframe)\n\n## 功能清单\n\n:white_check_mark:权限控制\n\n:white_check_mark:日志管理\n\n:white_check_mark:模板页面\n\n:white_check_mark:自动分页\n\n:white_check_mark:Docker部署\n\n:white_check_mark:静态资源打包\n\n:white_check_mark:性能监控\n\n:white_check_mark:API JWT\n\n:white_check_mark:redis日志落盘保存\n\n:white_check_mark:HTTP测试\n\n:black_square_button:登录日志\n\n:black_square_button:csrf 防御\n\n:black_square_button:命令行操作\n\n\n## 使用文档\n\n- [演示地址](#演示地址)\n\n- [开始使用](#开始使用)\n\n- [构建环境](#docker-compose)\n\n- [项目目录](#结构)\n\n- [分页](#分页)\n\n- [日志](#日志)\n\n- [数据库](#数据库)\n\n- [定时任务](#定时任务)\n\n- [配置文件](#配置文件)\n\n- [模板页面](#模板页面)\n\n- [用户权限](#用户权限)\n\n- [API文档](#API文档)\n\n- [线上部署](#线上部署)\n\n- [性能监控](#性能监控)\n\n- [命令行操作](#命令行操作)\n\n### :small_blue_diamond:\u003ca name=\"演示地址\"\u003e演示地址\u003c/a\u003e\n\n* http://122.152.196.83/admin/login  账号：admin 密码： 111111\n\n### :small_blue_diamond:\u003ca name=\"开始使用\"\u003e开始使用\u003c/a\u003e\n\n1. git 克隆地址 \n   \n   ```\n   git clone https://github.com/gphper/ginadmin.git\n   ```\n\n2. 下载依赖包\n   \n   ```go\n   go mod download\n   ```\n\n3. 配置 `configs/config.yaml`文件\n   \n   ```yaml\n   mysql:\n   -  name: \"default\"\n      username: \"root\"\n      password: \"123456\"\n      database: \"db_ginadmin\"\n      host: \"127.0.0.1\"\n      port: 3306\n      max_open_conn: 50\n      max_idle_conn: 20\n   redis:\n      addr: \"localhost:6379\"\n      db: 0\n      password: \"\"\n   session:\n      session_name: \"gosession_id\"\n   base:\n      host: 0.0.0.0\n      port: 20011\n      log_media: \"redis\"\n   ```\n\n4. 运行 `go run .\\cmd\\ginadmin`访问地址 http://localhost:端口地址/admin/login。默认账户：admin  密码：111111\n\n5. vscode调试配置文件 `launch.json`\n\n```json\n{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"ginadmin\",\n            \"type\": \"go\",\n            \"request\": \"launch\",\n            \"mode\": \"debug\",\n            \"program\": \"${workspaceRoot}/cmd/ginadmin\",\n            \"trace\": true,\n            \"args\":[\n                \"--root_path=${workspaceRoot}\"\n            ],\n        }\n}\n```\n\n### :small_blue_diamond:\u003ca name=\"docker-compose\"\u003e构建开发环境\u003c/a\u003e\n\n1. 替换conf目录下的配置项\n   \n   ```yaml\n   mysql:\n   -  name: \"default\"\n      username: \"docker\"\n      password: \"123456\"\n      database: \"docker_mysql\"\n      host: \"localmysql\"\n      port: 3306\n      max_open_conn: 50\n      max_idle_conn: 20\n   redis:\n      addr: \"localredis:6379\"\n      db: 0\n      password: \"ginadmin\"\n   session:\n      session_name: \"gosession_id\"\n   base:\n      host: 0.0.0.0\n      port: 20010\n      log_media: \"redis\"\n   ```\n\n2. 执行命令 `docker-compose up -d`\n\n3. 进入到容器中 `docker exec -it ginadmin-web bash`\n\n4. 下载扩展 `go mod tidy`\n\n5. 运行项目 ` go run ./cmd/ginadmin/ run`  访问地址 `http://localhost:20010/admin/login`\n\n6. 桌面连接redis地址\n   \n   ```\n   地址：127.0.0.1\n   端口：6380\n   密码：ginadmin\n   ```\n\n7. 桌面连接mysql地址\n   \n   ```\n   地址：localhost\n   端口：3310\n   用户名：docker\n   密码：123456\n   ```\n\n### :small_blue_diamond:\u003ca name=\"结构\"\u003e项目目录\u003c/a\u003e\n\n```\n|--api  // Api接口控制器\n|--build // 封装的公共方法\n|--cmd  // 命令行工具\n|--configs // 配置文件\n|--deployments // docker-compose 部署文件\n|--internal //核心代码\n|--logs // 日志存放目录\n|--pkg // 公共调用部分\n|--web //视图静态文件\n```\n\n### :small_blue_diamond:\u003ca name=\"分页\"\u003e分页\u003c/a\u003e\n\n1. 使用 `pkg/paginater/paginater.go` 里面的 `PageOperation` 进行分页\n   \n   ```go\n   adminDb := models.Db.Table(\"admin_users\").Select(\"nickname\",\"username\").Where(\"uid != ?\", 1)\n   adminUserData := paginater.PageOperation(c, adminDb, 1, \u0026adminUserList)\n   ```\n2. 在html中使用\n   \n   ```go\n   {{ .adminUserData.PageHtml }}\n   ```\n\n### :small_blue_diamond:\u003ca name=\"日志\"\u003e日志\u003c/a\u003e\n\n1. 系统日志\n   \n   设置路由中间件来收集系统日志和错误日志，设置 `internal/router/default.go` 文件\n\n2. 自定义日志\n   \n   使用 loggers.LogInfo()` 方法记录日志  `github.com/gphper/ginadmin/pkg/loggers`\n   \n   ```golang\n   loggers.LogInfo(\"admin\", \"this is a info message\", map[string]string{\n           \"user_info\": \"this is a user info\",\n   })\n   ```\n\n3. 切换存储介质\n   \n   在配置文件中修改 `log_media` 参数默认file文件存储可选redis存储\n\n### :small_blue_diamond:\u003ca name=\"数据库\"\u003e数据库\u003c/a\u003e\n\n1. models下定义的文件均需要实现 `TableName() string`  方法，并将实现该结构体的指针写入到 `GetModels` 方法中\n   \n   ```go\n   func GetModels() []interface{} {\n       return []interface{}{\n           \u0026AdminUsers{},\n           \u0026AdminGroup{},\n       }\n   }\n   ```\n\n2. model需要继承 BaseModle 并且实现 TableName 方法，如果需要初始化填充数据的话，需要实现 FillData() 方法，并将数据填充需要执行的代码写到函数体里。详情参照 AdminUsers\n\n### :small_blue_diamond:\u003ca name=\"定时任务\"\u003e定时任务\u003c/a\u003e\n\n- 在 `pkg/cron/cron.go`  添加定时执行任务\n\n### :small_blue_diamond:\u003ca name=\"配置文件\"\u003e配置文件\u003c/a\u003e\n\n1. 现在 `configs/config.go` 添加配置项的 struct 类型，例如\n   \n   ```go\n   type AppConf struct {\n       BaseConf `yaml:\"base\"`\n   }\n   type BaseConf struct {\n       Port string `yaml:\"port\"`\n   }\n   ```\n\n2. 在 `configs/config.yaml` 添加配置信息\n   \n   ```\n   base:\n      port: 20011\n   ```\n\n3. 在代码中调用配置文件的信息\n   \n   ```go\n   configs.App.BaseConf.Port\n   ```\n\n### :small_blue_diamond:\u003ca name=\"模板页面\"\u003e模板页面\u003c/a\u003e\n\n- 所有的后台模板都写到 `web/views/template` 目录下面，并且分目录存储，调用时按照 `目录/模板名称` 的方式调用\n\n### :small_blue_diamond:\u003ca name=\"用户权限\"\u003e用户权限\u003c/a\u003e\n\n- 菜单权限定义到 `internal/menu/menu.go` 文件下，定义完之后在用户组管理里面编辑权限\n\n- casbin版集成了casbin权限管理框架，官方地址：[casbin](#https://casbin.org/docs/zh-CN/get-started)\n\n- 框架中的常用方法定义在  `pkg/casbinauth/casbin.go` 文件中\n\n- 在控制器中可用从 `gin.context` 获取登录用户信息\n  \n  ```go\n  info,_ := c.Get(\"userInfo\")\n  ```\n\n- template 中判断权限的函数 `judgeContainPriv` 定义在 `pkg/template/default.go` 文件下\n  \n  ```go\n  \"judgeContainPriv\": func(username string, obj string, act string) bool {\n          if username == \"admin\" {\n              return true\n          }\n          ok, err := casbinauth.Check(username, obj, act)\n          if !ok || err != nil {\n              return false\n          }\n          return true\n  },\n  ```\n\n### :small_blue_diamond:\u003ca name=\"API文档\"\u003eAPI文档\u003c/a\u003e\n\n- 使用 swagg 生成api文档，生成文件再docs目录下\n  \n  ```\n  go install github.com/swaggo/swag/cmd/swag\n  swag init -g cmd/ginadmin/main.go\n  ```\n\n- 在根目录执行  `go run .\\cmd\\ginadmin\\ run` 然后啊访问 http://localhost:20010/swagger/index.html\n\n### :small_blue_diamond:\u003ca name=\"线上部署\"\u003e线上部署\u003c/a\u003e\n\n- 使用 `go build .\\cmd\\ginadmin`  生成二进制文件\n- 打包静态资源部署 `go build -tags=embed .\\cmd\\ginadmin` \n\n### :small_blue_diamond:\u003ca name=\"性能监控\"\u003e性能监控\u003c/a\u003e\n\n* 推荐使用 prometheus + grafana 进行性能监控，参考示例  https://github.com/gphper/ginmonitor\n\n### :small_blue_diamond:\u003ca name=\"命令行操作\"\u003e命令行操作\u003c/a\u003e\n\n*  运行程序命令\n```\nPS F:\\ginadmin\u003e go run .\\cmd\\ginadmin\\ run -h\nRun app\n\nUsage:\n  ginadmin run [flags]\n\nFlags:\n  -c, --config path string   config path\n  -h, --help                 help for run\n  -m, --mode string          dev or release (default \"dev\")\n```\n* 数据表迁移命令\n```\nPS F:\\ginadmin\u003e go run .\\cmd\\ginadmin\\ db migrate -h\nDB Migrate\n\nUsage:\n  ginadmin db migrate [-t table] [flags]\n\nFlags:\n  -c, --config path string   config path\n  -h, --help                 help for migrate\n  -t, --table string         input a table name\n```\n\n*  数据填充命令\n```\nPS F:\\ginadmin\u003e go run .\\cmd\\ginadmin\\ db seed -h   \nDB Seed\n\nUsage:\n  ginadmin db seed [-t table] [flags]\n\nFlags:\n  -c, --config path string   config path\n  -h, --help                 help for seed\n  -t, --table string         input a table name\n```","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgphper%2Fginadmin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgphper%2Fginadmin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgphper%2Fginadmin/lists"}