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

                  

posted @ 2020-04-15 17:52  奋斗史  阅读(711)  评论(0)    收藏  举报