参照https://segmentfault.com/a/1190000019772866安装
1、查找镜像
docker search git
2、下载镜像
docker pull gitlab/gitlab-ce
3、创建目录
mkdir -p /srv/gitlab/config
mkdir -p /srv/gitlab/logs
mkdir -p /srv/gitlab/data
通常会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外, 便于日后升级, 因此请先准备这三个目录。
4、启动运行
docker run --detach \
--hostname gitlab.example.com \
--publish 8443:443 --publish 8880:80 --publish 8222:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
--privileged=true \
gitlab/gitlab-ce:latest
说明:
--hostname gitlab.example.com: 设置主机名或域名
--publish 8443:443:将http:443映射到外部端口8443
--publish 8880:80:将web:80映射到外部端口8880
--publish 8222:22:将ssh:22映射到外部端口8222
--name gitlab: 运行容器名
--restart always: 自动重启
--volume /srv/gitlab/config:/etc/gitlab: 挂载目录
--volume /srv/gitlab/logs:/var/log/gitlab: 挂载目录
--volume /srv/gitlab/data:/var/opt/gitlab: 挂载目录
--privileged=true 使得容器内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
运行成功之后,可以使用下面的命令查看容器运行状态:
docker ps
可以看到 GitLab 已经在运行了,有一个属性 STATUS 为 health: starting,说明 gitlab 的服务正在启动中,还没有启动完毕。 等这个状态变成 healthy 时则说明已经部署完成,可以访问了。
5、访问
gitlab启动成功后,浏览器访问http://ip:8880, 即可访问
ps:此处会有问题,访问不到,详情见下“遇到问题”;
6、配置邮箱服务
想要让 GitLab 给你发送邮件,还要配置一下邮件服务器,这里以QQ邮箱的 IMAP/SMTP服务 来配置。
打开邮箱->设置->账户,然后开启 IMAP/SMTP服务,然后根据文档获取 授权码 ,这步比较重要。
然后跳转至挂载目录 /srv/gitlab/config/ 编辑gitlab.rb 文件,找到 Email Settings的注释位置,然后修改以下内容:
### Email Settings
gitlab_rails['smtp_enable'] = true # 开启 SMTP 功能
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465 # 端口不可以选择587,测试过会发送邮件失败
gitlab_rails['smtp_user_name'] = "test@qq.com" # 你的邮箱账号
gitlab_rails['smtp_password'] = "1324dasd" # 授权码,不是密码
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'test@qq.com' # 发件人信息,必须跟‘smtp_user_name’保持一致,否则报错
gitlab_rails['smtp_domain'] = "qq.com" # 修改并不影响
配置完成后保存,然后输入下面的命令使配置生效。
sudo docker exec gitlab gitlab-ctl reconfigure
使配置生效之后我们可以使用 gitlab 自带的工具进行一下测试。依次执行下面的命令:
# 开启 gitlab 的 bash 工具
$ docker exec -it gitlab bash
# 开启 gitlab-rails 工具
$ gitlab-rails console production
# 发送邮件进行测试
Notify.test_email('test_001@123.com', 'Message Subject', 'Message Body').deliver_now
测试完成之后退出gitlab的bash工具,重启 gitlab 即可。
$ docker restart gitlab
发现问题
通过url 访问不到git
解决问题
博主给出的方案:
在之前第一次运行 gitlab 容器的时候,有一个参数 hostname 为 gitlab.example.com , 如果配置了域名可以忽略这一步,如 果你没有配置相应域名的话,你的仓库的地址将会变为下面这样:
ssh : git@gitlab.example.com:test/test.git
http:gitlab.example.com/test/test.git
如果域名不存在的话,这个地址是无法进行 clone 的。
为了解决这个问题,我们可以设置成 IP 或 你配置了的域名来访问。
打开文件 /srv/gitlab/config/gitlab.rb 文件并找到
# external_url 'GENERATED_EXTERNAL_URL'
这行,去掉注释,并按照下面的格式修改。
# ip 形式
external_url 'http://192.168.1.44'
# 域名形式
external_url 'http://JemGeek.com'
# 子域名
external_url 'http://gitlab.JemGeek.com'
# 其他形式
external_url 'http://JemGeek.com/gitlab'
以上形式都是可以的。修改完成后,输入命令:
$ docker exec gitlab gitlab-ctl reconfigure
使配置生效,然后重启 gitlab 即可。
ps 并没有解决问题
后查找到的解决方案:
方法1(装载https://www.jianshu.com/p/d707f70c60d2):
问题的原因就出在external_url地址设置上。
GitLab默认的http访问端口号为80端口,如果想更改端口号,一般是通过docker run时设置端口映射,将80端口映射为其他 端口。例如:
这里将GitLab的http端口改为8080,如果你这时修改external_url地址为http://ip:8080,那GitLab肯定访问不了,因为你已经 将内部的端口号修改为8080端口了,而你通过docker run映射出来的端口号是80端口,所以不可能访问到。那该怎么办?
既然你已经将内部的端口号由80端口改为8080端口,这时候你就将容器停止并删除,但是不要将映射的配置文件删除 (gitlab.rb文件),docker在删除容器的时候不会将映射的文件删除。在此运行docker run命令,如下
注意这里映射的端口为8080端口,根据自己设置的external_url端口号进行调整
接下来就能访问GitLab了,并且在checkout检出地址栏中,http地址端口号也正确了。
方法2:(未亲测,但觉得应该可行)
我的方法是:假设期望的外部地址为 http://gitlab.example.com:50000/
1. 修改之前的映射端口:
1) 找到 gitlab dockerId (docker ps)
2) 停止所有 docker实例
3)停止docker服务 systemctl stop docker
4) cd /var/lib/docker/containers/<docker-id>
5) 编辑 hostconfig.json 和 config.v2.json 中相关的映射端口(找到 80 改成 50000)
2. 修改external_url为实际的外部地址 url+port
1) 编辑 gitlab.rb文件 external_url = gitlab.example.com:50000
2) systemctl start docker
3) start docker gitlab
浏览器访问
浏览器可以正常访问