最近由于团队内部需要,在内网部署了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_dn
和base
的指向,同时关注自己试用的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)'