什么是 GitLab
GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。
GitLab 的功能与特点
提供了管理,计划,创建,验证,打包,发布,配置,监视和保护应用程序的功能,是一个在线代码仓库托管软件,是提供代码托管,提交审核和问题跟踪的代码管理平台。
对服务器的要求:配置建议 2核4G以上
Git, GitLab, GitHub 三者的区别
- Git:基于命令行的版本操作,全命令操作,无可视化界面;
- GitLab:基于 Git 实现的在线代码仓库软件,提供了 web 的管理页面,用于企业内部;
- GitHub:基于 Git 实现的在线代码仓库软件,提供了可视化管理界面,提供开放和私有的仓库。大部分开源项目选择 GitHub 作为代码托管仓库;
服务组成部分
- nginx:静态 web 服务器,端口号为 80;
- gitlab-shell:用于处理 git 命令和修改 authorized key 列表;
- gitlab-workhorse:轻量级反向代理服务器(go语言);
gitlab-workhorse 是一个敏捷的反向代理,它会处理一些大的 HTTP 请求,比如文件上传,下载,git push/pull 和 git 包下载,其他请求会反向代理到 gitlab rails 应用,即反向代理给后端的 unicorn;
- logrotate:日志文件管理工具;
- postgresql:数据库;
- redis:缓存数据库;
- sidekiq:用于在后台执行队列任务(异步执行)(ruby);
- unicorn:用 ruby 编写的一个 HTTP 服务器,端口号为 8080;
- gitlab rails:是托管在这个服务器上
功能介绍
- 基于web方式的管理平台;
- 拥有完善的权限控制和身份认证模块;
- 问题追踪和代码质量管理;
- 代码 review(复查)功能;
- 文档管理,知识库管理;
安装 GitLab 的步骤
安装依赖包
1
2
3
4
5
6yum install -y curl \
openssh-server \
openssh-clients \
cronie \
policycoreutils-python \
postfix下载gitlab 的yum(仓库)源
1
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh |bash
查看 yum 仓库是否已经包含 gitlab-ce
1
2
3
4yum list | grep gitlab-ce
# 或者查看所有版本
yum list gitlab-ce --showduplicates安装 gitlab-ce
1
yum install -y gitlab-ce
使用 yum 从网络下载的包的位置:
/var/cache/yum/x86_64/\$releasever/gitlab_gitlab-ce/packages/
修改
/etc/gitlab/gitlab.rb
1
2
3
4
5# 将 external_url 更改为自己的发布地址,可以是服务器的 IP,也可以是一个可被解析的域名
external_url 'http://gitlab.59izt.cn'
# 关闭 Prometheus 插件(可选)
prometheus['enable'] = false修改本地
/etc/hosts
配置文件,添加一个域名解析1
192.168.1.21 gitlab.59izt.cn
重新配置 gitlab 的配置文件
1
gitlab-ctl reconfigure
启动 gitlab 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18gitlab-ctl start
# 输出如下内容:
ok: run: alertmanager: (pid 9273) 486s
ok: run: gitaly: (pid 9155) 488s
ok: run: gitlab-exporter: (pid 9154) 488s
ok: run: gitlab-workhorse: (pid 9129) 489s
ok: run: grafana: (pid 9291) 485s
ok: run: logrotate: (pid 8809) 543s
ok: run: nginx: (pid 8768) 549s
ok: run: node-exporter: (pid 9149) 488s
ok: run: postgres-exporter: (pid 9283) 486s
ok: run: postgresql: (pid 8545) 589s
ok: run: prometheus: (pid 9256) 487s
ok: run: redis: (pid 8386) 597s
ok: run: redis-exporter: (pid 9167) 487s
ok: run: sidekiq: (pid 8731) 557s
ok: run: unicorn: (pid 8700) 563s查看 gitlab 页面
1
2
3firefox gitlab.59izt.cn
# 或使用 IP 地址访问
firefox 192.168.1.21gitlab 页面出现的问题;
- 检测端口号 80 和 8080 是否被占用
- 访问主页 502 的时候,检查端口 8080 是否被占用
Gitlab 初始用户与密码
- 管理员用户:
root
- 初始密码查看:
/etc/gitlab/initial_root_password
- 管理员用户:
gitlab 相关命令
1
2
3
4
5
6gitlab-ctl start //启动gitlab服务
gitlab-ctl stop //停止gitlab服务
gitlab-ctl start unicorn(添加组件名称) //单独开启某个组件
gitlab-ctl status //查看gitlab的运行状态
gitlab-ctl reconfigure //修改完配置文件重新编译
gitlab-ctl tail //查看gitlab的日志
配置 GitLab 邮件服务
sendmail / postfix / smtp
配置 smtp 邮箱步骤
修改配置文件 /etc/gitlab/gitlab.rb,在 邮箱部分添加以下内容
1
2
3
4
5
6
7
8
9
10
11gitlab_rails['gitlab_email_from'] = '15626xxxxxx@163.com' #说明邮箱从哪里发,设置自己的邮箱地址
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com" #在线邮件服务器地址
gitlab_rails['smtp_port'] = 25 #端口号,开启本地发邮件的端口
gitlab_rails['smtp_user_name'] = "1562658xxxx@163.com" #邮箱地址
gitlab_rails['smtp_password'] = "xxxxasdasdsadsad" #邮箱授权码
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login" #在登录时,查看是否有授权码
gitlab_rails['smtp_enable_starttls_auto'] = true #加密方式
gitlab_rails['smtp_tls'] = false #加密方式
user['git_user_email'] = "xxxxxxxxxx@163.com"重新编译配置文件
1
gitlab-ctl reconfigure
重启 gitlab 服务
1
gitlab-ctl restart
进入控制台
1
2
3
4
5
6
7
8
9
10gitlab-rails console
# 输出如下内容
--------------------------------------------------------------------------------
GitLab: 12.9.3 (571e31b8362) FOSS
GitLab Shell: 12.0.0
PostgreSQL: 10.12
--------------------------------------------------------------------------------
Loading production environment (Rails 6.0.2)
irb(main):001:0>
- 在控制台输入如下命令
1
2
3irb(main):002:0> Notify.test_email('2350686113@qq.com','GitLab Test Email','Hello,World!').deliver_now //发送邮件,deliver_now代表立刻发送
(格式:收件人的邮箱地址,邮件标题,邮件内容)
irb(main):003:0> exit //退出控制台
GitLab 的日常操作
备份与还原
gitlab 的备份
1 | gitlab-rake gitlab:backup:create |
gitlab 的还原
首先停止一下两个组件
1
2gitlab-ctl stop sidekiq
gitlab-ctl stop unicorn进入到备份目录
1
cd /var/opt/gitlab/backups/
还原数据
1
2gitlab-rake gitlab:backup:restore BACKUP=1550541218_2019_02_19_11.7.5
# 进行数据的恢复,名字为上面的时间戳,日期,版本号组成出现以下提示:
- Do you want to continue (yes/no)? yes
- Do you want to continue (yes/no)? yes
启动组件
1
2gitlab-ctl start sidekiq
gitlab-ctl start unicorn
进入控制台的两种方法
1 | gitlab-rails console //进入控制台 |
忘记 root 密码,进行修改
进入 console 控制台
1
gitlab-rails console production
切换到 root 用户
1
user = User.where(id:1).first
修改密码
1
2user.password='1234.com'
user.save!验证都修改成功,使用 web 登录测试
查看 GitLab 的日志
查看整体的日志
1
gitlab-ctl tail
查看 Redis 的日志
1
gitlab-ctl tail redis
检查 logrotate 的日志
1
gitlab-ctl tail logrotate
通过 ssh 远程连接方式往 GitLab 上传文件
创建秘钥
1
ssh-keygen -t rsa -C "zhangsan@bdqn.cn" //为创建用户时输入的邮箱地址
查看秘钥
1
cat ~/.ssh/id_rsa.pub
复制密钥,到web页面进行添加密钥
验证远程登录是否成功
1
2
3
4
5
6% ssh -T git@gitlab.59izt.com
The authenticity of host 'gitlab.59izt.com (172.16.68.30)' can't be established.
ECDSA key fingerprint is SHA256:tvJ3QHw7mBV8quhOugs+Q6EGAH8x7O/LUlZTj3xNUeM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitlab.59izt.com' (ECDSA) to the list of known hosts.
Welcome to GitLab, @wanwu!
克隆项目,进行上传
下载 git
1
yum install -y git
配置全局用户名和邮箱
1
2git config --global user.name "wanwu"
git config --global user.email "2350686113@qq.com"克隆项目
1
git clone git@gitlab.59izt.com:wanwu/elastic.git
新建一个 README.md 文件
1
2
3
4echo 1111 > README.md
git add README.md
git commit -m "create README.md file"
git push origin master进入 web 页面就可以看到项目了
克隆项目
1
2
3mkdir test
cd test
git clone git@gitlab.59izt.com:wanwu/elastic.git