目录

GitLab介绍

背景

环境准备

源服务器上操作:

备份数据和配置文件

备份SSL证书

目的服务器上操作:

配置邮件服务,默认未开启postfix

安装NFS客户端

安装gitlab

升级gitlab版本

查看gitlab版本

查看PostgreSQL版本

升级gitlab到12.10.6

升级gitlab到13.0.0

升级gitlab到13.2.0

升级gitlab到13.4.0

升级gitlab到13.6.0

升级gitlab到13.8.0

升级gitlab到13.8.8


GitLab介绍

GitLab是一个用于管理代码的仓库系统,他是一个开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理代码缺陷和注释。

背景

1.由于本地服务器多次断网和机房断电,开发人员代码上传不了,造成项目开发时常中断;

2.生产是阿里云环境,生产环境版本迭代时拉取代码速度慢,影响CI进度和项目进展。

3.旧版本的GitLab(12.1.6)网上已经爆出安全漏洞,必须升级到13.8.8及以上。

环境准备

服务器

环境

源服务器

本地I环境搭建的服务

目的服务器

阿里云ECS

远程数据存储

阿里云NAS

源服务器上操作:

首先要关闭外网访问使用户不能上传下载,如果有用户上传代码备份数据会丢失部分代码。

查看备份配置

vi /etc/gitlab/gitlab.rb
#查看下面两行的配置
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/opt/gitlab/backups"

在当前目录创建备份数据用的目录

mkdir /backup/conf -p
cd /backup

备份数据和配置文件

gitlab-rake gitlab:backup:create

停止gitlab服务

gitlab-ctl stop

备份配置文件

rsync /etc/gitlab/gitlab.rb /backup/conf/
rsync /etc/gitlab/gitlab-secrets.json /backup/conf/
rsync /var/opt/gitlab/gitlab-rails/etc/secrets.yml /backup/conf/

拷贝备份数据到/backup目录

rsync /var/opt/gitlab/backups/xxxxxx_gitlab_backup.tar /backup/

下载安装包

gitlab-ce-12.1.6-ce.0.el7.x86_64.rpm


备份SSL证书

rsync /etc/gitlab/ssl /backup/ -r

目的服务器上操作:

首先优化Centos7系统配置,优化脚本可以直接用下面这个脚本,阿里云ECS部分设置已经优化过,可以根据实际情况修改脚本。

Centos7系统配置优化

配置邮件服务,默认未开启postfix

vi /etc/postfix/main.cf
#修改
inet_interfaces = localhost
inet_protocols = all
#为
inet_interfaces = all
inet_protocols = ipv4

重启postfix服务

systemctl restart postfix

查看邮件服务状态

systemctl status postfix

安装NFS客户端

yum install nfs-utils -y

增加同时发起的NFS请求的数量

请执行以下命令,将同时发起的NFS请求数量修改为128。

if (lsmod | grep sunrpc); then
(modinfo sunrpc | grep tcp_max_slot_table_entries) && sysctl -w sunrpc.tcp_max_slot_table_entries=128
(modinfo sunrpc | grep tcp_slot_table_entries) && sysctl -w sunrpc.tcp_slot_table_entries=128
fi
(modinfo sunrpc | grep tcp_max_slot_table_entries) && echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/alinas.conf
(modinfo sunrpc | grep tcp_slot_table_entries) && echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/alinas.conf

手动挂载NFS文件系统

mount -t nfs -o vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.region.nas.aliyuncs.com:/ /mnt

自动挂载NFS文件系统,打开/etc/fstab配置文件,添加挂载配置。

file-system-id.region.nas.aliyuncs.com:/ /mnt nfs vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0

下载安装包

gitlab-ce-12.1.6-ce.0.el7.x86_64.rpm


安装gitlab

rpm -i gitlab-ce-12.1.6-ce.0.el7.x86_64.rpm

从源服务器拷贝备份的配置文件gitlab.rb和gitlab-secrets.json到新服务器gitlab的/etc/gitlab/

检查配置

vim /etc/gitlab/gitlab.rb

检查下列值:

external_url
nginx['listen_port']
gitlab_ssh_host
gitlab_shell_ssh_port
nginx['ssl_certificate']
nginx['ssl_certificate_key']
nginx['enable'] = true
nginx['redirect_http_to_https'] = true    #http重定向到https
nginx['redirect_http_to_https_port']
git_data_dirs

查看配置ssh拉取
首先在项目配置的Settings-Repository-Deploy Keys中添加拉取代码的机器生成的公钥(.ssh/id_rsa.pub)
修改gitlab服务器ssh的远程端口,即:vim /etc/ssh/sshd_config中的Port 端口号,修改完重启ssh

systemctl restart sshd

如果报错删除或修改拉取代码机器的.ssh/known_hosts

查看配置https访问

数据可以放到NFS里,可以放也可以不放,如果不放到NFS里就不用修改,如果想把数据放到NFS里就检查数据目录是否修改

# git_data_dirs({
#   "default" => {
#     "path" => "/mnt/nfs-01/git-data"
#    }
# })

#根据需要修改成下面的

git_data_dirs({
  "default" => {
    "path" => "/mnt/自己的目录名/git-data"
   }
})

开启gitlab

gitlab-ctl reconfigure

恢复数据,把源服务器上的备份包拷贝到目的服务器上

chmod +r /var/opt/gitlab/backups/xxxxxx_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=xxxxxx

拷贝源服务器上的/var/opt/gitlab/gitlab-rails/etc/secrets.yml和/etc/gitlab/gitlab-secrets.json到目的服务器的同名目录下,

重启gitlab,否则部分网页打不开

gitlab-ctl reconfigure

更改ssh服务的端口

vim /etc/ssh/sshd_config
Port 7088

重启ssh服务

systemctl restart sshd

做个定时任务,每天3点备份一次数据,4点删除前三天备份的文件

0 3 * * * gitlab-rake gitlab:backup:create >> /opt/gitlab-backup.txt
0 4 * * * find /var/opt/gitlab/backups/*_gitlab_backup.tar -type f -mtime +3 -exec rm {} \;

修改备份文件的目录

如果修改默认备份目录,需要运行 gitlab-ctl reconfigure 命令使配置生效,并且运行 gitlab-ctl restart 命令重新启动服务器。

vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = "修改成你自己想要存放备份数据包的目录"

升级gitlab版本

查看gitlab版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

查看PostgreSQL版本

/opt/gitlab/embedded/bin/psql --version

创建ECS快照,先备份数据

gitlab-rake gitlab:backup:create

升级gitlab到12.10.6

下载地址:

gitlab-ce-12.10.6-ce.0.el7.x86_64.rpm


rpm -Uvh gitlab-ce-12.10.6-ce.0.el7.x86_64.rpm

查看gitlab版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
#12.10.6

查看PostgreSQL版本

/opt/gitlab/embedded/bin/psql --version
#psql (PostgreSQL) 11.7

重新加载配置

gitlab-ctl reconfigure

重启Gitlab服务

gitlab-ctl restart

升级gitlab到13.0.0

下载地址:

gitlab-ce-13.0.0-ce.0.el7.x86_64.rpm

rpm -Uvh gitlab-ce-13.0.0-ce.0.el7.x86_64.rpm

查看gitlab版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
#13.0.0

查看PostgreSQL版本

/opt/gitlab/embedded/bin/psql --version
#psql (PostgreSQL) 11.7

重新加载配置

gitlab-ctl reconfigure

重启Gitlab服务

gitlab-ctl restart

升级gitlab到13.2.0

下载地址:gitlab-ce-13.2.0-ce.0.el7.x86_64.rpm


rpm -Uvh gitlab-ce-13.2.0-ce.0.el7.x86_64.rpm

查看PostgreSQL版本

/opt/gitlab/embedded/bin/psql --version
#psql (PostgreSQL) 11.7

升级gitlab到13.4.0

下载地址:gitlab-ce-13.4.0-ce.0.el7.x86_64.rpm


rpm -Uvh gitlab-ce-13.4.0-ce.0.el7.x86_64.rpm

查看PostgreSQL版本

/opt/gitlab/embedded/bin/psql --version
#psql (PostgreSQL) 11.9

升级gitlab到13.6.0

下载地址:gitlab-ce-13.6.0-ce.0.el7.x86_64.rpm


rpm -Uvh gitlab-ce-13.6.0-ce.0.el7.x86_64.rpm

查看PostgreSQL版本

/opt/gitlab/embedded/bin/psql --version
#psql (PostgreSQL) 11.9

升级gitlab到13.8.0

下载地址:gitlab-ce-13.8.0-ce.0.el7.x86_64.rpm


rpm -Uvh gitlab-ce-13.8.0-ce.0.el7.x86_64.rpm

查看PostgreSQL版本

/opt/gitlab/embedded/bin/psql --version
#psql (PostgreSQL) 12.4

升级gitlab到13.8.8

下载地址:gitlab-ce-13.8.8-ce.0.el7.x86_64.rpm


rpm -Uvh gitlab-ce-13.8.8-ce.0.el7.x86_64.rpm

查看gitlab版本

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
#13.8.8

查看PostgreSQL版本

/opt/gitlab/embedded/bin/psql --version
#psql (PostgreSQL) 12.6

重新加载配置

gitlab-ctl reconfigure

重启Gitlab服务

gitlab-ctl restart

升级要按顺序一个一个升级,每个gitlab的版本号要跟数据库的版本号对应,如果有报错,检查一下当前gitlab的数据库版本号。