GitLab 分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。社区版是免费的,而企业版包含一些收费服务,一般来说个人开发者用社区版就足够了。
首先需要先下载 GitLab CE 的镜像,使用下面的命令进行下载,因为文件较大,所以可能需要一点时间,耐心等待即可。
# 下载指定版本
docker pull beginor/gitlab-ce:11.0.1-ce.0
# 下载最新版本
docker pull gitlab/gitlab-ce
由于gitlab的镜像非常大,因此下载镜像是一个痛苦的事情,因此可以把下载下来的镜像保存,这样以后再用的时候就可以不用下载了。具体怎么做呢?
第一步:打包镜像
docker save -o gitlab-ce.tar gitlab/gitlab-ce:latest
第二步:导入镜像
docker load < gitlab-ce.tar
通常会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外, 便于日后升级, 因此请先准备这三个目录。
mkdir -p /server/gitlab/config
mkdir -p /server/gitlab/logs
mkdir -p /server/gitlab/data
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
命令说明:
如果以上命令出现错误,可以试试下面命令:
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
运行成功之后,可以使用下面的命令查看容器运行状态:
docker ps
可以看到 GitLab 已经在运行了,有一个属性 STATUS 为 health: starting,说明 gitlab 的服务正在启动中,还没有启动完毕。等这个状态变成 healthy 时则说明已经部署完成,可以访问了。
gitlab启动成功后,浏览器访问http://ip:9044, 即可访问。
第一次访问需要设置root用户的密码,这里设置成为Ab.123456,登录成功如下界面:
可是最新的镜像,第一次登录,已经不让修改root密码了,必须通过一下命令,来查看root的初始密码:
docker exec -it gitlab cat /etc/gitlab/initial_root_password
然后点击Sign in,发现已经可以正常登录了。
我这里用不到注册功能,所以我把注册功能给关掉了。
(1)点击关闭按钮
(2)取消选中Sign-up enabled
(3)最后点击save changes保存应用。
根据图示找到password按钮,进行修改密码操作。
修改密码
重新登录
(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;
}
}
}
新配置的gitlab服务器上代码地址,显示都是不正确的,如下图:
(1)进入容器编辑gitlab.yml 文件
docker exec -it gitlab bash
cd /opt/gitlab/embedded/service/gitlab-rails/config
vi gitlab.yml
(2)修改 gitlab.yml 文件
修改前:
修改后:
(3)重启gitlab ,使之生效:gitlab-ctl restart
gitlab-ctl restart
(4)查看效果
想要让 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
在之前第一次运行 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 即可。
由于在内网搭建的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
找到git安装目录,具体目录如下:
cd D:\Program Files\Git\usr\binssh-keygen -t rsa -C "3350996729@qq.com"
进入用户目录下的.ssh目录下,复制id_rsa.pub文件中的公钥,放到gitlab服务器上。