нужно
- Установите и соберите gitlab на новом сервере
- Ручной + автоматический бэкап gitlab на старом сервере
- Ручной + автоматический пакет резервного копирования scp gitlab на новый сервер
- Ручное + автоматическое восстановление пакетов резервных копий gitlab на новом сервере
- Автоматически удалять просроченные пакеты резервных копий на старых и новых серверах
помещение
- Версия
- gitlab-ce — это версия сообщества
- gitlab-ee — это корпоративная версия.
- строить планы
- Таймер для выполнения сценария оболочки
- инструмент
- действовать
- Если вы не root, пожалуйста, +sudo перед всеми командами
- Версия gitlab нового и старого серверов согласована
- Используется старый сервер
gitlab-ee_10.7.2-ee.0_amd64.deb
версия gitlab, в примере также выбрана эта корпоративная версия
- Каталог резервных копий может управляться только пользователем root, но пользователем операции восстановления gitlab является git
Так что поместите старый и новый серверы на/var/opt/gitlab/backups
Папка настроена на чтение, запись и исполняемый файл для удобства работы.
sudo chmod 777 backups/
С этого момента я буду действовать шаг за шагом, ведя всех от установки до автоматического резервного копирования, и, наконец, реализовать мечту о том, чтобы не беспокоить резервное копирование gitlab и иметь возможность сосредоточиться на кодировании.
Установите и соберите gitlab на новом сервере
- Способ установки 1: установка с официального сайта (медленная)
- Способ установки 2: установка домашнего зеркала (быстро)
Установите gitlab на официальном сайте
пожалуйста ткнитеОфициальный сайт гитлаба
Так как моя система ubuntu, я выбираю ubuntu Шаги установки показаны ниже
- Установите и настройте необходимые зависимости
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
- Установить
Postfix
для отправки уведомлений по электронной почте. Если вы хотите отправлять электронные письма другим способом, после установки gitlab следующим шагом будет настройка дополнительной службы SMTP.
sudo apt-get install -y postfix
во время установкиPostfix
Появится экран конфигурации. выберитеInternet Site
и нажмите Enter.mail name
для DNS вашего сервера и нажмите Enter. Если появятся дополнительные экраны, продолжайте принимать конфигурацию по умолчанию и нажмите Enter.
- Добавьте репозиторий установочного пакета gitlab и установите его.
Добавить репозиторий пакетов gitlab
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
- Установите пакет 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под версию.
- Сначала обновите репозиторий
sudo apt-get update
- Присоединяйтесь к открытому ключу GPG gitlab
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
- Напишите и выберите свою версию 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
- Обновите репозиторий 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
- Откройте исходный серверный терминал gitlab, измените
gitlab.rb
Файл конфигурации для изменения каталога по умолчанию для хранения файлов резервных копий.
sudo vim /etc/gitlab/gitlab.rb
- Значение по умолчанию выглядит следующим образом
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
- Буду
backup_path
перейти в пользовательский каталог
gitlab_rails['backup_path'] = "/data/gitlab/backups"
- Перезапустите файл конфигурации после модификации
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
Начинается установка, всего происходит два взаимодействия
- Выбрасывать ли предыдущий склад
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
- В процессе генерации вам будет предложено ввести место хранения пары ключей, просто нажмите Enter и примите значение по умолчанию.
- Поскольку файл /root/.ssh/id_rsa уже существует ранее, он предложит вам перезаписать, введите y, чтобы перезаписать
- Затем вам будет предложено ввести пароль, просто нажмите Enter и оставьте поле пустым. Конечно, вы также можете ввести пароль.
- Затем введите пароль подтверждения, и после его ввода будет сгенерирована пара ключей 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
- Выполнить команду без sudo
bash auto_scp.sh
В настоящее время пароль не требуется
- Просмотр файлов журнала
- Обнаружено, что резервный пакет появился на новом сервере
Добавить в 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
Как проверить номер версии GitLab
git Learning------> Как Gitlab выполняет резервное копирование и миграцию?
дополнение разрешений linux: rwt rwT rws rwS специальные разрешения
Эта статья была впервые опубликована на паблике "Front-end Keep", прошу обратить внимание.
Наконец, я надеюсь, что все должны поставить палец вверх.
Следите за моим блогом:адрес блога