Gitlab运维管理
1. GitLab简介
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务
2. GitLab系统架构

1. repository:代码库,可以是硬盘或 NFS 文件系统
2. Nginx:Web 入口
3. 数据库:包含以下信息:
- repository 中的数据(元数据,issue,合并请求 merge request 等)
- 可以登录 Web 的用户(权限)
4. Redis:缓存,负责分发任务
5. sidekiq:后台任务,主要负责发送电子邮件。任务需要来自 Redis
6. Unicorn:Gitlab 自身的 Web 服务器,包含了 Gitlab 主进程,负责处理快速/一般任务,与 Redis 一起工作。工作内容包括:
- 通过检查存储在 Redis 中的用户会话来检查权限
- 为 Sidekiq 制作任务
- 从仓库(warehouse)取东西或在那里移动东西
7. gitlab-shell:用于 SSH 交互,而不是 HTTP。gitlab-shell 通过 Redis 与 Sidekiq 进行通信,并直接或通过 TCP 间接访问 Unicorn
8. gitaly:后台服务,专门负责访问磁盘以高效处理 git 操作,并缓存耗时操作。所有的 git 操作都通过 Gitaly 处理
9. gitlab-workhorse:反向代理服务器,可以处理与 Rails 无关的请求(磁盘上的CSS、JS 文件等),处理Git Push/Pull 请求,处理到Rails的连接(修改由Rails发送的响应或发送给 Rails 的请求,管理 Rails 的长期 WebSocket 连接等)。
10. mail_room:处理邮件请求。回复 GitLab 发出的邮件时,GitLab 会调用此服务
3. GitLab安装过程
1. 关闭防火墙
2. 关闭selinux
3. 安装Omnibus Gitlab-ce package
1. 安装Gitlab组件
yum install curl policycoreutils openssh-server openssh-clients postfix -y
2. 启动postfix邮件服务
centos7: systemctl start postfix && systemctl enable postfix
centos6: /etc/init.d/postfix start
4. 下载安装文件
curl -LjO https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.10.0-ce.1.el7.x86_64.rpm
5. 安装
rpm -i gitlab-ce-8.10.0-ce.1.el7.x86_64.rpm
安装完成后,需要执行一下初始化命令:gitlab-ctl reconfigure 没有报错就是安装成功
6. gitlab目录结构
/opt/gitlab/ # 主目录 /etc/gitlab/ # 放置配置文件 /var/opt/gitlab/ # 各个组件 /var/log/gitlab/ # 放置日志文件 /var/opt/gitlab/git-data/repositories #数据库的地址 /var/opt/gitlab/postgresql/data #gitlab组和项目的地址 /etc/gitlab/gitlab.rb #gitlab配置文件
7. 配置文件
/etc/gitlab/gitlab.rb
external_url 'http://172.168.1.227' gitlab_rails['time_zone'] = 'Asia/Shanghai' gitlab_rails['gitlab_email_from'] = '*********' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.263.net" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "******" gitlab_rails['smtp_password'] = "******" gitlab_rails['smtp_domain'] = "******" gitlab_rails['smtp_authentication'] = "plain" gitlab_rails['smtp_enable_starttls_auto'] = true #gitlab_rails['smtp_tls'] = false #gitlab_rails['smtp_openssl_verify_mode'] = 'none' # Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert', see http://api.rubyonrails.org/classes/ActionMailer/Base.html #gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs" #gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt" user['git_user_email'] = "**********" unicorn['port'] = 8080
4. GitLab管理和应用
1. Gitlab后台管理
开发视角的Gitlab
普通开发人员创建分支,申请给领导合并分支
领导合并分支
运维视角的Gitlab
用户管理
权限管理
2. Gitlab服务管理
gitlab-ctl stop
gitlab-ctl status
gitlab-ctl start
gitlab-ctl restart
3. 查看gitlab版本号
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
4. 查看gitlab日志
gitlab-ctl tail
5. 访问地址
http://172.168.1.227
5. 将IP访问修改为域名访问
1. 首先修改配置文件/etc/gitlab/gitlab.rb
external_url 'http://172.16.1.227' 为 external_url 'http://git.zp.com'
2. 其次修改下面两个文件
/var/opt/gitlab/gitlab-shell/config.yml
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml 3. 修改/var/opt/gitlab/nginx/conf/gitlab-http.conf
4. 最后执行命令gitlab-ctl reconfigure
6. 重置管理员密码
[root@gitlab ~]# gitlab-rails console production Loading production environment (Rails 4.1.1) irb(main):001:0> user = User.where(id:1).first irb(main):002:0> user.password='12345678' irb(main):003:0> user.save!
7. 关闭注册功能
1. 使用root用户登录,找到对应的功能

8. GitLab批量添加账号
1. 设置脚本
#!/bin/bash
#批量创建gitlab用户
userinfo="userinfo.text"
while read line
do
password=`echo $line | awk '{print $1}'`
mail=`echo $line | awk '{print $2}'`
username=`echo $line | awk '{print $3}'`
name=`echo $line | awk '{print $4}'`
curl -d "reset_password=$password&email=$mail&username=$username&name=$name&private_token=ucUctguWU6-2qrvRnGiB" "http://192.168.1.24/api/v4/users"
done <$userinfo
2. userinfo.text文件内容
1 zhanjiang.feng@zp.com zhanjiang.feng zhanjiang.feng 1 hongkang.yan@zp.com hongkang.yan hongkang.yan 1 yansong.wang@zp.com yansong.wang yansong.wang
第一列 1 表示重置密码
第二列 用户邮箱
第三列 用户名
第四列 别名
9. GitLab设置第三方邮箱
1. 修改配置文件/etc/gitlab/gitlab.rb
external_url 'http://192.168.1.24' gitlab_rails['gitlab_email_from'] = 'wangshibohaha@163.com' gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "wangshibohaha@163.com" gitlab_rails['smtp_password'] = "*******" gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true user['git_user_email'] = "wangshibohaha@163.com"
10. GitLab备份
1. 修改备份文件目录
可以通过/etc/gitlab/gitlab.rb配置文件来修改默认存放备份文件的目录
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
修改完成之后使用gitlab-ctl reconfigure命令重载配置文件即可
2. 设置备份过期时间
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_keep_time'] = 604800 #以秒为单位
3. gitlab自动备份
创建定时任务
[root@gitlab ~]# crontab -e
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
11. GitLab还原
1. gitlab恢复
[root@gitlab ~]# gitlab-ctl stop unicorn #停止相关数据连接服务
[root@gitlab ~]# gitlab-ctl stop sidekiq
[root@gitlab-new ~]# chmod 777 /var/opt/gitlab/backups/1530156812_2018_06_28_10.8.4_gitlab_backup.tar
#修改权限,如果是从本服务器恢复可以不修改
[root@gitlab ~]# gitlab-rake gitlab:backup:restore BACKUP=1530156812_2018_06_28_10.8.4
#从1530156812_2018_06_28_10.8.4编号备份中恢复
[root@gitlab ~]# gitlab-ctl start #启动gitlab
12. GitLab迁移
1. 迁移的整体思路是:
在新服务器上安装相同版本的gitlab
将备份生成的备份文件发送到新服务器的相同目录下
这里在新机器上安装了相同版本的gitlab并能正常运行使用
在老服务器上将备份文件发送至新服务器的相应目录下
[root@gitlab ~]# scp /var/opt/gitlab/backups/1530156812_2018_06_28_10.8.4_gitlab_backup.tar root@10.0.0.6:/var/opt/gitlab/backups/
/etc/gitlab/gitlab.rb 这个gitlab配置文件须迁移,迁移后需要调整数据存放目录
/var/opt/gitlab/nginx/conf 这个nginx配置文件目录须迁移
/etc/gitlab/gitlab-secrets.json #复制新服务器相同的目录下
/etc/ssh/*key* #复制到新服务器相同目录下,解决ssh key认证不成功问题
2. 还原数据
13. GitLab升级
1.关闭gitlab服务 # gitlab-ctl stop unicorn # gitlab-ctl stop sidekiq # gitlab-ctl stop nginx 2.备份gitlab # gitlab-rake gitlab:backup:create 3.下载gitlab的RPM包并进行升级 # curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash # yum update gitlab-ce 或者直接安装高版本 #yum install gitlab-ce-12.1.12-ce.0.el7.x86_64 或者上官网下载最新版本 gitlab对应软件包 gitlab官网地址: https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-12.1.12-ce.0.el7.x86_64.rpm 使用: # rpm -Uvh gitlab-ce-12.1.12-ce.0.el7.x86_64 如果报错. Error executing action `run` on resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]' 解决方法: sudo chmod 2770 /var/opt/gitlab/git-data/repositories 4.启动并查看gitlab版本信息 # gitlab-ctl reconfigure # gitlab-ctl restart # head -1 /opt/gitlab/version-manifest.txt
14. GitLab修改数据存储目录
gitlab通过rpm包安装后,默认存储位置在/var/opt/gitlab/git-data/repositories,通常需要更改此路径到单独的一个分区来存储仓库的数据。 例如我这里把数据存放到/data/gitlab目录下 创建/data/gitlab目录 mkdir -p /data/gitlab 修改gitlab配置文件,找到git_data_dir vim /etc/gitlab/gitlab.rb 在git_data_dir下面添加一句git_data_dir "/data/gitlab" 停止当前gitlab,重新加载配置 gitlab-ctl stop gitlab-ctl reconfigure 重新加载后,会发现在/data/gitlab目录下多出一个repositories目录 最后启动gitlab即可 gitlab-ctl start

浙公网安备 33010602011771号