GitLab部署、备份及迁移

1 检查与安装依赖

#ssh
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld
#邮件服务
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

如果启动postfix发生Failed to start Postfix Mail Transport Agent.修改配置文件/etc/postfix/main.cf

inet_protocols = all
inet_interfaces = all

2 添加gitlab镜像源并安装gitlab服务器

#添加gitlab package yum库
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
#安装gitlab,EXTERNAL_URL根据实际情况更改
sudo EXTERNAL_URL="http://172.31.140.201" yum install -y gitlab-ee

gitlab配置文件在/etc/gitlab/gitlab.rb,可以更改上面的EXTERNAL_URL

ps:注意这里设置的端口不能被占用,默认是8080端口,如果8080已经使用,请自定义其它端口,并在防火墙设置开放相对应得端口

firewall防火墙相关指令

查看所有开放的端口: firewall-cmd --zone=public --list-ports
添加开放端口:firewall-cmd --zone=public --add-port=8090/tcp --permanent
更新防火墙规则: firewall-cmd --reload

阿里云服务器需要在后台配置安全组

3 重置配置并启动GitLab

若更改/etc/gitlab/gitlab.rb配置文件需要重置配置并重启,相关指令:

gitlab-ctl reconfigure
gitlab-ctl restart

提示”ok:run“表示启动成功

4 访问gitlab页面

访问地址:http://172.31.140.201
默认账户:root
默认密码:5iveL!fe(版本不同可能不一样)
首次登录需要更改root密码,更改成功后跳转登录页面登录进入首页

5 容灾备份

(1)手动备份

gitlab默认的git仓库在/var/opt/gitlab/git-data/目录下,gitlab创建备份的指令是:

#默认会在/var/opt/gitlab/backups目录下创建一个名称类似为1502357536_2017_08_10_9.4.3_gitlab_backup.tar的压缩包,开头为备份日期
gitlab-rake gitlab:backup:create

(2)定时自动备份

原理:在crontab文件里面,每一行代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,每个字段之间用空格分割,没用的段用*代替。

#分钟 小时 月 星期 用户 指令
m h dom mon dow user command

方法一:

#输入命令crontab -e
sudo crontab -e 
#每天凌晨2点备份
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create

方法二:

#编辑 /etc/crontab
vim /etc/crontab 
   #添加定时任务,每天凌晨两点,执行gitlab备份
   0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create

#重新加载crontab服务
systemctl reload crond
#重启crontab服务
systemctl restart crond

(3)设置备份过期时间

修改/etc/gitlab/gitlab.rb配置文件

vim /etc/gitlab/gitlab.rb
   #保存7天的备份
  gitlab_rails['backup_keep_time'] = 604800
重新加载启动
gitlab-ctl reconfigure
gitlab-ctl restart

(4) 修改gitlab root密码

[root@iZnq8v4wpstsagZ ~]# gitlab-rails console production
-------------------------------------------------------------------------------------
 GitLab:       12.0.3 (08a51a9db93)
 GitLab Shell: 9.3.0
 PostgreSQL:   10.7
-------------------------------------------------------------------------------------
Loading production environment (Rails 5.1.7)
irb(main):001:0> user = User.where(id: 1).first
=> #
irb(main):002:0> user.password=12345678
=> 12345678
irb(main):003:0> user.password_confirmation=12345678
=> 12345678
irb(main):004:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: 9d7b8720-2275-4086-a318-11809a9fe4fd) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", #>
=> true
irb(main):005:0> quit

6 卸载重装

[root@iZnq8v4wpstsagZ ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.0.3

#停止gitlab
[root@iZnq8v4wpstsagZ ~]# gitlab-ctl stop
#卸载安装包
[root@iZnq8v4wpstsagZ ~]# rpm -aq | grep gitlab
gitlab-ee-12.8.1-ee.0.el7.x86_64
[root@iZnq8v4wpstsagZ ~]# rpm -e gitlab-ee-12.8.1-ee.0.el7.x86_64
#查看gitlab进程并停止
[root@iZnq8v4wpstsagZ ~]# ps aux|grep gitlab
[root@iZnq8v4wpstsagZ ~]# kill -9 15196

#删除所有包含gitlab文件
#rm -rf  /opt/gitlab
#rm -rf  /etc/gitlab
#rm -rf  /var/log/gitlab
#rm -rf  /var/opt/gitlab
#rm -rf /etc/sysctl.d/90-omnibus-gitlab-*
[root@iZnq8v4wpstsagZ ~]# find / -name gitlab | xargs rm -rf

#添加gitlab package yum库
[root@iZnq8v4wpstsagZ ~]# curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
#安装指定版本的gitlab
[root@iZnq8v4wpstsagZ ~]# sudo yum install gitlab-ce-12.0.3-ce.0.el7.x86_64

安装GitLab出现ruby_block[supervise_redis_sleep] action run,确定删除了以下目录的数据

  • /opt/gitlab
  • /etc/gitlab
  • /var/log/gitlab
  • /var/opt/gitlab
  • /etc/sysctl.d/90-omnibus-gitlab-*(百度很多文章都没有提及这个)

执行以下命令

[root@iZnq8v4wpstsagZ ~]# systemctl restart gitlab-runsvdir
[root@iZnq8v4wpstsagZ ~]# gitlab-ctl reconfigure

7 nginx端口冲突

gitlab启动默认端口是8080,内嵌nginx的默认监听端口是80,如果服务器已经有外置nginx,将发生冲突而无法访问。于是有二种解决方案:

  1. 禁用 gitlab 自带的 nginx,使用我们自己安装的 nginx,由于测试很多次有各种问题放弃。
  2. 继续使用 gitlab 的内置 nginx,配置外部nginx转发到内置nginx。

第二种方法步骤:

  1. 修改gitlab的配置文件:/etc/gitlab/gitlab.rb
    [root@iZnq8v4wpstsagZ ~]# vim /etc/gitlab/gitlab.rb
    #域名
    external_url 'http://xxx.xxx.com'
    #修改nginx监听端口
    nginx['listen_port']=7000
    nginx['enable'] = true
    
    [root@iZnq8v4wpstsagZ ~]# gitlab-ctl reconfigure
    [root@iZnq8v4wpstsagZ ~]# gitlab-ctl restart
    
  2. 修改外部nginx配置文件
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    	
    	# 配置转发gitlab内置nginx
    	upstream git{
    		server xxx.xxx.com:7000;
    	}
    	# https配置
    	server {
        	listen 443;
    	    server_name xxx.xxx.com;
        	ssl on;
    	    root /root/index.html;
        	index index.html index.htm;
        	#https证书路径
    	    ssl_certificate  /etc/nginx/cert/server.pem;
    	    ssl_certificate_key /etc/nginx/cert/server.key;
        	ssl_session_timeout 5m;
    	    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    	    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        	ssl_prefer_server_ciphers on;
    		location / {
    			# 这个大小的设置非常重要,如果 git 版本库里面有大文件,设置的太小,文件push 会失败,根据情况调整
            	client_max_body_size 50m;
           		proxy_redirect off;
           		#以下确保 gitlab中项目的 url 是域名而不是 http://git,不可缺少
           		proxy_set_header Host $host;
            	proxy_set_header X-Real-IP $remote_addr;
            	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            	# 反向代理到 gitlab 内置的 nginx
            	proxy_pass http://git;
            	index index.html index.htm;
    		}
    	}
    	
    	server {
        	listen 80;
        	server_name xxx.xxx.com;
        	##重写路径,转换成https
    	    rewrite ^(.*)$ https://$host$1 permanent;
    	}
    }
    
    

8 数据迁移

高版本的Gitlab无法恢复低版本备份的数据,需要注意在b服务器部署和a服务器一样版本的gitlab,部署好环境后开始备份和数据迁移.

  1. 查看gitlab版本的命令。

    [root@iZnq8v4wpstsagZ ~]# gitlab-rake gitlab:env:info
    
  2. 备份原a服务器上的的数据。

    [root@iZnq8v4wpstsagZ ~]# gitlab-rake gitlab:backup:create RAILS_ENV=production
    

    PS: 备份后的文件一般是位于/var/opt/gitlab/backups下, 自动生成文件名文件名如1583226803_gitlab_backup.tar.tar

  3. 将步骤2生成的tar文件拷贝到b服务器上相应的backups目录下,可以使用scp命令。

  4. 在b服务器恢复数据

    [root@iZnq8v4wpstsagZ ~]# gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=1583226803
    
  5. 重启gitlab服务

    [root@iZnq8v4wpstsagZ ~]# gitlab-ctl restart
    

你可能感兴趣的:(gitlab)