1.缘起
我曾经经历的公司强依赖openLDAP来作为企业内部员工管理的平台,并通过openLDAP进行各平台的认证打通工作。
但成也萧何败也萧何,给运维省力的同时,ldap又是维护不够友好的。
他说他对ldap又爱又恨,因为ldap出现的最早,许多的三方软件都兼容支持它,它成了这方面的一个标准。但问题在于,它对于维护者而言,又是复杂麻烦的。就算是有Phpldapadmin这样的平台能够在浏览器维护,但看到那样上古的界面,以及复杂的交互逻辑,仍旧能够把不少人劝退。
鉴于此,我开发了这个现代化的openLDAP管理后台。
2.在线体验
admin / 123456
演示地址:http://demo-go-ldap-admin.eryajf.net[2]
3.项目地址
4.核心功能
- 基于 GIN WEB API 框架,基于Casbin的 RBAC 访问控制模型,JWT 认证,Validator 参数校验
- 基于 GORM 的数据库存储
- 基于 go-ldap 库的主逻辑交互
- 用户管理
- 用户的增删改查
- 分组管理
Service | Port |
---|---|
MySQL | 3307:3306 |
openLDAP | 389:389 |
phpldapadmin | 8091:80 |
go-ldap-admin | 8090:80,8888:8888 |
拉起之前确认是否有与本地端口冲突的情况。
$ git clone https://github.com/eryajf-world/go-ldap-admin.git
$ cd docs/docker-compose
$ docker-compose up -d
当看到容器都正常运行之后,可以在本地访问:http://localhost:8090,用户名/密码:admin/123456
6.本地开发
前言准备
前提是已准备好MySQL与openLDAP,本地开发建议直接通过docker拉起即可,可参考文档:https://wiki.eryajf.net/pages/3a0d5f[3]。
拉取代码
# 后端代码
$ git clone https://github.com/eryajf-world/go-ldap-admin.git
# 前端代码
$ git clone https://github.com/eryajf-world/go-ldap-admin-ui.git
后端目录结构:
├─config # viper读取配置
├─controller # controller层,响应路由请求的方法
├─docs # 一些物料信息
├─logic # 主要的处理逻辑
├─middleware # 中间件
├─model # 结构体模型
├─public # 一些公共的,工具类的放在这里
├─routes # 所有路由
├─service # 整合与底层存储交互的方法
├─svc # 定义入参出参的结构体
└─test # 跑测试用的
更改配置
# 修改后端配置
$ cd go-ldap-admin
# 文件路径 config.yml
$ vim config.yml
# 根据自己本地的情况,调整数据库以及openLDAP的配置信息。
启动服务
# 启动后端
$ cd go-ldap-admin
$ go mod tidy
$ go run main.go
$ make run
# 启动前端
$ cd go-ldap-admin-ui
$ yarn
$ yarn dev
本地访问:http://localhost:8090,用户名/密码:admin/密码是配置文件中openLDAP中admin的密码。
7.生产部署
生产环境单独部署,通过Nginx代理服务,配置如下:
server {
listen 80;
server_name go-ldap-admin.eryajf.net;
root /data/www/web/dist;
location / {
try_files $uri $uri/ /index.html;
add_header Cache-Control 'no-store';
}
location /api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8888;
}
}
8.感谢
感谢如下优秀的项目,没有这些项目,不可能会有go-ldap-admin:
- 后端技术栈
- Gin-v1.6.3[4]
- Gorm-v1.20.12[5]
- Go-ldap-v3.4.2[6]
- Casbin-v2.22.0[7]
- 前端技术栈
- element-ui[8]
- axios[9]
- 另外感谢
- go-web-mini[10]:项目基于该项目重构而成,感谢作者的付出。
参考资料
[1]
godap: https://github.com/bradleypeabody/godap
[2]
http://demo-go-ldap-admin.eryajf.net: http://demo-go-ldap-admin.eryajf.net
[3]
https://wiki.eryajf.net/pages/3a0d5f: https://wiki.eryajf.net/pages/3a0d5f
[4]
Gin-v1.6.3: https://github.com/gin-gonic/gin
[5]
Gorm-v1.20.12: https://github.com/go-gorm/gorm
[6]
Go-ldap-v3.4.2: https://github.com/go-ldap/ldap
[7]
Casbin-v2.22.0: https://github.com/casbin/casbin
[8]
element-ui: https://github.com/ElemeFE/element
[9]
axios: https://github.com/axios/axios
[10]
go-web-mini: https://github.com/gnimli/go-web-mini