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
=> #<User id:1 @root>
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", #<GlobalID:0x00007f9949fb4e80 @uri=#<URI::GID gid://gitlab/User/1>>
=> 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,将发生冲突而无法访问。于是有二种解决方案:
- 禁用 gitlab 自带的 nginx,使用我们自己安装的 nginx,由于测试很多次有各种问题放弃。
- 继续使用 gitlab 的内置 nginx,配置外部nginx转发到内置nginx。
第二种方法步骤:
- 修改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
- 修改外部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,部署好环境后开始备份和数据迁移.
-
查看gitlab版本的命令。
[root@iZnq8v4wpstsagZ ~]# gitlab-rake gitlab:env:info
-
备份原a服务器上的的数据。
[root@iZnq8v4wpstsagZ ~]# gitlab-rake gitlab:backup:create RAILS_ENV=production
PS: 备份后的文件一般是位于/var/opt/gitlab/backups下, 自动生成文件名文件名如1583226803_gitlab_backup.tar.tar
-
将步骤2生成的tar文件拷贝到b服务器上相应的backups目录下,可以使用
scp
命令。 -
在b服务器恢复数据
[root@iZnq8v4wpstsagZ ~]# gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=1583226803
-
重启gitlab服务
[root@iZnq8v4wpstsagZ ~]# gitlab-ctl restart