#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
#添加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
阿里云服务器需要在后台配置安全组
若更改/etc/gitlab/gitlab.rb配置文件需要重置配置并重启,相关指令:
gitlab-ctl reconfigure
gitlab-ctl restart
提示”ok:run“表示启动成功
访问地址:http://172.31.140.201
默认账户:root
默认密码:5iveL!fe(版本不同可能不一样)
首次登录需要更改root密码,更改成功后跳转登录页面登录进入首页
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
原理:在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
修改/etc/gitlab/gitlab.rb配置文件
vim /etc/gitlab/gitlab.rb
#保存7天的备份
gitlab_rails['backup_keep_time'] = 604800
重新加载启动
gitlab-ctl reconfigure
gitlab-ctl restart
[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
[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,确定删除了以下目录的数据
执行以下命令
[root@iZnq8v4wpstsagZ ~]# systemctl restart gitlab-runsvdir
[root@iZnq8v4wpstsagZ ~]# gitlab-ctl reconfigure
gitlab启动默认端口是8080,内嵌nginx的默认监听端口是80,如果服务器已经有外置nginx,将发生冲突而无法访问。于是有二种解决方案:
第二种方法步骤:
[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
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;
}
}
高版本的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