
1. 为什么选择Docker ComposeLDAPGerrit组合在中小型研发团队中代码审查常常面临两个痛点一是环境配置复杂二是账号体系分散。我去年给一个30人团队部署代码审计平台时传统方式花了3天调试各种依赖而用Docker ComposeLDAP方案2小时就完成了全流程部署。这个组合的黄金三角在于Docker Compose用YAML文件定义Gerrit、OpenLDAP、phpLDAPadmin的容器关系解决服务依赖和端口冲突OpenLDAP统一管理开发者账号Gerrit直接继承LDAP账号体系Gerrit提供Git仓库代码审查工作流支持Change-Id机制强制代码评审实测下来这套方案有三大优势一键部署docker-compose up -d就能拉起所有服务账号打通开发用LDAP账号直接登录Gerrit无需重复注册资源隔离每个服务运行在独立容器CPU/内存限制更安全2. 环境准备与Docker部署2.1 基础环境配置建议使用Ubuntu 20.04/22.04 LTS系统实测对Docker兼容性最好。以下是必须的硬件配置资源类型最低要求推荐配置CPU2核4核内存4GB8GB磁盘50GB100GB安装Docker和Docker Compose# 安装Docker引擎 sudo apt-get update sudo apt-get install -y docker.io # 安装Docker Compose sudo curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose2.2 目录结构规划我习惯将Gerrit数据放在/data目录下结构如下/data ├── docker-compose │ └── gerrit.yml # compose配置文件 └── gerrit ├── etc # Gerrit配置 ├── git # Git仓库 ├── ldap # LDAP数据 └── .ssh # SSH密钥创建目录并设置权限sudo mkdir -p /data/gerrit/{etc,git,ldap,.ssh} sudo chown -R 1000:1000 /data/gerrit # 适配Gerrit容器用户UID3. 编写Docker Compose文件3.1 完整配置示例这是我优化过的gerrit.yml增加了健康检查和资源限制version: 3.8 services: gerrit: image: gerritcodereview/gerrit:3.7.0 ports: - 29418:29418 # SSH端口 - 8080:8080 # HTTP端口 depends_on: ldap: condition: service_healthy volumes: - /data/gerrit/etc:/var/gerrit/etc - /data/gerrit/git:/var/gerrit/git - /data/gerrit/.ssh:/var/gerrit/.ssh environment: - CANONICAL_WEB_URLhttp://your-server-ip:8080 healthcheck: test: [CMD, curl, -f, http://localhost:8080/health] interval: 30s timeout: 10s retries: 3 deploy: resources: limits: cpus: 2 memory: 4G ldap: image: osixia/openldap:1.5.0 ports: - 389:389 - 636:636 environment: - LDAP_ADMIN_PASSWORDadmin123 - LDAP_TLSfalse volumes: - /data/gerrit/ldap/var:/var/lib/ldap - /data/gerrit/ldap/etc:/etc/ldap/slapd.d healthcheck: test: [CMD, ldapsearch, -x, -H, ldap://localhost:389, -b, dcexample,dcorg] interval: 30s timeout: 5s ldap-admin: image: osixia/phpldapadmin:0.9.0 ports: - 6443:443 environment: - PHPLDAPADMIN_LDAP_HOSTSldap depends_on: - ldap3.2 关键配置说明Gerrit部分CANONICAL_WEB_URL必须设置为外部访问地址通过healthcheck确保LDAP就绪后才启动限制CPU/内存防止OOMOpenLDAP部分禁用TLS简化测试环境配置健康检查通过ldapsearch验证服务phpLDAPadmin提供Web界面管理LDAP用户默认通过6443端口HTTPS访问4. Gerrit与LDAP集成配置4.1 初始化Gerrit配置创建/data/gerrit/etc/gerrit.config[gerrit] basePath git canonicalWebUrl http://your-server-ip:8080 [auth] type ldap gitBasicAuth true [ldap] server ldap://ldap username cnadmin,dcexample,dcorg accountBase dcexample,dcorg accountPattern ((objectClassperson)(uid${username})) accountFullName displayName accountEmailAddress mail [sshd] listenAddress *:29418 [httpd] listenUrl http://*:8080/创建/data/gerrit/etc/secure.config保存敏感信息[ldap] password admin1234.2 启动与初始化# 首次启动需要初始化 cd /data/docker-compose docker-compose -f gerrit.yml up -d # 查看初始化日志 docker logs -f gerrit # 初始化完成后注释command: init sed -i s/command: init/#command: init/g gerrit.yml docker-compose restart gerrit5. 用户管理与权限配置5.1 通过phpLDAPadmin创建用户访问https://your-server-ip:6443登录DN填cnadmin,dcexample,dcorg密码admin123创建组织单元oupeople,dcexample,dcorg在people下创建用户必填字段uid: 用户名userPassword: 密码mail: 邮箱displayName: 显示名称5.2 Gerrit权限组配置在Gerrit的All-Projects仓库中进入Access选项卡添加LDAP组如cndevelopers,ougroups,dcexample,dcorg分配权限Push: 允许推送到refs/for/*Label-Code-Review: -2~2权限Submit: 允许合并代码6. 代码审查工作流实战6.1 开发者提交代码git clone ssh://usernameyour-server-ip:29418/project.git cd project git commit -m fix login bug git push origin HEAD:refs/for/master6.2 审核者操作流程在Gerrit界面查看变更侧边栏查看差异对比点击行号添加评论使用1/-1进行评分管理员点击Submit按钮合并代码6.3 常见问题排查问题1LDAP登录失败检查gerrit.config的auth.typeldap验证LDAP服务端口389是否开放问题2推送被拒绝确认推送地址包含refs/for/前缀检查用户是否有Push权限问题3Change-Id缺失安装commit-msg钩子curl -Lo .git/hooks/commit-msg http://your-server-ip:8080/tools/hooks/commit-msg chmod x .git/hooks/commit-msg这套方案已经在多个20-50人团队稳定运行最大的优势是维护简单——升级时只需修改镜像版本号数据卷保持不变。对于需要更高可用性的场景可以考虑添加PostgreSQL和HAProxy容器实现数据库分离和负载均衡。