GitLab安装部署
以Centos为例,安装如下:
在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,wget,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问。依次执行以下命令:
1.安装ssh
sudo yum install -y curl policycoreutils-pythonopenssh-server
sudo systemctl enable sshd
3.启动SSH服务
sudo systemctl start sshd
4.添加http服务到firewalld,pemmanent表示永久生效,若不加--permanent系统下次启动后就会失效。
sudo firewall-cmd --permanent --add-service=http
5.重启防火墙
sudo systemctl reload firewalld
6.安装Postfix以发送通知邮件
sudo yum install postfix
7.将postfix服务设置成开机自启动
sudo systemctl enable postfix
8.启动postfix
sudo systemctl start postfix
9.从外网上下载gitlab
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/?C=M&O=A#下载gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm版本
10.安装gitlab
cd /opt/software #下载的软件拷贝到此目录 rpm -ivh gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
11.修改gitlab配置文件指定服务器ip和自定义端口
vim /etc/gitlab/gitlab.rb #将默认的external_url = 'http://git.example.com'修改为自己的IP地址:http://xxx.xx.xxx.xx external_url 'http://192.168.70.195:9001' unicorn['port'] = 9002#修改unicorn端口,防止与8080端口冲突 git_data_dirs #修改代码存储路径,修改其中的path 保存后执行 gitlab-ctl reconfigure gitlab-ctl restart /* 无须参考以下文字 1 修改nginx端口 vim /etc/gitlab/gitlab.rb nginx['listen_port'] = 9001#如果external_url中已加端口,此处可省略 vim /var/opt/gitlab/nginx/conf/gitlab-http.conf server { listen *:9001; 2 修改unicorn端口(可以不修改) vim /etc/gitlab/gitlab.rb unicorn['port'] = 9002 vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb listen "127.0.0.1:9002", :tcp_nopush => true 3 保存配置,重启。 gitlab-ctl reconfigure gitlab-ctl restart gitlab-ctl status 4 ip:9001。(重启服务有延时,耐心等待一会,如果是centos可能会打不开网页,防火墙里面放开8081端口即可) */
ps:注意这里设置的端口不能被占用,默认是8080端口,如果8080已经使用,请自定义其它端口,并在防火墙设置开放相对应得端口
假如遇到502错误,一般是端口被占用,可以输入netstat -ntpl查看Nginx的名字,把不是9001端口的进程kill掉,再重启gitlab即可
13.重置并启动GitLab
gitlab-ctl reconfigure gitlab-ctl restart
提示 "ok: run:"表示启动成功
14.访问 GitLab页面
如果没有域名,直接输入服务器ip和指定端口进行访问
初始账户: root 密码:5iveL!fe
第一次登录修改密码
汉化
https://gitlab.com/xhang/gitlab/-/tree/v12.0.3-zh
下载对应版本
gitlab配置查看
gitlab的配置主要是etc/gitlab/gitlab.rb下的两个地方;查看更多配置信息可以
vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml 查看具体的详情
相关操作
启动服务:gitlab-ctl start 查看状态:gitlab-ctl status 停掉服务:gitlab-ctl stop 重启服务:gitlab-ctl restart 让配置生效:gitlab-ctl reconfigure
查看日志:gitlab-ctl tail
查看防火墙状态:netstat -ntpl
打开防火墙端口:firewall-cmd --zone=public --add-port=6379/tcp --permanent firewall-cmd --reload
参考
数据迁移:https://www.jianshu.com/p/1f38f01440e9
本地备份‘远程备份:https://www.cnblogs.com/straycats/p/7671204.html
以下内容复制自上方链接,以防以后链接失效
一、环境准备
我们默认一台服务器已成功部署了gitlab。
如果还没有成功部署,可以参考 http://www.cnblogs.com/straycats/p/7637373.html。
二、手动备份gitlab
很方便,因为gitlab有指令直接支持手动备份。
gitlab-rake gitlab:backup:create
这里要特别说明,如果 /etc/gitlab/gitlab.rb 配置了参数“backup_path”(例如gitlab_rails['backup_path'] = '/backup'),则备份的目录就是该目录下(/backup/);
如果没有配置参数“backup_path”,则gitlab把备份文件生成到默认目录/var/opt/gitlab/backups。
仅仅这样不够,每天我这里的运维工作也有不少,如果每天都来手动备份,虽然只要几分钟,但是人工成本很高,所以还是要考虑使用自动定时的方式进行备份。
三、定时自动备份gitlab(本地)
定时备份的思路建立在手动的基础上,通过crontab添加定时计划就可以解决这个问题。
一般添加定时计划可以有2种方式:
1.使用命令crontab -e,将定时任务添加后保存。
2.将定时任务添加到/etc/crontab文件中。
我这里采取第一种,使用crontab -e。
crontab -e
根据我们部门的工作时间,我设计一天备份2次,分别在每天12:00、19:00,故我添加下面的内容,并保存。
0 12 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 0 19 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
重启crontab
systemctl restart crond
但是仅仅实现自动备份还是不够,备份如果不能及时清理硬盘的空间很快会不够用,同时也要能够自动清理不需要人工花时间在这一块。
四、自动清理
这一块由于gitlab已经支持,我就走简单的方案,配置gitlab来实现自动清理功能。
vim /etc/gitlab/gitlab.rb
将其中backup_keep_time的配置取消注释,根据需要设置自动清理多少天前的备份,我这里是设置备份保留7天(7360024=604800),保存。
gitlab_rails['backup_keep_time'] = 604800
重新加载gitlab的配置文件
gitlab-ctl reconfigure
参考资料:
1.http://www.cnblogs.com/shansongxian/p/6599144.html
2.http://blog.csdn.net/ouyang_peng/article/details/77070977
一、环境准备
1.gitlab所在的服务器A(centos7,192.168.1.1)
2.备份服务器B(centos7,192.168.1.2)
3.gitlab本地备份目录设置为/var/opt/gitlab/backups/log,本篇也是以此展开
gitlab已经配置了本地备份。如果没有配置,可以参考http://www.cnblogs.com/straycats/p/7671204.html。
二、通过密钥配对取消scp传输密码的限制
手动备份数据费时费力。最好的方法就是通过脚本实现远程自动备份。但远程无论是通过SSH登陆,还是通过scp拷贝文件都需要输入密码。
为了克服这个问题,首先需要实现不需要密码的SSH登陆,这样就可以使用 rsync,scp,rexec等命令来做的远程备份了。
2.1 生成密钥对
假设A,B两服务器,现在需要在A机上用root登陆B机,而不需要输入密码。那我们可按照下面的步骤来做:
1)在gitlab服务器A上生成rsa证书
ssh-keygen -t rsa
(这里需要增加截图,我第一次部署时忘记截了之后补)
1、生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。 2、因为之前已经有/root/.ssh/id_rsa 文件存在,因此提示你是否覆盖,输入y表示覆盖 3、接着会提示输入一个密码,直接回车,让它空着。当然,也可以输入一个密码。 4、接着输入确认密码,输入完之后,回车密钥对就生成完了。
这样,在/root/.ssh下生成id_rsa 和 id_rsa.pub 两个文件,其中公共密钥保存在 /root/.ssh/id_rsa.pub,私有密钥保存在/root/.ssh/id_rsa。
2)在gitlab服务器A上cp生成rsa公钥证书
在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A,以便拷贝到远程服务器B。
cd /root/.ssh cp id_rsa.pub id_rsa.pub.A
2.2 生成rsa公钥证书上传到备份服务器B
先在服务器B上创建目录/root/.ssh。
mkdir -p /root/.ssh
使用scp命令进行远程复制,将服务器A生成的id_rsa.pub.A拷贝到服务器B的/root/.ssh目录下。
scp /root/.ssh/id_rsa.pub.A root@192.168.1.2:/root/.ssh/
此时使用scp命令需要输入密码,当把下面的“2.3 密钥配对”执行后,以后gitlab服务器A使用scp命令复制文件到备份服务器B的话,就不需要输入密码了。
2.3 密钥配对
1)创建authorized_keys文件
在备份服务器B的/root/.ssh下创建authorized_keys文件。
touch /root/.ssh/authorized keys
2)将id_rsa.pub.A文件内容追加到authorized_keys 文件中
通过 cat 命令 把id_rsa.pub.A 追写到 authorized_keys 文件中。
cd /root/.ssh/ cat id_rsa.pub.A >> authorized_keys
3)修改authorized_keys文件的权限
authorized_keys文件的权限很重要,如果设置为777,那么登录的时候,还是需要提供密码的。
chmod 400 authorized_keys
4)测试上传文件是否还要输入密码
不放心的话,立刻测试下gitlab服务器A使用scp命令复制文件到备份服务器B是否还要输入密码。
scp /root/.ssh/id_rsa.pub.A root@192.168.1.2:/root/.ssh/
发现在2.3之前,由于没有设置ssh证书授权认证时,上传需要输入密码;2.3操作完后,由于授权认证,已经不需要输入密码了。
三、定时将备份文件传到备份服务器
3.1 创建远程备份脚本
在gitlab服务器A上,在/root目录下创建定期备份脚本auto_backup_to_remote.sh。
vim /root/auto_backup_to_remote.sh
添加下面的内容,并wq保存。
#!/bin/bash # gitlab 服务器备份路径 LocalBackDir=/var/opt/gitlab/backups # 远程备份服务器 gitlab备份文件存放路径 RemoteBackDir=/root/gitlab_backup # 远程备份服务器 登录账户 RemoteUser=root # 远程备份服务器 IP地址 RemoteIP=(备份服务器B的地址,请你自行修改) #当前系统日期 DATE=`date +"%Y-%m-%d"` #Log存放路径 LogFile=$LocalBackDir/log/$DATE.log # 查找 gitlab本地备份目录下 时间为60分钟之内的,并且后缀为.tar的gitlab备份文件 BACKUPFILE_SEND_TO_REMOTE=$(find $LocalBackDir -type f -mmin -60 -name '*.tar*') #新建日志文件 touch $LogFile #追加日志到日志文件 echo "Gitlab auto backup to remote server, start at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile echo "---------------------------------------------------------------------------" >> $LogFile # 输出日志,打印出每次scp的文件名 echo "---------------------The file to scp to remote server is: $BACKUPFILE_SEND_TO_REMOTE-------------------------------" >> $LogFile #备份到远程服务器 scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$RemoteBackDir #追加日志到日志文件 echo "---------------------------------------------------------------------------" >> $LogFile
3.2 修改远程备份脚本auto_backup_to_remote.sh的权限
要能让系统执行auto_backup_to_remote.sh,必须修改该脚本的权限。
chmod 777 auto_backup_to_remote.sh
3.3 创建日志存放目录
mkdir -p /var/opt/gitlab/backups/log
3.4 测试远程备份脚本的功能是否可用
现在为了验证脚本是否可以正常运行,我们需要手动执行脚本。
在gitlab服务器A上执行find命令,看是否能够正常查找出我们要scp到远程服务器的Gitlab备份文件。
find /var/opt/gitlab/backups/log -type f -mmin -60 -name '*.tar*'
手动执行脚本auto_backup_to_remote.sh,看是否能够正常上传
cd ./auto_backup_to_remote.sh
等待1-2分钟左右,查看备份服务器B的目录/root/gitlab_backup下是否有服务器A传过来的备份文件。
在备份服务器B上能找到服务器A传过来的备份文件,说明远程备份脚本的功能OK。
如果每次上传都通过人工运行脚本的方式,人工的消耗太大,接着配置定时执行该脚本。
3.5 添加定时计划
定时备份的思路建立在手动的基础上,通过crontab添加定时计划就可以解决这个问题。
一般添加定时计划可以有2种方式:
1.使用命令crontab -e,将定时任务添加后保存。
2.将定时任务添加到/etc/crontab文件中。
我这里采取第一种,使用crontab -e。
crontab -e
结合我之前对公司gitlab本地备份的设计,故设计在备份完10分钟后上传,故分别在每天12:10、19:10进行备份,故添加下面的内容,wq保存。
10 12 * * * /root/auto_backup_to_remote.sh -D 1 10 19 * * * /root/auto_backup_to_remote.sh -D 1
重启crontab
systemctl restart crond
四、定时删除备份服务器上的备份文件
每个Gitlab备份文件都很大。因此每天备份两次,过不了多久的话,备份服务器B上的磁盘空间可能就会被Gitlab备份文件占用完。
故需要定期清理备份文件,参考备份服务器的空间,暂定保留14天的备份文件。
4.1 创建删除过期备份文件的脚本
设计备份服务器B的/root/gitlab_backup作为接收远程上传备份文件的目录,故在备份服务器B上,先创建该目录。
mkdir -p /root/gitlab_backup
创建删除过期备份文件的脚本auto_remove_old_backup.sh。
vim /root/auto_remove_old_backup.sh
添加下面的内容,并wq保存。
#!/bin/bash # 远程备份服务器 gitlab备份文件存放路径 GitlabBackDir=/root/gitlab_backup # 查找远程备份路径下,超过14天且文件后缀为.tar 的 Gitlab备份文件 然后删除 find $GitlabBackDir -type f -mtime +14 -name '*.tar*' -exec rm {} \;
4.2 修改auto_remove_old_backup.sh脚本的权限
chmod 777 auto_remove_old_backup.sh
4.3 添加定时计划
定时备份的思路建立在手动的基础上,通过crontab添加定时计划就可以解决这个问题。
一般添加定时计划可以有2种方式:
1.使用命令crontab -e,将定时任务添加后保存。
2.将定时任务添加到/etc/crontab文件中。
我这里采取第一种,使用crontab -e。
crontab -e
设计凌晨0点执行删除过期备份文件的脚本,故添加下面的内容,wq保存。
0 0 * * * /root/auto_remove_old_backup.sh
重启crontab
systemctl restart crond
参考资料:
\1.