Gitlab Docker部署+LDAP+SMTP

最近由于团队内部需要,在内网部署了Gitlab服务作为内部Git的协作平台。同时接入了内部的LDAP服务来提供用户登录的支持。

Docker & Docker compose部署

此配置将持久化数据和系统配置直接绑定在外部,方便迁移和调整配置。

Docker容器运行脚本

docker run \
    -itd \
    -p 222:222 \
    -p 12803:80 \
    --name gitlab-service \
    --log-opt max-size=5m \
    --restart unless-stopped \
    -v $PWD/config:/etc/gitlab \
    -v $PWD/logs:/var/log/gitlab \
    -v $PWD/data:/var/opt/gitlab \
    gitlab/gitlab-ce:14.9.5-ce.0

Docker compose.yml配置

version: '2'
services:
  gitlab:
    container_name: gitlab-service
    image: gitlab/gitlab-ce:14.10.5-ce.0
    hostname: "gitlab-labot"
    volumes:
      - ./logs:/var/log/gitlab
      - ./data:/var/opt/gitlab
      - ./config:/etc/gitlab
    ports:
      - 222:222
      - 8080:80
    restart: unless-stopped
    logging:
      driver: "json-file"
      options:
        max-size: "10m"

常用的基本配置

外部链接前缀

external_url 'http://git.example.cn'

SSH域名

gitlab_rails['gitlab_ssh_host'] = 'git.example.cn'

配置时区

gitlab_rails['time_zone'] = 'Asia/Shanghai'

修改端口

gitlab_rails['gitlab_shell_ssh_port'] = 222

服务升级与停机

需要依照官方文档的版本升级路线依次完成版本升级,跳级可能会引发一些异常错误。

官方文档:https://docs.gitlab.com/ee/update/index.html#upgrade-paths

再找到对应的版本后可以直接修改docker-compose中的版本,重新运行Docker容器即可

(升级前请备份持久化的数据。升级时间较久,请关注Docker logs的输出,对升级过程保持监控)

LDAP服务接入

在配置文件config/gitlab.rb中找到对应的配置项并修改。

在配置项中需要注意LDAP使用的bind_dnbase的指向,同时关注自己试用的LDAP服务是如何实施加密传输的:未加密(ldap://)、LDAP over SSL(ldaps://)、LDAP over TLS(STARTTLS)

gitlab_rails['ldap_enabled'] = true

gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
   main: # 'main' is the GitLab 'provider ID' of this LDAP server
     label: 'LDAP'
     host: 'ldap.example.cn'
     port: 636
     uid: 'uid'
     bind_dn: 'cn=admin,dc=example,dc=cn'
     password: 'example'
     encryption: 'ssl'
     verify_certificates: true
     smartcard_auth: false
     active_directory: false
     allow_username_or_email_login: true
     lowercase_usernames: false
     block_auto_created_users: false
     base: 'cn=users,dc=example,dc=cn'
     user_filter: ''
     attributes:
        username: ['uid']
        email: ['mail']
        name: ['displayName']
EOS

CE 本部中的EE only直接删除就好,没研究怎么破解或者升级到EE,用不到可以删。

踩坑提醒

在Gitlab安装完成后默认的超级管理员账户是root,你可以在管理界面修改它的邮箱。

但同时,Gitlab在获取LDAP账户信息时也会拉取邮箱信息,如果产生了冲突就会关闭本地账户。

上述两个操作可能会导致root账户被锁定,登录时报错:

Your account has been blocked. Please contact your GitLab administrator if you think this is an error.

解决方案是使用gitlab-rails进行特权管理

# Shell
sudo docker exec -it gitlab-service bin/bash

# Docker container
gitlab-rails console

# gitlab-rails
user = User.find_by_email('admin@example.cn')
user.state = "active"
user.save
exit

SMTP邮件服务器

可参考官方配置说明文档:https://docs.gitlab.com/omnibus/settings/smtp.html

# 发件服务器
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "admin@example.cn"
gitlab_rails['smtp_password'] = "example"
gitlab_rails['smtp_domain'] = "example.cn"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
# 发件人配置
gitlab_rails['gitlab_email_from'] = 'admin@example.cn'
gitlab_rails['gitlab_email_display_name'] = 'Admin(example)'

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注