
Docker部署GitLab
GitLab简介
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。Gitlab是被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理, Gitlab主要针对group和project两个维度进行代码和文档管理, 其中group是群组, project是工程项目, 一个group可以管理多个project, 可以理解为一个群组中有多项软件开发任务, 而一个project中可能包含多个branch, 意为每个项目中有多个分支, 分支间相互独立, 不同分支可以进行归并。
使用镜像
本次使用的docker镜像是twang2218/gitlab-ce-zh,这个镜像是GitLab社区版本,保持原有功能的基础上支持中文汉化。开源仓库地址:https://github.com/twang2218/gitlab-ce-zh/
拉取镜像
docker pull twang2218/gitlab-ce-zh
运行容器
可以选择docker-compose运行:
version: '2'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh'
restart: unless-stopped
hostname: 'gitlab.example.com'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
# 需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。
# 比如下面的电子邮件的配置:
# gitlab_rails['smtp_enable'] = true
# gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
# gitlab_rails['smtp_port'] = 465
# gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
# gitlab_rails['smtp_password'] = "password"
# gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = true
# gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- config:/etc/gitlab
- data:/var/opt/gitlab
- logs:/var/log/gitlab
volumes:
config:
data:
logs:
也可以Docker选择直接运行
注意:此容器需要使用的端口为80、443、22,确保端口映射无占用。
docker run -d \
--hostname gitlab.example.com \
-p 3002:3002\
-p 443:443 \
-p 22:22 \
--name gitlab \
--restart unless-stopped \
-v gitlab-config:/etc/gitlab \
-v gitlab-logs:/var/log/gitlab \
-v gitlab-data:/var/opt/gitlab \
twang2218/gitlab-ce-zh
修改配置
进入容器内部
docker exec -it gitlab bash
打开配置文件
vi /etc/gitlab/gitlab.rb
修改external_url项目为GitLab访问地址,例如:
external_url 'http://192.168.1.24:3002/'
找到GitLab email server settings配置,修改对应的邮件服务器配置以接收邮件,例如:
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxx@xxxxx.com"
gitlab_rails['smtp_password'] = "xxxxxx"
gitlab_rails['smtp_domain'] = "exmail.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_ssl'] = true
gitlab_rails['gitlab_email_from'] = 'xxx@xxxxx.com'
重新加载配置文件 (很重要,否则会导致容器崩溃)
gitlab-ctl reconfigure
使用
打开浏览器
输入gitlab访问地址
设置初始密码
初始账户为:root
SSH配置
这里运行示例中,无论是使用 docker-compose.yml
还是 docker run
都使用的是 SSH 默认端口 22
去映射容器 SSH 端口。其目的是希望比较自然的使用类似 git@gitlab.example.com:myuser/awesome-project.git
的形式来访问服务器版本库。但是,宿主服务器上默认的 SSH 服务也是使用的 22 端口。因此默认会产生端口冲突。
修改容器的端口映射关系,比如将 -p 22:22
改为 -p 2222:22
,这样 GitLab 的 SSH 服务端口将是 2222
。这样做会让使用 GitLab 的 SSH 克隆、提交代码有些障碍。这种情况要改变用户使用 Git 的链接方式。
要从之前的:
git clone git@gitlab.example.com:myuser/awesome-project.git
改为明确使用 ssh://
的 URL 方式。
git clone ssh://git@gitlab.example.com:2222/myuser/awesome-project.git