GitLab от установки до полностью автоматизированного резервного копирования за один раз

GitLab
GitLab от установки до полностью автоматизированного резервного копирования за один раз

нужно

  1. Установите и соберите gitlab на новом сервере
  2. Ручной + автоматический бэкап gitlab на старом сервере
  3. Ручной + автоматический пакет резервного копирования scp gitlab на новый сервер
  4. Ручное + автоматическое восстановление пакетов резервных копий gitlab на новом сервере
  5. Автоматически удалять просроченные пакеты резервных копий на старых и новых серверах

помещение

  1. Версия
  • gitlab-ce — это версия сообщества
  • gitlab-ee — это корпоративная версия.
  1. строить планы
  • Таймер для выполнения сценария оболочки
  1. инструмент
  1. действовать
  • Если вы не root, пожалуйста, +sudo перед всеми командами
  • Версия gitlab нового и старого серверов согласована
  • Используется старый серверgitlab-ee_10.7.2-ee.0_amd64.debверсия gitlab, в примере также выбрана эта корпоративная версия
  1. Каталог резервных копий может управляться только пользователем root, но пользователем операции восстановления gitlab является git

Так что поместите старый и новый серверы на/var/opt/gitlab/backupsПапка настроена на чтение, запись и исполняемый файл для удобства работы.

sudo chmod 777 backups/

С этого момента я буду действовать шаг за шагом, ведя всех от установки до автоматического резервного копирования, и, наконец, реализовать мечту о том, чтобы не беспокоить резервное копирование gitlab и иметь возможность сосредоточиться на кодировании.

Установите и соберите gitlab на новом сервере

  1. Способ установки 1: установка с официального сайта (медленная)
  2. Способ установки 2: установка домашнего зеркала (быстро)

Установите gitlab на официальном сайте

пожалуйста ткнитеОфициальный сайт гитлаба

Так как моя система ubuntu, я выбираю ubuntu Шаги установки показаны ниже

  1. Установите и настройте необходимые зависимости
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
  1. УстановитьPostfixдля отправки уведомлений по электронной почте. Если вы хотите отправлять электронные письма другим способом, после установки gitlab следующим шагом будет настройка дополнительной службы SMTP.
sudo apt-get install -y postfix

во время установкиPostfixПоявится экран конфигурации. выберитеInternet Siteи нажмите Enter.mail nameдля DNS вашего сервера и нажмите Enter. Если появятся дополнительные экраны, продолжайте принимать конфигурацию по умолчанию и нажмите Enter.

  1. Добавьте репозиторий установочного пакета gitlab и установите его.

Добавить репозиторий пакетов gitlab

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
  1. Установите пакет gitlab. выберитеhttps://gitlab.example.comИзмените URL-адрес, по которому вы хотите получить доступ к экземпляру gitlab. Установка автоматически настроит и запустит gitlab по URL-адресу.

дляhttps://gitlab будет автоматически запрашивать запросы сLet's Encryptсертификат, для которого требуется принудительный http-доступ и действительное имя хоста.

sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee

В это время вы обнаружите, что он медлен до смерти, а скорость составляет 100 тыс. / С. В конце концов, они разделены стеной, а затем измените установку внутреннего зеркала.

Установка зеркала Tsinghua gitlab

Так как официальный сайт слишком медленный, то выбираем зеркало Tsinghua для установки gitlab

Зеркальный сайт программного обеспечения с открытым исходным кодом Университета Цинхуа

Справка по зеркалированию Gitlab Community Edition

Существуют различные версии

Резервная копия должна быть такой же, как версия gitlab исходного сервера, иначе ее нельзя будет установить.

Найдите gitlab в строке поиска, и появится соответствующая версия gitlab.

gitlab-ee_10.7.2-ee.0_amd64.debверсия в/ubuntu/pool/bionic/main/g/gitlab-ee/Вниз

или напрямую кgitlab-eeверсия,

прямой доступ кgitlab-ceпод версию.

  1. Сначала обновите репозиторий
sudo apt-get update
  1. Присоединяйтесь к открытому ключу GPG gitlab
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
  1. Напишите и выберите свою версию Debian/Ubuntu

Напишите содержимое в текстовом поле/etc/apt/sources.list.d/gitlab-ce.list,

я пишу в/etc/apt/sources.list.d/gitlab-ee.list,

Напишитеdeb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/ubuntu xenial main

  1. Обновите репозиторий apt и установите gitlab-ee
sudo apt-get update
sudo apt-get install gitlab-ee=10.7.2-ee.0

скачатьgitlab-ee_10.7.2-ee.0

Это устанавливает версию 10.7.2-ee.0.

Настроить и запустить gitlab

sudo gitlab-ctl reconfigure

Всякий раз, когда конфигурация GitLab изменяется, выполните следующую команду, перезапустите настроенную конфигурацию и перезапустите GitLab, а затем проверьте состояние GitLab.

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
sudo gitlab-ctl status

Откройте браузер, по умолчанию нужно посетитьhttp://localhostВот и все. Если ip и порт изменены, доступhttp://ip:端口Либо

Это недавно построенный gitlab

Проблемы с установкой гитлаба

Перелом занят

Порт 80 и порт 8080 заняты такими службами, как Apache, Tomcat и nginx на сервере Ubuntu соответственно.

Мой подход заключается в изменении файла /etc/gitlab/gitlab.rb.

vim /etc/gitlab/gitlab.rb

Измените в нем external_url

Резервное копирование gitlab вручную на старый сервер

Изменить адрес резервной копии gitlab

По умолчанию резервный адрес находится по адресуvar/opt/gitlab/backups

  1. Откройте исходный серверный терминал gitlab, изменитеgitlab.rbФайл конфигурации для изменения каталога по умолчанию для хранения файлов резервных копий.
sudo vim /etc/gitlab/gitlab.rb
  1. Значение по умолчанию выглядит следующим образом
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
  1. Будуbackup_pathперейти в пользовательский каталог
gitlab_rails['backup_path'] = "/data/gitlab/backups"

  1. Перезапустите файл конфигурации после модификации
sudo gitlab-ctl reconfigure

В моем примере нет изменений, но время резервного копирования изменено на 7 дней.

/etc/gitlab/gitlab.rb

# Change the external_url to the address your users will type in their browser
external_url 'http://192.168.3.2'
unicorn['port'] = 10086
gitlab_rails['manage_backup_path']=true
gitlab_rails['backup_path']="var/opt/gitlab/backups"
gitlab_rails['backup_archive_permissions']=0644
gitlab_rails['backup_keep_time']=604800

Проблемы с перезапуском конфигурации

Есть такая проблема с radis, не знаю как решить, есть большие ребята знающие, подскажите пожалуйста, но на бэкап это не влияет

Проблема связана с тем, что я выполнилsudo chmod -R 777 gitlabкоманда для предоставления разрешений на чтение, запись и выполнение всем файлам в подкаталоге gitlab

Решение

sudo chmod -R 2770 /var/opt/gitlab/git-data/repositories

gitlab запускает резервное копирование

Используйте команду для резервного копирования данных gitlab на исходном сервере.

sudo gitlab-rake gitlab:backup:create

Резервные копии файлов будут помещены вvar/opt/gitlab/backupsниже, с такими именами, как1558509153_2019_05_22_10.7.2-ee_gitlab_backup.tar, этот архив содержит время и версию бэкапа gitlab.

Вы можете увидеть пакет резервных копий в разделе резервных копий

Скопируйте вручную пакет резервного копирования gitlab на новый сервер

через команду SCP

не тыкай пожалуйстаКоманда Linux scp

scp 1559635752_2019_06_04_10.7.2-ee_gitlab_backup.tar  gitlab-backup@192.168.3.113:/var/opt/gitlab/backups

на новом сервере/var/opt/gitlab/backupsПоявится новый пакет резервных копий

Перезапустите и обнаружите, что все пакеты резервного копирования и сценарии очищены.

Раньше из-за проблемы с правами на резервное копирование я отправлял пакет резервной копии в каталог /tmp,

При перезагрузке компьютера линукс автоматически очищает содержимое папки /tmp

Причина в том, что tmp это специальная папка, и система автоматически ее очистит, поэтому файлы лучше не класть в это место, будет плохо если их почистить.

Вручную восстановите пакет резервной копии gitlab на новом сервере.

Изменить права доступа к файлу резервной копии

Если у вас нет разрешения на изменение каталога резервных копий, возникнут следующие проблемы.

При необдуманном восстановлении возникнет следующая ошибка

Правильная операция заключается в уменьшении полномочий операции резервного копирования.


sudo chown git backups/
sudo chmod 700 backups/

Во избежание проблемы невозможности распаковки из-за разрешений при восстановлении gitlab мы изменим права доступа к файлу резервной копии на 777 (доступно для чтения и записи)

chmod 777 1558509153_2019_05_22_10.7.2-ee_gitlab_backup.tar

Остановите соответствующую службу подключения к данным

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

восстановить gitlab из файла резервной копии

BACKUP равен номеру версии gitlab,_gitlab_backup.tarдобавляется по умолчанию

sudo gitlab-rake gitlab:backup:restore BACKUP=1558509153_2019_05_22_10.7.2-ee

Начинается установка, всего происходит два взаимодействия

  1. Выбрасывать ли предыдущий склад

2. Потерять ли предыдущий ключевой файл

3 успешно установлено

Откройте gitlab и посетите

sudo gitlab-ctl start

Откройте браузер и посетите gitlab

Автоматическое резервное копирование gitlab на старый сервер

на старом сервере/var/opt/gitlabсодержание

Регулярное резервное копирование

Добавьте запланированную задачу и выполняйте резервное копирование gitlab в 6 утра каждый день.

# 仇飞鸿编辑于2019-5-30 添加定时任务,每天6点,自动执行将旧服务器上的gitlab备份操作
0  6    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

После записи файла /etc/crontab необходимо перезапустить службу cron.

#重新加载cron配置文件
sudo /usr/sbin/service cron reload
#重启cron服务
sudo /usr/sbin/service cron restart

Примечание: 6 предшествует 0, а не * Наконец, необходимо перезапустить службу cron.

Установить срок действия резервной копии

Даже если делать резервную копию в 6 часов каждый день, за год получается 356 копий, что невероятно.

Затем вы можете установить время истечения срока действия резервной копии и сохранять только сжатые пакеты с неистекшим сроком действия в каталоге резервных копий, что значительно снижает нагрузку на сервер.

путем редактирования/etc/gitlab/gitlab.rbфайл конфигурации, найтиgitlab_rails[‘backup_keep_time’]

sudo vim /etc/gitlab/gitlab.rb

Будуgitlab_rails[‘backup_keep_time’]изменить наgitlab_rails[‘backup_keep_time’]=604800

Я установил, что срок действия не истекает в течение 7 дней.

Автоматически переносить пакет резервной копии gitlab на новый сервер.

Старый и новый ключ сопряжения серверов

Поскольку scp всегда выглядит интерактивным, запросите пароль

Вариант 1: Пароль сопряжения, отменить пароль

Вариант 2: ожидать автоматического взаимодействия

Здесь мы берем вариант один

Создать пару ключей

На старом сервере введите команду

ssh-keygen -t rsa

  1. В процессе генерации вам будет предложено ввести место хранения пары ключей, просто нажмите Enter и примите значение по умолчанию.
  2. Поскольку файл /root/.ssh/id_rsa уже существует ранее, он предложит вам перезаписать, введите y, чтобы перезаписать
  3. Затем вам будет предложено ввести пароль, просто нажмите Enter и оставьте поле пустым. Конечно, вы также можете ввести пароль.
  4. Затем введите пароль подтверждения, и после его ввода будет сгенерирована пара ключей Enter.

Создайте два файла id_rsa и id_rsa.pub в /root/.ssh,

Открытый ключ хранится в /root/.ssh/id_rsa.pub, а закрытый ключ — в /root/.ssh/id_rsa.

cd /home/gushenxing/.ssh/

cp сгенерировать сертификат открытого ключа rsa со старого сервера на новый сервер

Затем скопируйте и сделайте резервную копию копии id_rsa.pub в /root/.ssh и назовите ее id_rsa.pub.A для копирования на новый сервер.

Выполните команду cp, чтобы скопировать

cp id_rsa.pub id_rsa.pub.A

Выполнить передачу команды scp

scp id_rsa.pub.A gitlab-backup@192.168.3.113:/home/gitlab-backup/.ssh

Введите новый сервер для просмотра открытого ключа

Здесь для использования команды scp требуется пароль.После выполнения третьего шага ниже, если старый сервер использует команду scp для копирования файлов на новый сервер, нет необходимости снова вводить пароль.

ключевое соединение

Создать файл author_keys

На втором шаге скопируйте файл id_rsa.pub.A со старого сервера в каталог /root/.ssh нового сервера.

Мы создаем файл author_keys в /root/.ssh на новом сервере, используя следующую команду

touch authorized_keys

Добавьте содержимое файла id_rsa.pub.A в файл author_keys.

Открытьauthorized_keysПроверить

Измените права доступа к файлу author_keys.

Измените права доступа к файлу author_keys.

Разрешение файла author_keys очень важно: если оно установлено на 777, вам все равно нужно указать пароль при входе в систему.

тестовое задание

Мне все еще нужен пароль для копирования файлов со старого сервера на новый сервер с помощью команды scp

scp 1559635752_2019_06_04_10.7.2-ee_gitlab_backup.tar gitlab-backup@192.168.3.113:/var/opt/gitlab/backups

На новом сервере снова используйте предыдущую команду и обнаружите, что вам больше не нужно вводить пароль.

Создание запланированного сценария удаленного резервного копирования оболочки

Создайте сценарий удаленного резервного копирования по расписанию на новом сервере.

Создание сценариев и каталогов журналов для автоматического scp

cd /var/opt/gitlab
touch auto_scp.sh
cd /backups
sudo mkdir log

Потому что в это время мы установим время выполнения запланированного сценария удаленного резервного копирования auto_scp.sh в течение одного часа после сценария автоматического резервного копирования Gitlab auto_scp.sh, поэтому нам нужно только каждый раз выполнять сценарий удаленного резервного копирования auto_scp.sh, просто нужно скопировать новый файл резервной копии Gitlab, созданный в течение часа.

auto_scp.sh

#!/bin/bash

# 新旧服务器 gitlab备份文件存放路径 
BACKUPDIR=/var/opt/gitlab/backups

# 远程备份服务器 登录账户 
RemoteUser=gitlab-backup

# 远程备份服务器 IP地址 
RemoteIP=192.168.3.113

#当前系统日期 
DATE=`date "+%Y-%m-%d-%H-%M-%S"`

#Log存放路径
LogFile=$BACKUPDIR/log/$DATE.log

#查找本地备份目录下时间为1天之内并且后缀为.tar的gitlab备份文件
BACKUPFILE_SEND_TO_REMOTE=$(find $BACKUPDIR -type f -mmin -1440 -name '*.tar')

#新建日志文件
touch $LogFile

#追加日志到日志文件
echo "---------------------------------开始-----------------------------------" >> $LogFile

echo "gitlab auto backup to remote server, start at $DATE" >> $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:$BACKUPDIR
echo "---------------------------------分割线---------------------------------" >> $LogFile

echo "remote server is $RemoteUser@$RemoteIP:$BACKUPDIR" >> $LogFile

#追加日志到日志文件
echo "---------------------------------结束-----------------------------------" >> $LogFile
~                      

тестовое задание

Поскольку разрешение на выполнение auto_scp.sh — root, требуется интерактивный пароль.

Понизьте разрешения auto_scp.sh и войдите

sudo chown gushenxing:gushenxing auto_scp.sh 
sudo chown gushenxing:gushenxing log
  1. Выполнить команду без sudo
bash auto_scp.sh 

В настоящее время пароль не требуется

  1. Просмотр файлов журнала

  1. Обнаружено, что резервный пакет появился на новом сервере

Добавить в crontab запланированные задачи для автоматического выполнения скрипта scp

sudo vim /etc/crontab

Добавьте следующую команду

# 仇飞鸿编辑于2019-6-04 添加定时任务,每天7点,自动执行将gitlab备份包scp到新服务
器上的操作
0  7    * * *   gushenxing  bash /var/opt/gitlab/auto_scp.sh

После записи файла /etc/crontab необходимо перезапустить службу cron.

#重新加载cron配置文件
sudo /usr/sbin/service cron reload
#重启cron服务
sudo /usr/sbin/service cron restart

Операция на старом сервере завершена, и автоматическое резервное копирование gitlab на старом сервере и автоматический scp пакета резервного копирования gitlab на новый сервер завершены.

Автоматически восстанавливать пакеты резервных копий gitlab на новом сервере

Автоматически удалять скрипт пакета резервного копирования с истекшим сроком действия

cd /var/opt/gitlab
sudo touch auto_remove_backup.sh

Заполните код скрипта

#!/bin/bash

#远程备份服务器gitlab备份文件存放路径
GITLABDIR=/var/opt/gitlab/backups

# 查找远程备份路径下,超过7天且文件后缀为.tar的gitlab备份文件,然后删除
find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;

Добавьте запланированную задачу в crontab, чтобы автоматически выполнить скрипт для удаления пакета резервной копии.

sudo vim /etc/crontab

Добавьте следующую команду

# 仇飞鸿编辑于2019-5-30 添加定时任务,每天上午8点,自动执行删除过期的gitlab备份文件操作
0  8    * * *   root    bash /var/opt/gitlab/auto_remove_backup.sh

После записи файла /etc/crontab необходимо перезапустить службу cron.

#重新加载cron配置文件
sudo /usr/sbin/service cron reload
#重启cron服务
sudo /usr/sbin/service cron restart

скрипт автоматического восстановления

cd /var/opt/gitlab
sudo touch auto_recovery_backup.sh
#!/bin/bash

#备份文件所在目录
REMOTEDIRBACKUPS=/var/opt/gitlab/backups

#找到当日生成的备份文件
BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')

#当前系统日期 
DATE=`date "+%Y-%m-%d-%H-%M-%S"`

#Log存放路径
LogFile=$REMOTEDIRBACKUPS/log/$DATE.log

#新建日志文件
sudo touch $LogFile

#追加日志到日志目录
echo "---------------------------------开始-----------------------------------" >> $LogFile

echo "gitlab auto recovery, start at $DATE" >> $LogFile

echo "---------------------------------分割线---------------------------------" >> $LogFile

#输出日志,打印出当日生成的备份文件
echo "backup files generated on that day is $BACKUPFILE" >> $LogFile


#截取出主要文件名
FILE=$(echo ${BACKUPFILE#*backups/})

#截取恢复文件名
RESTOREFILE=$(echo ${FILE%_gitlab*})



echo "---------------------------------分割线---------------------------------" >> $LogFile

#输出日志,打印出备份文件复制目标目录
echo "backup files generated scp to $REMOTEDIRBACKUPS" >> $LogFile

#进入到目标目录
cd $REMOTEDIRBACKUPS

#备份文件权限修改为可读可写可执行
chmod 777 $FILE

#停止相关数据连接服务
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

#自动化交互,从备份文件恢复gitlab
sudo /usr/bin/expect -c " 
set timeout -1
spawn sudo gitlab-rake gitlab:backup:restore BACKUP=$RESTOREFILE
expect {
\"yes/no\" {set timeout -1; send \"yes\n\";exp_continue;}
\"yes/no\" {set timeout -1; send \"yes\n\"}
}

expect eof"
#开启gitlab
sudo gitlab-ctl start

echo "---------------------------------分割线---------------------------------" >> $LogFile

#输出日志,从备份文件恢复gitlab
echo "recovery was successful" >> $LogFile

#追加日志到日志目录
echo "---------------------------------结束-----------------------------------" >> $LogFile


Добавьте к нему автоматическое интерактивное ожидание

тестовое задание

Результаты

Добавьте запланированную задачу в crontab для автоматического выполнения сценария пакета резервного копирования для восстановления.

sudo vim /etc/crontab

Добавьте это запланированное задание в crontab

# 仇飞鸿编辑于2019-6-3 添加定时任务,每天上午9点,自动执行从备份包中恢复gitlab操作
0  9    * * *   root    bash /var/opt/gitlab/auto_recovery_backup.sh

После записи файла /etc/crontab необходимо перезапустить службу cron.

#重新加载cron配置文件
sudo /usr/sbin/service cron reload
#重启cron服务
sudo /usr/sbin/service cron restart

полный сценарий

Скрипт crontab на старом сервере

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
# 仇飞鸿编辑于2019-5-30 添加定时任务,每天6点,自动执行将旧服务器上的gitlab备份>操作
0  6    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

# 仇飞鸿编辑于2019-6-04 添加定时任务,每天7点,自动执行将gitlab备份包scp到新服务
器上的操作
0  7    * * *   gushenxing   bash /var/opt/gitlab/auto_scp.sh

скрипт crontab на новом сервере

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

# 仇飞鸿编辑于2019-5-30 添加定时任务,每天上午8点,自动执行删除过期的gitlab备份文件操作
0  8    * * *   root   bash /var/opt/gitlab/auto_remove_backup.sh

# 仇飞鸿编辑于2019-6-3 添加定时任务,每天上午9点,自动执行从备份包中恢复gitlab操作
0  9    * * *   root   bash /var/opt/gitlab/auto_recovery_backup.sh

Автоматически создавать резервные копии пакетов scp gitlab на новый скрипт сервераauto_scp.sh

#!/bin/bash



# 新旧服务器 gitlab备份文件存放路径 

BACKUPDIR=/var/opt/gitlab/backups



# 远程备份服务器 登录账户 

RemoteUser=gitlab-backup



# 远程备份服务器 IP地址 

RemoteIP=192.168.3.113



#当前系统日期 

DATE=`date "+%Y-%m-%d-%H-%M-%S"`



#Log存放路径

LogFile=$BACKUPDIR/log/$DATE.log



#查找本地备份目录下时间为1天之内并且后缀为.tar的gitlab备份文件

BACKUPFILE_SEND_TO_REMOTE=$(find $BACKUPDIR -type f -mmin -1440 -name '*.tar')



#新建日志文件

touch $LogFile



#追加日志到日志文件

echo "---------------------------------开始-----------------------------------" >> $LogFile



echo "gitlab auto backup to remote server, start at $DATE" >> $LogFile



echo "---------------------------------分割线---------------------------------" >> $LogFile



echo "remote server is $RemoteUser@$RemoteIP:$BACKUPDIR" >> $LogFile



#追加日志到日志文件

echo "---------------------------------结束-----------------------------------" >> $LogFile

Автоматически выполнять скрипт для удаления просроченных файлов резервных копий gitlabauto_remove_backup.sh

#!/bin/bash

#远程备份服务器gitlab备份文件存放路径
GITLABDIR=/var/opt/gitlab/backups

# 查找远程备份路径下,超过7天且文件后缀为.tar的gitlab备份文件,然后删除
find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;

Автоматизировать восстановление скрипта gitlab из пакета резервной копииauto_recovery_backup.sh

#!/bin/bash



#备份文件所在目录

REMOTEDIRBACKUPS=/var/opt/gitlab/backups



#找到当日生成的备份文件

BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')



#当前系统日期 

DATE=`date "+%Y-%m-%d-%H-%M-%S"`



#Log存放路径

LogFile=$REMOTEDIRBACKUPS/log/$DATE.log



#新建日志文件

sudo touch $LogFile



#追加日志到日志目录

echo "---------------------------------开始-----------------------------------" >> $LogFile



echo "gitlab auto recovery, start at $DATE" >> $LogFile



echo "---------------------------------分割线---------------------------------" >> $LogFile



#输出日志,打印出当日生成的备份文件

echo "backup files generated on that day is $BACKUPFILE" >> $LogFile





#截取出主要文件名
RESTOREFILE=$(echo ${FILE%_gitlab*})


echo "---------------------------------分割线---------------------------------" >> $LogFile



#输出日志,打印出备份文件复制目标目录

echo "backup files generated scp to $REMOTEDIRBACKUPS" >> $LogFile



#进入到目标目录

cd $REMOTEDIRBACKUPS



#备份文件权限修改为可读可写可执行

chmod 777 $FILE
#停止相关数据连接服务

sudo gitlab-ctl stop unicorn

sudo gitlab-ctl stop sidekiq



#自动化交互,从备份文件恢复gitlab

sudo /usr/bin/expect -c " 

set timeout -1

spawn sudo gitlab-rake gitlab:backup:restore BACKUP=$RESTOREFILE

expect {

\"yes/no\" {set timeout -1; send \"yes\n\";exp_continue;}

\"yes/no\" {set timeout -1; send \"yes\n\"}

}



expect eof"

#开启gitlab

sudo gitlab-ctl start



echo "---------------------------------分割线---------------------------------" >> $LogFile



#输出日志,从备份文件恢复gitlab

echo "recovery was successful" >> $LogFile


#追加日志到日志目录

echo "---------------------------------结束-----------------------------------" >> $LogFile




использованная литература

официальный сайт гитлаб

установка gitlab в ubuntu16.04

автоматическое резервное копирование gitlab

[git Learning] Произошла ошибка при восстановлении GitLab в системе CenterOS: tar: из-за предыдущей ошибки выход из распаковки резервной копии с последним состоянием ошибки не удалось

Как проверить номер версии GitLab

Удаление Gitlab в Linux

git Learning------> Как Gitlab выполняет резервное копирование и миграцию?

[git Learning] Установите GitLab в системе CenterOS и настройте доменное имя для доступа к странице управления GitLab.

дополнение разрешений linux: rwt rwT rws rwS специальные разрешения

Эта статья была впервые опубликована на паблике "Front-end Keep", прошу обратить внимание.

Наконец, я надеюсь, что все должны поставить палец вверх.

Следите за моим блогом:адрес блога