GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过 Web 界面进行访问公开的或者私有的项目。GitLab 拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
0x01:yum 方式安装
- 基础依赖库安装
yum -y install curl policycoreutils openssh-server openssh-clients postfix
- 启动ssh服务 & 设置为开机启动
systemctl enable sshd && systemctl start sshd
- 设置 postfix 开机自启,并启动,postfix 支持 GitLab 发信功能
systemctl enable postfix && systemctl start postfix
- 开放 ssh 和 http服务,然后重新加载防火墙列表
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
如果关闭防火墙就不需要进行以上配置
- 安装 gitlab-ce
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
yum install -y gitlab-ce
GitLab 分为 gitlab-ce 社区版与 gitlab-ee 企业收费版两个版本,这里安装社区版。由于网络问题,国内用户,建议使用清华大学的镜像源进行安装。
添加 yum 源
vim /etc/yum.repos.d/gitlab-ce.repo
再打开的 /etc/yum.repos.d/gitlab-ce.repo 文件中添加以下内容
#在编辑器中输入如下内容保存
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
建立元数据缓存,并再次安装 GitLab
yum makecache
yum -y install gitlab-ce
安装成功出现以下信息
1/1 It looks like GitLab has not been configured yet; skipping the upgrade script.
*. *.
*** ***
***** *****
.****** *******
******** ********
,,,,,,,,,***********,,,,,,,,,
,,,,,,,,,,,*********,,,,,,,,,,,
.,,,,,,,,,,,*******,,,,,,,,,,,,
,,,,,,,,,*****,,,,,,,,,.
,,,,,,,****,,,,,,
.,,,***,,,,
,*,.
_______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
sudo gitlab-ctl reconfigure
For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=13-10
验证中 : gitlab-ce-13.10.2-ce.0.el7.x86_64 1/1
已安装:
gitlab-ce.x86_64 0:13.10.2-ce.0.el7
完毕!
- 修改 GitLab 配置
vi /etc/gitlab/gitlab.rb
- 修改 GitLab 访问地址和端口,默认为80,改为8082
external_url 'http://192.168.56.9:8082'
nginx['listen_port'] = 8082
- 重新加载配置及启动 GitLab
gitlab-ctl reconfigure
gitlab-ctl restart
- 把 8082 端口添加到防火墙
firewall-cmd --zone=public --add-port=8082/tcp --permanent
firewall-cmd --reload
启动成功后,使用以下命令查看 GitLab 的启动状态
gitlab-ctl status
看到以上输出说明启动成功
- 访问 http://192.168.56.9:8082
随后进入修改管理员 root 密码的页面,修改密码后,然后登录即可。
0x02:docker 方式安装
- Docker 安装服务实在是太方便,通过 docker 来安装 Gitlab,运行如下命令查看 Gitlab 的镜像文件
docker search gitlab
看到镜像有很多,第四个镜像是中文版的,英语不好可以安装中文版的。其实,中文版也就是安装了一个语言包而已,有兴趣可以自己安装第一个,然后再手动配置中文包。
- 获取 GitLab 镜像
docker pull gitlab/gitlab-ce
下载完毕后,先不急着运行 GitLab,为了避免容器运行时数据丢失,需要使用Docker volume(容器卷)方式来将数据映射到本地,这里创建 /usr/gitlab 目录来存放相应的数据,具体对应关系如下:
- 启动服务
docker run -d \
--publish 8443:443 --publish 8090:80 --publish 8022:22 \
--name gitlab \
--volume /usr/gitlab/config:/etc/gitlab \
--volume /usr/gitlab/logs:/var/log/gitlab \
--volume /usr/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
-d 在后台启动
-publish 8443:443 把容器中应用的端口443映射为外部的8443端口
-publish 8090:80 把容器中应用的端口80映射为外部的8090端口
--name 容器启动之后的名字
-volume 把容器中的配置,日志,数据映射到容器外部
通过 --name 配置了 GitLab 的名字之后,后续可以通过这个 name 对容器进行相关的启动和停止操作
- 查看启动情况
# 添加-a 参数,把启动的,没有启动的都列出来
docker ps -a
- 配置Gitlab
配置时,需要进入容器当中配置,如果直接修改映射到容器外部的配置文件,总会出现一些奇怪的问题,为了避免出现问题所以直接修改容器里的配置文件。
进入容器
docker exec -it gitlab bash
修改 /etc/gitlab/gitlab.rb 文件
vi /etc/gitlab/gitlab.rb
修改 IP 和端口
该部分内容的修改是为了解决,在 GitLab 创建项目时,项目访问地址是容器id 的问题
# 可以使用/ 来查找关键字,找到指定的内容,然后通过n来下一个查找
# 在gitlab创建项目时候http地址的host(不用添加端口)
external_url 'http://192.168.56.9:80'
# 在gitlab创建项目时候ssh地址的host
gitlab_rails['gitlab_ssh_host'] = '192.168.56.9'(不用添加端口)
# docker run 的时候我们把22端口映射为外部的8022了,这里修改下
gitlab_rails['gitlab_shell_ssh_port'] = 8022
另外,对应 ssh 的 22 端口的映射问题,第一种方案就是在 docker 启动 gitlab-ce 把 ssh 的 22 端口映射成另外的端口,然后修改 gitlab_shell_ssh_port 配置项为映射时的端口;另一种方案就是修改 ssh 的默认端口。修改 ssh 默认端口 22 的操作方案如下:
通常 gitlab 会与 gi t配置使用,而 git 会采用 ssh 协议来操作 git 仓库,而 gitlab-ce 连接宿主机时也使用 ssh,如果不修改默认 sshd 端口,git 使用默认配置就会出现问题,这里将主机的 sshd 端口从 22 端口改为其他端口,比如 2280。
1. 编辑 sshd_config 配置文件
vi /etc/ssh/sshd_config
将 #Port 22 注释去掉,将数字 22 更改为 2280。
2. 重启sshd服务
systemctl restart sshd
3. 配置firewall,使 2280 端口可以对外提供服务,否则无法使用 ssh 进行远程登录了。
semanage port -a -t ssh_port_t -p tcp 2280
firewall-cmd --permanent --add-port=2280/tcp
firewall-cmd --reload
简单来说一种就是修改 GitLab 容器相应的端口;另外一种就是修改宿主机 sshd 端端口。但生产环境通常会不启用 22 端口,避免被人恶意暴力尝试。
在 gitlab.rb 文件的最后添加如下配置 [ 也可以不添加 ]
# 是否启用
gitlab_rails['smtp_enable'] = true
# SMTP服务的地址
gitlab_rails['smtp_address'] = "smtp.qq.com"
# 端口
gitlab_rails['smtp_port'] = 465
# 你的QQ邮箱(发送账号)
gitlab_rails['smtp_user_name'] = "440902123@qq.com"
# 授权码
gitlab_rails['smtp_password'] = "kx1x@123dd"
# 域名
gitlab_rails['smtp_domain'] = "smtp.qq.com"
# 登录验证
gitlab_rails['smtp_authentication'] = "login"
# 使用了465端口,就需要配置下面三项
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
# 你的QQ邮箱(发送账号)
gitlab_rails['gitlab_email_from'] = '440902123@qq.com'
重新加载 GitLab 配置
gitlab-ctl reconfigure
修改 gitlab.yml 文件
cd /opt/gitlab/embedded/service/gitlab-rails/config
#修改port 为8090
vim gitlab.yml
重启 GitLab 服务
gitlab-ctl restart
GitLab 容器启动后,访问 http://92.168.56.9:8090 就可以进入 GitLab 访问页面,第一步要做的就是给 root 用户设置密码;设置完后,通过 root + 设置的密码就可以登录。为了方便管理,经常创建不同的组,然后通过不同的组来管理组下的成员。
一些常用命令
gitlab-ctl reconfigure # 重载配置
gitlab-ctl check-config # 检查配置并启动
gitlab-ctl diff-config # 将用户配置与包可用配置进行比较
gitlab-ctl status # 查看所有启动组件的进程和状态
gitlab-ctl service-list # 查看所有服务
gitlab-ctl stop # 停止GitLab服务
gitlab-ctl start # 启动GitLab服务
gitlab-ctl restart # 重启GitLab服务
gitlab-ctl once # 如果GitLab服务已停止则启动服务,如果GitLab服务已启动则重启GitLab服务