docker-compose在本地快速拉起测试环境
# 前言
注意
如果你对docker-compose不怎么熟悉,那么可以选择生产环境部署流程的方式进行部署。 如需在生产环境使用docker-compose进行部署,请自行调整compose文件内容进行部署。
你可以通过docker-compose在本地快速拉起进行体验。
快速拉起的容器包括:
- MySQL-5.7
- openLDAP-1.4.0
- phpldapadmin-0.9.0
- go-ldap-admin-server
- go-ldap-admin-ui
# 端口列表
服务端口映射如下:
Service | Port(宿主机端口:容器端口) |
---|---|
MySQL | 3307:3306 |
openLDAP | 389:389 |
phpldapadmin | 8091:80 |
go-ldap-admin | 8090:80 ,8888:8888 |
拉起之前确认是否有与本地端口冲突的情况。
# 执行拉起
$ git clone https://github.com/eryajf/go-ldap-admin.git
$ cd docs/docker-compose
$ docker-compose up -d
2
3
4
5
当看到容器都正常运行之后,可以在本地进行访问:http://localhost:8090,用户名/密码:admin
/123456
如果想要访问PhpLdapAdmin,则可访问:http://localhost:8091,用户名/密码:cn=admin,dc=eryajf,dc=net
/123456
如果并非通过localhost本机部署,则使用对应主机的IP加端口进行访问即可,例如你部署在 192.168.10.10 这台主机,则前端访问地址应该为:http://192.168.10.10:8090
# 服务验证
项目拉起之后,可通过如下命令验证各容器启动状态:
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------------------------------
go-ldap-admin-mysql /entrypoint.sh --default-a ... Up (healthy) 0.0.0.0:3307->3306/tcp,:::3307->3306/tcp, 33060/tcp
go-ldap-admin-openldap /container/tool/run --copy ... Up 0.0.0.0:388->389/tcp,:::388->389/tcp, 636/tcp
go-ldap-admin-phpldapadmin /container/tool/run Up 443/tcp, 0.0.0.0:8091->80/tcp,:::8091->80/tcp
go-ldap-admin-server /bin/sh -c ./wait && ./go- ... Up 0.0.0.0:8888->8888/tcp,:::8888->8888/tcp
go-ldap-admin-ui /bin/sh -c nginx -g "daemo ... Up 0.0.0.0:8090->80/tcp,:::8090->80/tcp
2
3
4
5
6
7
8
通过如下命令,可以验证后端服务是否正常:
$ curl -s localhost:8888/api/base/ping | jq
{
"code": 200,
"data": "pong",
"msg": "ok"
}
2
3
4
5
6
# 配置说明
进入到docker-compose目录之后,目录层级与内容如下:
$ tree -N docker-compose
docker-compose
├── config
│ ├── init.ldif
│ └── my.cnf
└── docker-compose.yaml
1 directory, 3 files
2
3
4
5
6
7
8
先来看主配置文件docker-compose.yaml
:
version: '3'
networks:
go-ldap-admin:
driver: bridge
services:
mysql:
image: dockerproxy.com/mysql/mysql-server:5.7
container_name: go-ldap-admin-mysql # 指定容器名称,如果不设置此参数,则由系统自动生成
hostname: go-ldap-admin-mysql
restart: always # 设置容器自启模式
ports:
- '3307:3306'
environment:
TZ: Asia/Shanghai # 设置容器时区与宿主机保持一致
MYSQL_ROOT_PASSWORD: 123456 # 设置root密码
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: go_ldap_admin
volumes:
# 数据挂载目录自行修改哦!
- /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致
- ./data/mysql:/var/lib/mysql/data # 映射数据库保存目录到宿主机,防止数据丢失
- ./config/my.cnf:/etc/mysql/my.cnf # 映射数据库配置文件
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
- go-ldap-admin
openldap:
image: dockerproxy.com/osixia/openldap:1.4.0
container_name: go-ldap-admin-openldap
hostname: go-ldap-admin-openldap
restart: always
environment:
TZ: Asia/Shanghai
LDAP_ORGANISATION: "eryajf.net"
LDAP_DOMAIN: "eryajf.net"
LDAP_ADMIN_PASSWORD: "123456"
command: [ '--copy-service' ]
volumes:
- ./data/openldap/database:/var/lib/ldap
- ./data/openldap/config:/etc/ldap/slapd.d
- ./config/init.ldif:/container/service/slapd/assets/config/bootstrap/ldif/custom/init.ldif
ports:
- 388:389
networks:
- go-ldap-admin
phpldapadmin:
image: dockerproxy.com/osixia/phpldapadmin:0.9.0
container_name: go-ldap-admin-phpldapadmin
hostname: go-ldap-admin-phpldapadmin
restart: always
environment:
TZ: Asia/Shanghai # 设置容器时区与宿主机保持一致
PHPLDAPADMIN_HTTPS: "false" # 是否使用https
PHPLDAPADMIN_LDAP_HOSTS: go-ldap-admin-openldap # 指定LDAP容器名称
ports:
- 8091:80
volumes:
- ./data/phpadmin:/var/www/phpldapadmin
depends_on:
- openldap
links:
- openldap:go-ldap-admin-openldap # ldap容器的 service_name:container_name
networks:
- go-ldap-admin
go-ldap-admin-server:
image: dockerproxy.com/eryajf/go-ldap-admin-server
container_name: go-ldap-admin-server
hostname: go-ldap-admin-server
restart: always
environment:
TZ: Asia/Shanghai
WAIT_HOSTS: mysql:3306, openldap:389
ports:
- 8888:8888
# volumes: # 可按需打开此配置,将配置文件挂载到本地 可在服务运行之后,执行 docker cp go-ldap-admin-server:/app/config.yml ./config 然后再取消该行注释
# - ./config/config.yml:/app/config.yml
depends_on:
- mysql
- openldap
links:
- mysql:go-ldap-admin-mysql # ldap容器的 service_name:container_name
- openldap:go-ldap-admin-openldap # ldap容器的 service_name:container_name
networks:
- go-ldap-admin
go-ldap-admin-ui:
image: dockerproxy.com/eryajf/go-ldap-admin-ui
container_name: go-ldap-admin-ui
hostname: go-ldap-admin-ui
restart: always
environment:
TZ: Asia/Shanghai
ports:
- 8090:80
depends_on:
- go-ldap-admin-server
links:
- go-ldap-admin-server:go-ldap-admin-server
networks:
- go-ldap-admin
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
说明:
MySQL已经初始化创建了go_ldap_admin库,并且授权允许远程访问。
openLDAP通过配置挂载的方式,已初始化了部分dn,以辅助平台功能演示,具体内容如下:
dn: ou=people,dc=eryajf,dc=net ou: people description: 用户根目录 objectClass: organizationalUnit dn: ou=dingtalkroot,dc=eryajf,dc=net ou: dingtalkroot description: 钉钉根部门 objectClass: top objectClass: organizationalUnit dn: ou=wecomroot,dc=eryajf,dc=net ou: wecomroot description: 企业微信根部门 objectClass: top objectClass: organizationalUnit dn: ou=feishuroot,dc=eryajf,dc=net ou: feishuroot description: 飞书根部门 objectClass: top objectClass: organizationalUnit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22此compose文件中的镜像均已支持AMD与ARM架构,目前在M1版Mac电脑,Inter版CentOS7系统中测试通过。如果你在部署过程中遇到架构兼容问题,请在项目issue (opens new window)中反馈。
考虑到大多数开发者在国内拉取dockerhub镜像并不顺畅,因此默认添加了上海交通大学的加速代理,详情参考这个项目:Thanks-Mirror (opens new window)。
两个服务镜像:
eryajf/go-ldap-admin-server
,eryajf/go-ldap-admin-ui
均使用latest标签,将会在每次项目主分支被合并之后自动构建,如果你想要升级项目,请先将本地镜像删除,然后重新拉取最新镜像。