debian11gitlab安装备份还原

介绍


Gitlab是由GitLab Inc开发的基于Web的DevOps生命周期管理工具。 与Github一样,Gitlab是另一种流行的Git版本管理系统,被大量用户使用。 Gitlab还提供了出色的功能,例如应用程序问题跟踪,任务列表,持续集成和部署(CI / CD)管道。 Gitlab还支持与各种服务的集成。


官网: https://about.gitlab.com/

官方文档: https://docs.gitlab.com/omnibus/index.html#installation-and-configuration-using-omnibus-package

v14.6.0-ee版本的Tags: https://gitlab.com/gitlab-org/gitlab/-/tags/v14.6.0-ee


 安装

Debian安装教程: https://about.gitlab.com/install/#debian

这次下载的版本: GitLab Enterprise Edition 14.6.0-ee  
gitlab-ee的deb版本: 14.6.0-ee.0

    sudo apt-get update
    sudo apt-get install -y curl openssh-server ca-certificates perl   //安装所需的软件包 
    
    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash  
    //上面的命令在您的系统上创建一个apt配置文件(/etc/apt/sources.list.d/gitlab_gitlab-ce.list)。接下来,使用Apt命令在您的Debian系统上安装Gitlab。
    
    sudo EXTERNAL_URL="https://gitlab.tecadmin.net" apt install gitlab-ce 
    //将EXTERNAL_URL更改为访问Gitlab的域名(若没有搭云服务, 就设置自己的主机ip地址, 例如:http://192.168.1.101 )
    安装程序将安装和配置所有必需的服务,例如Nginx,Redis和Gitlab

    sudo gitlab-rake  gitlab:env:info  //查看GitLab各个组件的信息
        System information
        System:         Debian 11
        Proxy:          no
        Current User:   git
        Using RVM:      no
        Ruby Version:   2.7.5p203
        Gem Version:    3.1.4
        Bundler Version:2.1.4
        Rake Version:   13.0.6
        Redis Version:  6.0.16
        Git Version:    2.33.1.
        Sidekiq Version:6.3.1
        Go Version:     unknown
        
        GitLab information
        Version:        14.6.0-ee
        Revision:       518f728f72b
        Directory:      /opt/gitlab/embedded/service/gitlab-rails
        DB Adapter:     PostgreSQL
        DB Version:     12.7
        URL:            http://192.168.1.101
        HTTP Clone URL: http://192.168.1.101/some-group/some-project.git
        SSH Clone URL:  [email protected]:some-group/some-project.git
        Elasticsearch:  no
        Geo:            no
        Using LDAP:     no
        Using Omniauth: yes
        Omniauth Providers: 
        
        GitLab Shell
        Version:        13.22.1
        Repository storage paths:
        - default:      /var/opt/gitlab/git-data/repositories
        GitLab Shell path:              /opt/gitlab/embedded/service/gitlab-shell
        Git:            /opt/gitlab/embedded/bin/git


   
     

游览主机名并登录

安装后, 在游览器中访问gitlab, 例如 http://192.168.1.101
安装过程中随机生成一个密码在/etc/gitlab/initial_root_password, 使用此密码和用户名root登录, 登录后及时更改密码

 维护命令


    sudo gitlab-ctl status   //获取服务状态
    sduo gitlab-ctl start/stop/restart  //启动/停止/重启
    sudo gitlab-ctl reconfigure    //使gitlab配置文件生效


    
    
修改域名


    编辑Gitlab配置文件 /etc/gitlab/gitlab.rb, 将external_url更新为用于访问Gitlab的有效域名或子域名
    external_url "https://gitlab.tecadmin.net"


 修改默认端口80
 

  vi /etc/gitlab/gitlab.rb
        external_url 'http://192.168.1.101:9527'
        nginx['listen_port'] = 9527
    
    vi /var/opt/gitlab/nginx/conf/gitlab-http.conf   
        listen *:9527;

备份与还原

要求

无论是CE版本还是EE版本,GitLab恢复数据的时候都需要满足版本一致的前提,即进行恢复的GitLab的版本和备份数据时的GitLab的版本一致

备份分为配置文件备份和应用程序备份

不要将 GitLab 应用程序备份(Git 存储库、SQL 数据)与配置备份 ( /etc/gitlab)存储在同一位置.  gitlab-secrets.json文件(也可能是该gitlab.rb 文件)包含数据库加密密钥以保护 SQL 数据库中的敏感数据.  如果将配置备份与应用程序数据备份分开,则可以减少加密的应用程序数据与解密所需的密钥一起丢失/泄露/被盗的可能性

请确保您的系统上安装了 rsync, 若没有sudo apt-get install rsync


 配置文件备份


配置文件在/etc/gitlab目录下, 可以手动备份该目录,也可以使用命令, 重要的两个文件gitlab-secrets.json和gitlab.rb
        
    使用sudo gitlab-ctl backup-etc 命令, 会在/etc/gitlab/config_backup/中创建一个tar存档文件
    运行sudo gitlab-ctl backup-etc --backup-path 会将备份放置在指定的目录中。如果目录不存在,将创建该目录。推荐使用绝对路径
        
            root@debian:/etc/gitlab/config_backup# ls
            gitlab_config_1640933144_2021_12_31.tar
            root@debian:~/gitlab# tar tvf gitlab_config_1640933144_2021_12_31.tar
            tar: 从成员名中删除开头的“/”
            drwxrwxr-x root/root         0 2021-12-31 14:43 /etc/gitlab/
            -rw------- root/root    128292 2021-12-31 14:33 /etc/gitlab/gitlab.rb
            drwxr-xr-x root/root         0 2021-12-29 17:21 /etc/gitlab/trusted-certs/
            -rw------- root/root     19107 2021-12-31 14:35 /etc/gitlab/gitlab-secrets.json

    
  应用程序备份
    备份时间戳: 文件名是[TIMESTAMP]_gitlab_backup.tar,其中TIMESTAMP标识每个备份的创建时间,以及 GitLab 版本。
                如果您需要恢复 GitLab 并且有多个备份可用,则需要时间戳. 
                例如,如果备份名称为1493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar,则时间戳为1493107454_2018_04_25_10.6.4-ce
    
    GitLab提供了一个命令行接口来备份您的整个实例,包括:
        Database
        Attachments
        Git repositories data
        CI/CD job output logs
        CI/CD job artifacts
        LFS objects
        Terraform states (introduced in GitLab 14.7)
        Container Registry images
        GitLab Pages content
        Snippets
        Group wikis
    不包括:
        Package registry files
        Mattermost data
        任何配置文件 ( /etc/gitlab)、TLS 密钥和证书或系统文件
    
    备份命令是 sudo gitlab-backup create
    备份路径默认在 /var/opt/gitlab/backups下, 备份文件如: 1640917491_2021_12_31_14.6.0-ee_gitlab_backup.tar
    
    如果要将 GitLab 备份存储在不同的目录中,请将以下设置添加到/etc/gitlab/gitlab.rb并运行sudo gitlab-ctl reconfigure
        gitlab_rails['backup_path'] = '/mnt/backups'
    
    
    备份策略选项
        默认备份策略是使用 Linux 命令tar和gzip. 这在大多数情况下工作正常,但在数据快速变化时可能会导致问题。
        tar读取过程中数据发生变化时,file changed as we read it可能会发生错误,并导致备份过程失败。 
        
        为了解决这个问题,8.17 引入了一种名为copy. 该策略在调用tar和之前将数据文件复制到一个临时位置gzip,以避免错误.
        一个副作用是备份过程需要额外占用 1 倍的磁盘空间。该过程会尽最大努力在每个阶段清理临时文件,这样问题就不会复杂化,
        但对于大型安装来说,这可能是一个相当大的变化。这就是为什么该copy策略在 8.17 中不是默认设置的原因。
        
        要使用该copy策略而不是默认的流策略,请STRATEGY=copy在 Rake 任务命令中指定 。例如:
            sudo gitlab-backup create STRATEGY=copy
    


    备份文件名


        如果您使用自定义备份文件名,则无法限制备份的生命周期。
        
        默认情况下,备份文件是根据上一个备份时间戳部分中的规范创建的。但是,您可以[TIMESTAMP]通过设置BACKUP 环境变量来覆盖文件名的一部分。例如:
            sudo gitlab-backup create BACKUP=dump
        生成的文件名为dump_gitlab_backup.tar. 这对于使用 rsync 和增量备份的系统非常有用,并且可以显着提高传输速度。    
    
    确认档案可以转移
        为确保生成的存档可通过 rsync 传输,您可以设置该GZIP_RSYNCABLE=yes 选项。这会将--rsyncable选项设置为gzip,这仅在与设置备份文件名选项结合使用时才有用。
        请注意,不能保证--rsyncablein 选项在gzip所有发行版上都可用。要验证它在您的发行版中是否可用,请运行 gzip --help或查阅手册页。
            sudo gitlab-backup create BACKUP=dump GZIP_RSYNCABLE=yes
         

  
还原

还原前提:

1. 安装了与创建备份完全相同的 GitLab Omnibus版本和类型

2. sudo gitlab-ctl reconfigure至少跑过一次

3. GitLab 正在运行。如果没有,请使用sudo gitlab-ctl start
  
      
    sudo apt  update
    sudo apt install -y curl openssh-server ca-certificates perl
    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash  
    sudo EXTERNAL_URL="http://192.168.1.123" apt install gitlab-ee=14.6.0-ee.0
    sudo gitlab-ctl reconfigure
    
    注意: 如果下载不了指定版本, 可以去官网下载deb包手动安装
            https://packages.gitlab.com/gitlab/

    1. 还原配置文件
        root@debian:/# pwd
        /
        root@debian:/# ls gitlab_config_1640933144_2021_12_31.tar
        gitlab_config_1640933144_2021_12_31.tar
        root@debian:/# sudo mv /etc/gitlab /etc/gitlab.$(date +%s)
        root@debian:/# sudo tar -xf gitlab_config_1640933144_2021_12_31.tar  -C /
        tar: 从成员名中删除开头的“/”
    
    2. 还原应用程序
          a. 移动备份tar文件,并归git用户所有
                root@debian:/# sudo cp 1640933200_2021_12_31_14.6.0-ee_gitlab_backup.tar  /var/opt/gitlab/backups/
                root@debian:/# sudo chown git.git  /var/opt/gitlab/backups/1640933200_2021_12_31_14.6.0-ee_gitlab_backup.tar
          
          b. 停止连接到数据库的进程。让 GitLab 的其余部分保持运行:
                sudo gitlab-ctl stop puma
                sudo gitlab-ctl stop sidekiq
                # Verify
                sudo gitlab-ctl status
          c. 接下来,恢复备份,指定要恢复的备份的时间戳:
               root@debian:/# sudo gitlab-backup restore  BACKUP=1640933200_2021_12_31_14.6.0-ee  //这个命令将覆盖GitLab数据库的内容
               
    3. 重新配置、重启并检查 GitLab
        sudo gitlab-ctl reconfigure
        sudo gitlab-ctl restart
        sudo gitlab-rake gitlab:check SANITIZE=true
        
    
    若在还原中出现log: Restoring PostgreSQL database gitlabhq_production ... ERROR:  must be owner of extension pg_trgm
    不用担心, 虽然出现这些警告消息,但备份已成功恢复
    若想解决在要备份的gitlab环境下做下改动: https://www.jianshu.com/p/09a2b0c25ecd


配置 cron 进行定时备份

为root用户编辑 crontab
    
    sudo su -
    crontab -e

添加以下行以安排每隔三天凌晨3点备份
    
    0 3 */3 * *  gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /work/gitlab_config 
    0 3 */3 * *  gitlab-backup create CRON=1  && cd /var/opt/gitlab/backups &&  cp $(ls -t | head -n1) /work/gitlab_backupdata 

    //CRON=1如果没有任何错误,环境设置会指示备份脚本隐藏所有进度输出。建议这样做以减少 cron 垃圾邮件。

    
完整卸载gitlab

  sudo gitlab-ctl stop
    sudo apt-get --purge remove gitlab-ce
    sudo rm -r /var/opt/gitlab
    sudo rm -r /opt/gitlab
    sudo rm -r /etc/gitlab


 

你可能感兴趣的:(gitlab,debian,运维,gitlab)