gitlab搭建
详情查看安装文档:
本文简单介绍docker搭建和本地搭建两种方式
docker安装
安装docker
这里以centos系统为例,其他系统也一样
在官方文档找到对应系统的安装介绍,然后排查一下自己的系统是否满足要求,移除旧版本docker和检查自己的内存是否充足
bash
## 查看系统的版本信息
cat /etc/os-release lsb_release -a
我的系统刚好是centos7,然后系统之前没有安装docker,但是请注意,docker安装gitlab需要一定的磁盘容量,需要检查一下自己的磁盘够不够,可以通过top命令查看具体数据,如果不够,可以通过命令删除一些文件
ini
du -ah --max-depth=1
gitlab安装
推荐两种安装方式,一种docker,一种本地安装(无网络)
两个前提条件:先按照前面的步骤安装好docker,还有可以访问的外部host名,我的理解就是一个可用的ip
我装的是社区版本,可以来这里查看需要安装的版本,比如我安装的是gitlab/gitlab-ce:16.10.6-ce.0,
那么执行
bash
sudo docker run --detach \
--hostname gitlab.example.com \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://43.159.35.99'" \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ce:16.10.6-ce.0即可
rpm包安装
详情可以参考这里
去官方网站下载安装包,社区版ce,企业版ee
packages.gitlab.com/gitlab/gitl...
packages.gitlab.com/gitlab/gitl...
然后根据自己的系统对应的 Distro/Version(系统版本)下载文件,如果不清楚el/7、el/8的可以了解下:
EL5是Red Hat 5.x,CentOS 5.x
EL6是Red Hat 6.x,CentOS 6.x
EL7是Red Hat 7.x,CentOS 7.x
EL8是Red Hat 8.x,CentOS 8.x
根据自己的系统选择对应的版本 ,比如我centos7就选择下载:
gitlab-ce-16.10.6-ce.0.el7.x86_64.rpm
bash
*# Debian/Ubuntu*
dpkg **-i** <package_name>
*# RHEL/CentOS 7 and Amazon Linux 2*
rpm **-Uvh** <package_name>
*# RHEL/Almalinux 8/9 and Amazon Linux 2023*
dnf install <package_name>
*# SUSE*
zypper install <package_name>
centos就用rpm -Uvh gitlab-ce-16.10.6-ce.0.el7.x86_64.rpm进行安装
启动
本地安装
通过 指令编辑配置文件
bash
vim /etc/gitlab/gitlab.rb
找到external_url,把自己部署gitlab的ip地址填进行并保存;注意这里的端口好,如果冲突了,需要自己重新选择一个
bash
external_url 'http: *//IP:8080/'*
然后重新加载gitlab配置
bash
gitlab-ctl reconfigure
如果这里提示gitlab-ctl不是命令,需要我们自己再安装下,可以参考下面:
然后查看root默认密码:
bash
cat /etc/gitlab/initial_root_password
然后通过上面配置的额external_url地址和root用户密码就可以正常登录访问gitlab了
gitlab使用
有两种使用方法,一种是通过gitlab提供的可视化页面,进行用户、项目、CI/CD等的操作,这个不是本文介绍的,本文要介绍的是另一种,通过API使用;
在有的场景下,我们需要在别的系统中使用gitlab,即在某个自建系统中自动在gitlab创建对应的默认代码仓,gitlab通过接口响应创建好后的项目地址,这时候用户就可以通过提供的地址进行上传和下载代码;
gitlab提供了标准的rest格式的api接口,通过适当的鉴权模式(即token)可以正常调用;在使用过程中,我们只需要根据自己对应的安装的版本,然后选择对应接口版本就行,下面我就以我安装的16.10.6版本为例,然后鉴权方式使用的是OAuth2.0
OAuth2.0
需要在gitlab管理页面创建application
Gitlab允许用户创建Applications, 这些Applications可以通过OAuth2授权来访问Gitlab的相应资源
在Gitlab中, Applications分两种:
-
第一种是用户级别的Application, 这一般通过用户的Profile菜单进入创建
-
第二种是系统级别的Application, 这一般只有管理员权限的人通过Admin菜单进入创建
创建好application后就获得了client_id和client_screate了,然后就可以通过标准的OAuth2.0协议接口获取到code,最后获取到access_token;
注册的application获取到access_token,也就代表通过了gitlab认证,那么就可以通过获取到代表某个gitlab用户的access_token和api对gitlab进行操作了;
上面的过程涉及到两个接口:
${external_url}表示我们配置的gitlab访问地址
GET:/oauth/authorize
url
https://${external_url}/api/v4/oauth/authorize?client_id=APP_ID&redirect_uri=REDIRECT_URI&response_type=code&state=STATE&scope=REQUESTED_SCOPES
其中client_id可以在管理页面创建的应用中查看,然后重定向地址就是被gitlab信任的client地址,在认证通过后,会生成授权码code跳转到重定向地址,然后scope就表示在创建应用时,授予的该应用的权限,多个权限的话,用+号拼接;state可以随机填一个,是用来防止跨域伪造攻击的。
POST:/oauth/token
css
parameters = 'client_id=APP_ID&code=RETURNED_CODE&grant_type=authorization_code&redirect_uri=REDIRECT_URI&client_secret =xxx
请求api
注意,在header头里面带上token,key为Authorization, value为Bearer拼接空格拼接上面获取到的access_token
bash
Authorization: Bearer ${assess_token}