使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复

gitlab 介绍

gitlab 镜像分为两个版本:gitlab-ce 社区版(我们使用这个版本)、gitlab-ee 企业收费版

docker镜像地址:https://hub.docker.com/r/gitlab/gitlab-ce

gitlab docker镜像使用文档:https://docs.gitlab.com/omnibus/docker/README.html

gitlab 帮助文档:https://about.gitlab.com/get-help/

使用docker 下载运行gitlab

  • 查看本机ip
[vagrant@gitlabServer ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:4d:77:d3 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 85838sec preferred_lft 85838sec
    inet6 fe80::5054:ff:fe4d:77d3/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:89:b0:0c:3b brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
6: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:fb:e2:0f brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fefb:e20f/64 scope link
       valid_lft forever preferred_lft forever
       
# 找一个物理主机能ping 通的ip  192.168.1.101
  • 启动docker 容器
$ sudo mkdir -p /opt/data/gitlab && sudo chmod -R 777 /opt/data && \
docker run -d \
--publish 443:443 --publish 80:80 --publish 222:22 \
--hostname 192.168.1.101 \
--restart always \
--volume /opt/data/gitlab/config:/etc/gitlab \
--volume /opt/data/gitlab/logs:/var/log/gitlab \
--volume /opt/data/gitlab/data:/var/opt/gitlab \
--name gitlab \
gitlab/gitlab-ce:13.7.4-ce.0
# --hostname 192.168.1.101  没有域名的需求可以不指定hostname,后期可以改配置文件设置()

docker 启动需要花费点时间,稍等几分钟在访问

  • 重要的配置文件
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml # 能配置web服务相关的信息

vi /etc/gitlab/gitlab.rb # 能配置邮件服务器、数据备份和恢复
	或者使用挂载到主机的目录 vi /opt/data/gitlab/config/gitlab.rb

出现错误

浏览器访问gitlab 服务,出现502

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第1张图片

使用docker logs查看gitlab容器中运行情况

docker logs -f gitlab

image-20210116144041909

修改目录权限

sudo chmod -R 777

如果还是不可以,就重启一下gitlab容器

docker restart gitlab

介绍gitlab常用功能

访问 http://192.168.1.101

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第2张图片

登陆

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第3张图片

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第4张图片

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第5张图片

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第6张图片

gitlab配置发邮件的功能

注册邮箱、开启smtp服务

我这里就不注册了,直接教你如何开启smtp服务

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第7张图片

修改gitlab配置文件

# 配置文件内容

### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '你的QQ邮箱'
gitlab_rails['gitlab_email_display_name'] = '陈洋'
gitlab_rails['gitlab_email_reply_to'] = '你的QQ邮箱'
gitlab_rails['gitlab_email_subject_suffix'] = ''

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com" # 不同邮件服务提供商这里不一样,比如163邮箱的是 smtp.163.com
gitlab_rails['smtp_port'] = 465 
gitlab_rails['smtp_user_name'] = "你的QQ邮箱(带@的)"
gitlab_rails['smtp_password'] = "授权码,不是邮箱密码" 
gitlab_rails['smtp_domain'] = "smtp.qq.com" # 不同邮件服务提供商这里不一样,比如163邮箱的是 smtp.163.com
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第8张图片

测试能否成功发邮件

# 重启gitlab
$ docker restart gitlab

# 测试发送邮件
[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
 GitLab:       13.7.4 (2f14978e280) FOSS
 GitLab Shell: 13.14.0
 PostgreSQL:   12.4
--------------------------------------------------------------------------------
Loading production environment (Rails 6.0.3.3)
irb(main):001:0> Notify.test_email('[email protected]','xxx','xxx').deliver_now

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第9张图片

查看邮箱嗯看到邮件,说明gitlab配置邮件服务器成功了

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第10张图片

可能出现错误的解决方案

测试邮件时报错501

Net::SMTPSyntaxError: 501 mail from address must be same as authorization user

原因:配置文件gitlab.rb中### Email Settings没有设置邮箱地址,意思就是发送邮件的地址和SMTP认证的账号必须一致
解决办法:配置好### Email Settings即可

测试邮件时报错SSLError

原因:此类报错通常是SMTP服务器没有使用SSL,但是配置却开启了
解决办法:注释掉以下配置
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = true

gitlab 新增一个用户试试邮件的功能

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第11张图片

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第12张图片使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第13张图片

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第14张图片

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第15张图片

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第16张图片

gitlab数据的备份和恢复

注意:通过备份文件恢复gitlab必须保证两台主机的gitlab版本一致,否则会提示版本不匹配

查看系统版本和软件版本

[vagrant@gitlabServer ~]$ cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[vagrant@gitlabServer ~]$ docker exec -it gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
13.7.4

数据备份

查看备份相关的配置项

#  /opt/data/gitlab/config/gitlab.rb

gitlab_rails['manage_backup_path'] = true # 开启备份
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" # 设置备份数据的目录

# 需要注意的是backup_path 的路径是容器内的路径,所以最好是写我们挂载到主机的目录(比如 --volume /opt/data/gitlab/data:/var/opt/gitlab)

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第17张图片

该项定义了默认备份出文件的路径,可以通过修改该配置,并执行gitlab-ctl reconfigure或者gitlab-ctl restart 或者docker restart gitlab重启服务生效。

[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-ctl reconfigure
[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-ctl restart
[vagrant@gitlabServer ~]$ docker restart gitlab

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第18张图片

执行备份命令进行备份

[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-rake gitlab:backup:create

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第19张图片使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第20张图片

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第21张图片

可以解压查看,会发现备份的还是比较全面的,数据库、repositories、 build.upload等分类还是比较清晰的。

scp /opt/data/gitlab/data/backups/1610783686_2021_01_16_13.7.4_gitlab_backup.tar [email protected]:/Users/haitao/Desktop

image-20210116161540040

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第22张图片

添加到crontab 中定时执行

# linux cron表达式每位的含义

添加定时任务 : crontab -e

基本格式 :
*  *  *  *  *  command
分  时  日  月  周  命令
[vagrant@gitlabServer ~]$ crontab -e 
0 3 * * * docker exec -it gitlab gitlab-rake gitlab:backup:create # 每天3点进行备份

设置备份保留时长

防止每天执行备份,有目录被爆满的风险,打开gitlab.rb配置文件

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第23张图片

设置备份保留7天(7360024=604800),秒为单位,如果想增大或减小,可以直接在该处配置,并通过gitlab-ctl restart重启服务生效。
备份完成,会在备份目录中生成一个当天日期的tar包。

数据恢复

安装部署gitlab

sudo mkdir -p /opt/data/gitlab && sudo chmod -R 777 /opt/data && \
docker run -d \
--publish 443:443 --publish 80:80 --publish 222:22 \
--hostname 192.168.1.102 \
--restart always \
--volume /opt/data/gitlab/config:/etc/gitlab \
--volume /opt/data/gitlab/logs:/var/log/gitlab \
--volume /opt/data/gitlab/data:/var/opt/gitlab \
--name gitlab \
gitlab/gitlab-ce:13.7.4-ce.0

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第24张图片

恢复gitlab

  • 查看备份相关的配置项
# 修改备份文件路径(这里不想开启备份,所以只打开一个注释)
[vagrant@gitlabServerBackup ~]$ sudo chmod -R 777 /opt/data/gitlab/
[vagrant@gitlabServerBackup ~]$ sed -i "s/# gitlab_rails\['backup_path'\]/gitlab_rails['backup_path']/g" /opt/data/gitlab/config/gitlab.rb

任选一个命令,重启服务使配置生效

[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-ctl reconfigure
[vagrant@gitlabServer ~]$ docker exec -it gitlab gitlab-ctl restart
[vagrant@gitlabServer ~]$ docker restart gitlab
  • 恢复之前需要先停掉数据连接服务

如果是台新搭建的主机,不需要操作,理论上不停这两个服务也可以。停这两个服务是为了保证数据一致性。

[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl stop unicorn
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up

同步备份文件到新服务器

# 使用 scp 或者 rsync 都可以复制文件。但 rsync 功能更强大 复制过去的文件权限都还保留着
[vagrant@gitlabServer ~]$ sudo chmod -R 777 /opt/data/
[vagrant@gitlabServer ~]$ cd /opt/data/gitlab/data/backups/
[vagrant@gitlabServer backups]$ rsync -avz 1610783686_2021_01_16_13.7.4_gitlab_backup.tar vagrant:192.168.1.102:/opt/data/gitlab/data/backups

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第25张图片

image-20210116165201430

执行命令进行恢复

# 如果backups 目录下只有一个文件可以直接执行
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-rake gitlab:backup:restore


# 如果有多个文件,可以指定你想恢复到那个备份文件
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=1610783686_2021_01_16_13.7.4  # _gitlab_backup.tar 省略后缀

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第26张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G3ejuruE-1610788538253)(.gitlab的搭建和使用_imgs/image-20210116165508035.jpeg)]

恢复完成启动服务

[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl start unicorn
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl start sidekiq

# 或
[vagrant@gitlabServerBackup ~]$ docker exec -it gitlab gitlab-ctl restart

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第27张图片

访问gitlab服务看看

[vagrant@gitlabServerBackup ~]$ sudo chmod -R 777 /opt/data/
[vagrant@gitlabServerBackup ~]$ docker restart gitlab

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第28张图片

修改文件的权限,然后重启gitlab服务

[vagrant@gitlabServerBackup ~]$ docker logs gitlab
[vagrant@gitlabServerBackup ~]$ sudo chmod -R 777 /opt/data/
[vagrant@gitlabServerBackup ~]$ docker restart gitlab

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第29张图片

使用浏览器访问gitlab 服务

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第30张图片

使用docker搭建gitlab&gitlab的基本数据、数据备份和恢复_第31张图片

你可能感兴趣的:(JAVAEE学习,CI/CD,docker,gitlab,ci/cd)