第十五节 Docker部署GitLab环境搭建

亮子 2021-06-08 07:06:10 22271 0 0 0

1、下载镜像文件

GitLab 分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。社区版是免费的,而企业版包含一些收费服务,一般来说个人开发者用社区版就足够了。

首先需要先下载 GitLab CE 的镜像,使用下面的命令进行下载,因为文件较大,所以可能需要一点时间,耐心等待即可。

# 下载指定版本
docker pull beginor/gitlab-ce:11.0.1-ce.0

# 下载最新版本
docker pull gitlab/gitlab-ce

图片alt

由于gitlab的镜像非常大,因此下载镜像是一个痛苦的事情,因此可以把下载下来的镜像保存,这样以后再用的时候就可以不用下载了。具体怎么做呢?

第一步:打包镜像

docker save -o gitlab-ce.tar gitlab/gitlab-ce:latest

第二步:导入镜像

docker load < gitlab-ce.tar

2、创建目录

通常会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外, 便于日后升级, 因此请先准备这三个目录。

mkdir -p /server/gitlab/config
mkdir -p /server/gitlab/logs 
mkdir -p /server/gitlab/data

图片alt

3、启动运行

docker run --detach \
  --hostname gitlab.shenmazong.com \
  --publish 9043:443 --publish 9044:80 --publish 9045:22 \
  --name gitlab \
  --restart always \
  --volume /server/gitlab/config:/etc/gitlab \
  --volume /server/gitlab/logs:/var/log/gitlab \
  --volume /server/gitlab/data:/var/opt/gitlab \
  --privileged=true \
  gitlab/gitlab-ce:latest

图片alt

命令说明:

  • --hostname gitlab.shenmazong.com: 设置主机名或域名
  • --publish 9043:443:将http:443映射到外部端口8443
  • --publish 9044:80:将web:80映射到外部端口8880
  • --publish 9045:22:将ssh:22映射到外部端口8222
  • --name gitlab: 运行容器名
  • --restart always: 自动重启
  • --volume /server/gitlab/config:/etc/gitlab: 挂载目录
  • --volume /server/gitlab/logs:/var/log/gitlab: 挂载目录
  • --volume /server/gitlab/data:/var/opt/gitlab: 挂载目录
  • --privileged=true 使得容器内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限

如果以上命令出现错误,可以试试下面命令:

docker run \
 -itd  \
 -p 9043:443 \
 -p 9044:80 \
 -p 9045:22 \
 -v /home/gitlab/etc:/etc/gitlab  \
 -v /home/gitlab/log:/var/log/gitlab \
 -v /home/gitlab/opt:/var/opt/gitlab \
 --restart always \
 --privileged=true \
 --name gitlab \
 gitlab/gitlab-ce:latest

4、查看运行状态

运行成功之后,可以使用下面的命令查看容器运行状态:

docker ps

图片alt

可以看到 GitLab 已经在运行了,有一个属性 STATUS 为 health: starting,说明 gitlab 的服务正在启动中,还没有启动完毕。等这个状态变成 healthy 时则说明已经部署完成,可以访问了。

图片alt

5、访问gitlab

gitlab启动成功后,浏览器访问http://ip:9044, 即可访问。

图片alt

第一次访问需要设置root用户的密码,这里设置成为Ab.123456,登录成功如下界面:

图片alt

可是最新的镜像,第一次登录,已经不让修改root密码了,必须通过一下命令,来查看root的初始密码:

docker exec -it gitlab cat /etc/gitlab/initial_root_password

图片alt

图片alt
然后点击Sign in,发现已经可以正常登录了。

图片alt

6、关闭注册功能

我这里用不到注册功能,所以我把注册功能给关掉了。

(1)点击关闭按钮

图片alt

(2)取消选中Sign-up enabled

图片alt

(3)最后点击save changes保存应用。

图片alt

7、修改密码

根据图示找到password按钮,进行修改密码操作。

图片alt

修改密码

图片alt

重新登录

图片alt

6、使用域名访问

(1)docker安装gitlab的时候,已经集成nginx只需要配置Nginx即可完成。

进入docker内部,编辑gitlab.rb文件

docker exec -it gitlab /bin/bash

(2)编辑如下文件:

vi /etc/gitlab/gitlab.rb
external_url 'https://gitlab.shenmazong.com'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.shenmazong.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.shenmazong.com.key"

nginx['proxy_set_headers'] = {
  "X-Forwarded-Proto" => "https",
  "X-Forwarded-Ssl" => "on"
 }

(3)修改nginx的配置文件

vi /var/opt/gitlab/nginx/conf/gitlab-http.conf

为了使用域名访问,需要配置nginx,修改nginx的配置文件nginx.conf如下,当然前提需要配置一下域名:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
	
	## gitlab
	upstream gitlab {
		server 192.168.198.129:9044;
	}
	
	server {
		listen 80;
		server_name gitlab.shenmazong.com;
		access_log /var/log/nginx/gitlab.shenmazong.com-access.log;
		error_log /var/log/nginx/gitlab.shenmazong.com-error.log;
		location / {
			proxy_pass_header Server;
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Scheme $scheme;
			proxy_pass http://gitlab;
		}
    }
}

图片alt

7、修改gitlab上git服务器的地址

新配置的gitlab服务器上代码地址,显示都是不正确的,如下图:

图片alt

(1)进入容器编辑gitlab.yml 文件

docker exec -it gitlab bash
cd /opt/gitlab/embedded/service/gitlab-rails/config
vi gitlab.yml

(2)修改 gitlab.yml 文件

修改前:

图片alt

修改后:

图片alt

(3)重启gitlab ,使之生效:gitlab-ctl restart

gitlab-ctl restart

图片alt

(4)查看效果

图片alt

8、配置邮件服务器

想要让 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

9、配置Git仓库访问路径

在之前第一次运行 gitlab 容器的时候,有一个参数 hostname 为 gitlab.shenmazong.com , 如果配置了域名可以忽略这一步,如果你没有配置相应域名的话,你的仓库的地址将会变为下面这样:

ssh : git@gitlab.shenmazong.com:test/test.githttp:gitlab.shenmazong.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 即可。

10、gitlab修改用户密码

由于在内网搭建的gitlab,所以注册邮件就算能发送出去,也无法通过链接来重置用户的密码,因此新创建的用户始终都无法登录。

通过查找资料,最有找到下面的方法,尝试是有效果的。

# 进入控制台gitlab-rails console# 查找用户user = User.find_by(email: '3350996729@qq.com')# user=User.where(name: "sph").first# 修改密码user.password='abcd.1234'# user.password_confirmation=12345678# 保存密码user.save!# 退出quit

11、使用key来访问仓库

1)、生成公私钥

找到git安装目录,具体目录如下:

cd D:\Program Files\Git\usr\binssh-keygen -t rsa -C "3350996729@qq.com"

图片alt

2)、上传公钥

进入用户目录下的.ssh目录下,复制id_rsa.pub文件中的公钥,放到gitlab服务器上。

图片alt