Docker 安装 Gitlab
#查找镜像
$ docker search gitlab
#拉取镜像
docker pull gitlab/gitlab-ce
#启动镜像
docker run -d \
--name docker-gitlab \
--restart always \
-p 30000:22 -p 30001:80 -p 30002:443 \
-v /Users/ct/etc/docker/gitlab/data:/var/opt/gitlab \
-v /Users/ct/etc/docker/gitlab/logs:/var/log/gitlab \
-v /Users/ct/etc/docker/gitlab/config:/etc/gitlab \
gitlab/gitlab-ce
其中-v选项将gitlab的目录挂载为本地目录,以免容器在停止或被删除的时候丢失数据。-p选项将宿主机器的30000、30001和30002映射为容器的22(ssh)、80(http)和443(https)端口。
#配置GitLab
GitLab的配置存储在/etc/gitlab/gitlab.rb文件中(对应本机:/Users/ct/etc/docker/gitlab/config/gitlab.rb)
需要修改的配置项:
external_url 'http://share.gitlab.com:30001' (注意端口号)
由于定义的url中有端口号,需要将nginx监听的端口号改回80,否则nginx将监听容器的30000端口,造成GitLab无法使用
nginx['listen_port'] = 80
配置ssh协议所使用的端口
gitlab_rails['gitlab_shell_ssh_port'] = 30000
#配置邮箱(参考文档:https://docs.gitlab.com/omnibus/settings/smtp.html)
gitlab_rails['gitlab_email_from'] = '[email protected]' #邮箱地址
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "******" #注意此处是申请的授权码而不是邮箱的密码
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
#邮件测试
进入gitlab容器
$ docker exec -it docker-gitlab /bin/bash
root@a970b4b0020a:/# gitlab-rails console
Loading production environment (Rails 4.2.10)
irb(main):001:0> Notify.test_email('[email protected]', 'Message Subject', 'Message Body').deliver_now
Notify#test_email: processed outbound mail in 189.0ms
Sent mail to [email protected] (1190.5ms)
Date: Mon, 02 Apr 2018 07:57:25 +0000
From: GitLab <[email protected]>
Reply-To: GitLab <[email protected]>
Message-ID: <[email protected]>
Subject: Message Subject
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Message Body</p></body></html>
=> #<Mail::Message:69956544660360, Multipart: false, Headers: <Date: Mon, 02 Apr 2018 07:57:25 +0000>, <From: GitLab <[email protected]>>, <Reply-To: GitLab <[email protected]>>, <To: [email protected]>, <Message-ID: <[email protected]>>, <Subject: Message Subject>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>
irb(main):002:0>
最后,在浏览器中访问以下地址:
http://share.gitlab.com:30001(默认用户名和密码:root / 5iveL!fe)
注:首次登录会强制用户修改密码。密码修改成功后,输入新密码进行登录
另:
#如果报错: Net::ReadTimeout,可能是下面几个没有配置
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_ssl'] = true
#限制普通用户创建组
gitlab_rails['gitlab_default_can_create_group'] = false
#project和group权限等级
Private:只有授权的用户才可以看到
Internal:只要是登录上来的用户就可以看到
Public:任何组和项目都可以看到
#配置使用Git仓库的人员姓名
$ git config --global user.name "share"
#配置使用Git仓库的人员email,填写自己的公司邮箱
$ git config --global user.email "[email protected]"
git仓库将存放在目录/Users/ct/etc/docker/gitlab/data/git-data/repositories/下,gitlab允许创建组,将多个仓库纳入到一个组中,每个组在repositories下面对应于一个与组名称相同的子目录
导入仓库时,利用sudo chown命令,将仓库的拥有者的用户名和组名改为和repositories目录的拥有者相同,以保证gitlab可以访问该仓库。
GitLib有五种身份权限,分别是:
Owner 项目所有者,拥有所有的操作权限
Master 项目的管理者,除更改、删除项目元信息外其它操作均可
Developer 项目的开发人员,做一些开发工作,对受保护内容无权限
Reporter 项目的报告者,只有项目的读权限,可以创建代码片断
Guest 项目的游客,只能提交问题和评论内容