GitLab是一个开源的Git仓库管理工具,用于版本控制、代码审查、问题跟踪和持续集成等。它提供了一个集成的开发环境,使团队成员可以在一个平台上协同开发和管理项目。本文介绍如何在Ubuntu或RHEl上安装GitLab,及其常见的使用教程。
GItlab 提供企业版(Gitlab EE)和社区版(Gitlab CE)。在这篇文章中,我们将介绍社区版。
准备工作
- 运行Ubuntu或RHEl且具有 SSH 访问权限的虚拟或专用服务器。
- 具有管理员权限的 Sudo 用户
- 4核或更多的CPU(建议的最小内核数为 4 个,最多支持 500 个用户)
- 4G及以上的内存(4 GB RAM 是所需的最小内存大小,最多支持 500 个用户)
官方推荐:https://docs.gitlab.com/ee/install/requirements.html
安装GitLab
本文介绍以下两种方式,安装方式差异说明如下,您可以根据需要选择其中一种方式:
差异 |
Linux安装包 |
Docker Engine |
安装方式 |
可以在Linux系统中直接运行安装包进行安装。 |
通过在Docker Engine上运行GitLab容器来实现安装。 |
系统依赖性 |
依赖于特定的系统运行库和依赖项,需要根据操作系统版本和配置进行相应的安装和配置。 |
不需要考虑Docker所在实例系统的依赖性,所有的依赖关系都被包含在Docker镜像中。 |
灵活性和可移植性 |
提供了更多的灵活性和自定义选项,可以根据需求进行自定义配置和调整。但是,可能需要更多的系统管理和维护工作。 |
提供了更高的可移植性和一致性,可以在不同的环境中轻松部署和运行GitLab容器。 |
版本管理 |
通常需要手动管理和升级GitLab的版本,需要下载更新的安装包并进行相应的升级操作。 |
可以通过拉取更新的Docker镜像来实现版本管理,只需简单地重新运行容器即可。 |
系统资源利用 |
运行在虚拟机或主机上,会占用一定的系统资源。 |
将GitLab作为一个容器运行,可以更有效地利用系统资源,并且容器之间相互隔离,不会对宿主机产生影响。 |
使用Linux安装包安装GitLab
安装GitLab所需的依赖包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $ sudo apt-get update $ sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
$ sudo dnf install postfix $ sudo systemctl enable postfix $ sudo systemctl start postfix
$ sudo dnf install -y curl policycoreutils openssh-server perl
$ sudo systemctl enable sshd $ sudo systemctl start sshd
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https $ sudo systemctl reload firewalld
|
添加GitLab软件包仓库
1 2 3 4 5
| $ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
|
安装Gitlab
1 2 3 4 5
| $ sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ce
$ sudo EXTERNAL_URL="https://gitlab.example.com" dnf install -y gitlab-ee
|
EXTERNAL_URL可以填写ip也可以填写域名
使用Docker安装GitLab
安装docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
$ sudo apt-get update $ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get -y update $ sudo apt-get -y install docker-ce
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
$ sudo yum makecache fast $ sudo yum -y install docker-ce
$ sudo service docker start
|
启动Docker服务,并设置开机自启动
1 2
| $ sudo systemctl start docker $ sudo systemctl enable docker
|
创建Docker容器的挂载数据目录
1
| $ sudo mkdir -p /srv/gitlab
|
GitLab 容器使用主机挂载的卷来存储持久化数据:
本地路径 |
容器路径 |
作用 |
/srv/gitlab/data |
/var/opt/gitlab |
用于存储应用程序数据。 |
/srv/gitlab/logs |
/var/log/gitlab |
用于存储日志。 |
/srv/gitlab/config |
/etc/gitlab |
用于存储 GitLab 配置文件。 |
安装GitLab容器镜像
1 2 3 4 5 6 7 8 9 10
| sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 8080:80 --publish 5000: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 \ --shm-size 256m \ gitlab/gitlab-ce:latest
|
HTTP端口:8080
HTTPS端口:443
SSH端口:5000
冒号前是映射到宿主机的端口,冒号后是容器使用的端口
查看容器状态
初始化过程可能需要很长时间。您可以通过以下方式跟踪此过程:
1
| $ sudo docker logs -f gitlab
|
使用Gitlab
获取GitLab的登录密码
- Linux安装包方式:
sudo cat /etc/gitlab/initial_root_password
- Docker Engine安装方式:
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
出于安全原因,24小时后,该文件会被自动删除,建议您安装成功,首次登录之后,立即修改初始密码。
登录GitLab
- Linux安装包方式:在浏览器的地址栏中,输入
http://主机IP
即可进入GitLab的登录界面。
- Docker安装方式:在浏览器的地址栏中,输入
http://主机IP:8080
即可进入GitLab的登录界面。
首次登录使用用户名root
,密码为步骤1获取的密码。
创建项目
1、在GitLab的主页中,单击Create a project。
2、单击Create blank project,设置Project name和Project URL,然后单击Create project。
本文以mywork项目为例进行说明。
配置免密pull/push(也可以选择使用账号密码)
1 2 3 4 5 6 7 8 9
| $ sudo yum install git
$ ssh-keygen
$ cat ~/.ssh/id_rsa.pub
|
添加SSH key
在当前project页面,单击Add SSH key。
将公钥文件id_rsa.pub
中的内容粘贴到Key
所在的文本框中。
单击Add key。
SSH Key添加完成后,如下图所示。
复制Clone链接,该链接在进行克隆操作时需要使用。
配置使用Git仓库的人员信息。
配置使用Git仓库的人员姓名。
1
| git config --global user.name "testname"
|
配置使用Git仓库的人员邮箱。
1
| git config --global user.email "abc@example.com"
|
克隆已创建的项目到本地。
1
| git clone git@101.132.XX.XX:root/mywork.git
|
- 上传文件到GitLab服务器。
a. 进入到项目目录。
b. 创建需要上传到GitLab中的目标文件。
1
| echo "test" > /home/test/test.sh
|
c. 将目标文件或者目录复制到项目目录下。
1
| cp /home/test/test.sh ./
|
d. 将test.sh
文件加入到索引中。
e. 将test.sh
提交到本地仓库。
f. 将文件同步到GitLab服务器上。
在网页中查看上传的test.sh
文件已经同步到GitLab服务器中。
如果您想了解更多的Gitlab操作,例如GitLab常用命令、数据备份、配置选项、用户管理、与其他服务集成、故障排除等,请参见GitLab官方文档。
Gitlab配置
配置访问域名
1 2 3 4 5
| $ vim /srv/gitlab/config/gitlab.rb
external_url 'https://example.com'
letsencrypt['contact_emails'] = ['sammy@example.com']
|
配置SMTP
1 2 3 4 5 6 7 8 9 10 11
| $ vim /srv/gitlab/config/gitlab.rb gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.exmail.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "xxxx@xx.com" gitlab_rails['smtp_password'] = "password" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com' gitlab_rails['smtp_domain'] = "exmail.qq.com"
|
使用自定义证书
可使用自签名证书或 Let’s Encrypt 为 GitLab 实例配置 HTTPS,这里我们配置自定义证书
1 2 3 4 5 6 7 8 9
|
sudo vim /srv/gitlab/config/gitlab.rb
external_url 'https://域名' nginx['enable'] = true nginx['redirect_http_to_https'] = true nginx['ssl_certificate'] = "/etc/gitlab/ssl/域名的ssl证书.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/域名的ssl证书.key"
|
证书可以通过域名服务商获取也可以使用自签名证书,以下是自签名证书步骤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| $ sudo mkdir /srv/gitlab/ssl $ sudo chmod 755 /srv/gitlab/ssl $ sudo openssl genrsa -des3 -out /srv/gitlab/ssl/域名.key 2048
$ sudo openssl req -new -key /srv/gitlab/ssl/域名.key -out /srv/gitlab/ssl/域名.csr
$ sudo cp -v /srv/gitlab/ssl/域名.{key,original} $ sudo openssl rsa -in //srv/gitlab/ssl/域名.original -out /srv/gitlab/ssl/域名.key $ sudo rm -v /srv/gitlab/ssl/域名.original
$ sudo openssl x509 -req -days 1460 -in /srv/gitlab/ssl/域名.csr -signkey /srv/gitlab/ssl/域名.key -out /srv/gitlab/ssl/域名.crt
$ sudo rm -v /srv/gitlab/ssl/域名.csr
$ sudo chmod 600 /srv/gitlab/ssl/域名.key $ sudo chmod 600 /srv/gitlab/ssl/域名.crt
|
相关命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
gitlab-ctl check-config
gitlab-ctl restart
gitlab-ctl start
gitlab-ctl status
gitlab-ctl stop
gitlab-ctl service-list
gitlab-ctl tail
gitlab-ctl reconfigure
|