gitlab-rake gitlab:env:info  查看当前的版本

gitlab-rake gitlab:backup:create RAILS_ENV=production   备份数据 记录备份的文件.tar

安装docker

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum install -y yum-utils device-mapper-persistent-data lvm2

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  

yum -y install docker-ce

service docker start  启动服务

建立gitlab用的目录

mkdir -p /opt/gitlab

mkdir -p /opt/gitlab/config

mkdir -p /opt/gitlab/data

mkdir -p /opt/gitlab/logs

mkdir -p /opt/gitlab/ssl  证书这个目录下面要在启动前生成出来

mkdir -p /opt/gitlab/docker

下面启动gitlab

docker run --detach \
    --hostname gitlab \
    --env GITLAB_OMNIBUS_CONFIG="external_url 'https://ip:自己的端口/';
                                 gitlab_rails['gitlab_shell_ssh_port'] = '端口就是页面上线上ssh的那个端口';
                                 gitlab_rails['gitlab_email_from'] = 'xxx@qq.com';
                                 gitlab_rails['smtp_enable'] = true
                                 gitlab_rails['smtp_address'] = 'smtp.exmail.qq.com'
                                 gitlab_rails['smtp_port'] = 465
                                 gitlab_rails['smtp_user_name'] = 'xxx@qq.com'
                                 gitlab_rails['smtp_password'] = '1234'
                                 gitlab_rails['smtp_domain'] = 'qq.com'
                                 gitlab_rails['smtp_authentication'] = 'login'
                                 gitlab_rails['smtp_enable_starttls_auto'] = true
                                 gitlab_rails['smtp_tls'] = true
                                 postgresql['enable'] = true
                                 nginx['redirect_http_to_https'] = false
                                 nginx['ssl_certificate'] = '/etc/gitlab/ssl/xx.crt'
                                 nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/xx.key'  
                                 nginx['listen_port'] = 443
                                " \
    --publish 你自己的端口:443 \    #这个端口就是web访问那个
    --publish ssh那个端口:22 \        #自己的ssh端口因为物理机已经用了22了这个换一个必须
    --name gitlab \
    --restart always \
    --volume /opt/gitlab/config:/etc/gitlab \
    --volume /opt/gitlab/ssl:/etc/gitlab/ssl \
    --volume /opt/gitlab/logs:/var/log/gitlab \
    --volume /opt/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:xxx你的版本-ce.0

把备份放到目录里面

mv 备份的.tar /opt/gitlab/data/backup里面

docker exec -it gitlab /bin/bash  进入docker

gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=xxxx 恢复你的数据

访问仓库看看报500错误

https://gitlab.com/gitlab-org/gitlab-ce/issues/21564

https://www.oschina.net/question/2946511_2200445

是gitlab数据迁移时的一个缺陷。解决方法

1、覆盖原来gitlab的 db_key_base 到新的gitlab 

db_key_base  位置在 /etc/gitlab/gitlab-secrets.json  

2、EE版本执行
 gitlab-rails runner "Project.where(mirror: false).where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"

CE版本执行
 gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"

参考https://gitlab.com/gitlab-org/gitlab-ce/issues/17873

备份

就是定时的备份/opt/gitlab目录

tar -zcPf /备份到的目录/gitlab`date +%Y%m%d`.tar.gz ] /opt/gitlab
find /备份的目录/ -mtime +7 -type f -name gitlab*.tar.gz -exec rm -rf {} \;  # -mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名


上面的备份方式简单,但是正规的应该这样备份的  ,但是这个配置不会备份 /opt/gitlab/config  就是docker里面的/etc/gitlab 证书目录 这些都不会备份需要手动恢复,只会备份数据这个命令

/etc/gitlab/gitlab.rb 配置文件须备份

/var/opt/gitlab/nginx/conf nginx配置文件

/etc/postfix/main.cfpostfix 邮件配置备份

gitlab-rake gitlab:backup:create 这个是gitlab专用的备份命令 可以自行百度查询,或者看我之前的文章
docker exec gitlab /bin/bash -c 'gitlab-rake gitlab:backup:create'  >> /gitlab/backup.log定时执行这个就行   可以看输出的内容
Creating backup archive: 1587623708_2020_04_23_gitlab_backup.tar ... done  这个就是备份完成了
备份目录在 /opt/gitlab/data/backups 这个目录也能修改默认这个。