Как сделать резервную копию вашего Git-репозитория в DigitalOcean Spaces

Вступление

Использование репозитория исходного кода для управления версиями - это лучшая практика, которая может помочь нам вернуться к работе, когда изменение кода приводит к сбою нашего приложения или неправильному поведению. Тем не менее, в случае катастрофического события, такого как полное удаление ветки или ее случайное удаление, мы должны использовать дополнительные стратегии аварийного восстановления.

Резервное копирование нашего репозитория кода в инфраструктуру хранения объектов предоставляет нам стороннюю копию наших данных, которую мы можем восстановить при необходимости. Spaces - это решение для хранения объектов DigitalOcean, которое предлагает пользователям место назначения для хранения резервных копий цифровых активов, документов и кода.

Совместимый с S3 API, Spaces позволяет нам использовать инструменты S3, такие как S3cmd, для взаимодействия с ним. S3cmd - это клиентский инструмент, который мы можем использовать для загрузки, извлечения и управления данными из хранилища объектов через командную строку или через сценарии.

В этом уроке мы покажем, как сделать резервную копию удаленного Git-репозитория в DigitalOcean Space с помощью S3cmd. Для достижения этой цели мы установим и настроим Git, установим S3cmd и создадим сценарии для резервного копирования Git-репозитория в наше пространство.

Предпосылки

Для работы с Spaces вам потребуется учетная запись DigitalOcean. Если у вас его еще нет, вы можете зарегистрироваться на странице signup.

Оттуда вам нужно настроить ваше DigitalOcean Space и создать ключ API, которого вы можете получить, следуя нашему учебному руководству https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean. -space-and-api-key [Как создать пространство DigitalOcean и ключ API].

После создания вам нужно будет иметь под рукой следующую информацию о вашем Space:

  • Ключ доступа

  • Секретный ключ (также называемый токеном)

Кроме того, у вас должен быть установлен сервер Ubuntu 16.04 с пользователем не-root sudo. Вы можете получить руководство по настройке этого, следуя this учебник по первоначальной настройке сервера Ubuntu 16.04.

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

Установить Git

В этом уроке мы будем работать с удаленным Git-репозиторием, который мы будем клонировать на наш сервер. В Ubuntu Git установлен и готов к использованию в репозиториях по умолчанию, но эта версия может быть старше самой последней доступной версии.

Мы можем использовать инструменты управления пакетами + apt + для обновления локального индекса пакета, а также для загрузки и установки самой последней доступной версии Git.

sudo apt-get update
sudo apt-get install git

Для более гибкого способа установки Git и обеспечения того, чтобы у вас была последняя версия, вы можете рассмотреть https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-16-04 # how-to-install-git-from-source [установка Git из исходного кода].

Мы будем выполнять резервное копирование с URL-адреса репозитория Git, поэтому нам не нужно настраивать Git в этом руководстве. Для получения инструкций по настройке Git прочитайте этот раздел на https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-16-04#how-to-set-up-git [ Как настроить Git.

Теперь перейдем к клонированию нашего удаленного репозитория Git.

Клонировать удаленный репозиторий Git

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

Чтобы написать наш исполняемый скрипт, мы создадим новый файл сценария оболочки под названием + .sh + с текстовым редактором nano.

nano .sh

В этом пустом файле давайте напишем следующий скрипт.

cloneremote.sh

#!/bin/bash

remoterepo=
localclonedir=
clonefilename=.git

git clone --mirror $remoterepo $localclonedir/$clonefilename

Давайте пройдемся по каждому элементу этого сценария.

Первая строка - + #! / Bin / bash + - указывает, что скрипт будет запускаться оболочкой Bash. Оттуда мы определяем переменные, которые будут использоваться в команде, которая будет запускаться после выполнения скрипта. Эти переменные определяют следующие части конфигурации:

  • + remoterepo + назначается URL удаленного репозитория Git, с которого мы будем выполнять резервное копирование

  • + localclonedir + относится к каталогу или папке сервера, в которую мы будем клонировать удаленный репозиторий, в нашем случае мы назвали его ++

  • + clonefilename + относится к имени файла, которое мы предоставим в локальный клонированный репозиторий, в этом случае мы назвали его + .git +

Каждая из этих переменных затем вызывается непосредственно в команде в конце скрипта.

В последней строке скрипта используется клиент командной строки Git, начинающийся с команды + git +. Оттуда мы просим клонировать репозиторий с помощью + clone + и выполнять его как зеркальную версию репозитория с тегом + - mirror +. Это означает, что клонированный репозиторий будет точно таким же, как и исходный. Три переменные, которые мы определили выше, называются с помощью + $ +.

Если вы уверены, что написанный вами скрипт точен, вы можете выйти из nano, набрав клавиши + CTRL + + + x +, и когда появится запрос на сохранение файла, нажмите + y +.

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

sh .sh

После запуска команды вы получите вывод, подобный следующему.

OutputCloning into bare repository './/.git'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.

На этом этапе, если вы перечислите элементы в вашем текущем каталоге, вы должны увидеть там свой каталог резервного копирования, и если вы перейдете в этот каталог, вы увидите подпапку с именем файла, которое вы указали в сценарии. Этот подкаталог является клоном репозитория Git.

Теперь, когда мы клонировали наш удаленный репозиторий Git, мы можем перейти к установке S3cmd, которую мы можем использовать для резервного копирования репозитория в хранилище объектов.

Установить S3cmd

Инструмент S3cmd позволяет нам подключаться к среде Spaces из командной строки. Мы загрузим последнюю версию S3cmd с его public GitHub репозитория и следуем рекомендациям по его установке.

Перед установкой S3cmd нам нужно установить Python Setuptools, так как он поможет в нашей установке (S3cmd написан на Python).

sudo apt-get install python-setuptools

Нажмите + y + для продолжения.

После этого мы можем загрузить файл S3cmd + tar.gz + с помощью + curl +.

cd /tmp
curl -LO https://github.com/s3tools/s3cmd/releases/download//s3cmd-.tar.gz

Обратите внимание, что мы загружаем файл в наш каталог + tmp +. Это обычная практика при загрузке файлов на наш сервер.

Вы можете проверить, доступна ли более новая версия S3cmd, посетив страницу Releases репозитория GitHub этого инструмента. Если вы найдете более новую версию, вы можете скопировать URL + tar.gz + и подставить его в команду + curl + выше.

Когда загрузка завершится, разархивируйте и распакуйте файл, используя утилиту tar:

cd ~
tar xf /tmp/s3cmd-*.tar.gz

В приведенных выше командах мы вернулись в наш домашний каталог, а затем выполнили команду + tar. Мы использовали два флага с командой, + x + указывает, что мы хотим получить e x тракт из файла tar, и + f + указывает, что непосредственно смежная строка будет полным путевым именем файл, из которого мы хотим расширить. В пути к файлу tar мы также указываем, что он находится в каталоге + tmp +.

После извлечения файла перейдите в получившийся каталог и установите программное обеспечение с помощью sudo:

cd s3cmd-*
sudo python setup.py install

Для запуска вышеуказанной команды нам нужно использовать + sudo +. Команда + python + - это вызов интерпретатора Python для установки скрипта Python + setup.py +.

Проверьте установку, запросив у S3cmd информацию о версии:

s3cmd --version
Outputs3cmd version

Если вы видите похожий вывод, S3cmd был успешно установлен. Далее мы настроим S3cmd для подключения к нашей службе хранения объектов.

Настроить S3cmd

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

Давайте начнем процесс настройки, набрав следующую команду:

s3cmd --configure

Нам предлагается ввести наши ключи, поэтому давайте вставим их, а затем примем + US + для * Регион по умолчанию *. Стоит отметить, что возможность изменения региона по умолчанию имеет отношение к инфраструктуре AWS, с которой изначально был создан инструмент S3cmd. Поскольку для настройки DigitalOcean требуется меньше информации, это не имеет значения, поэтому мы принимаем значение по умолчанию.

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key []:
Secret Key []:
Default Region [US]:

Далее мы войдем в конечную точку DigitalOcean, + nyc3.digitaloceanspaces.com.

Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]:

Поскольку Spaces поддерживает сегменты на основе DNS, при следующем запросе мы предоставим значение сегмента в требуемом формате:

%(bucket)s.nyc3.digitaloceanspaces.com
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars c
an be used if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket []:

На этом этапе нас просят предоставить пароль шифрования. Мы введем пароль, чтобы он был доступен в том случае, если мы хотим использовать шифрование.

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:
Path to GPG program [/usr/bin/gpg]:

Далее нам будет предложено подключиться через HTTPS, но DigitalOcean Spaces не поддерживает незашифрованную передачу, поэтому мы нажмем + ENTER +, чтобы принять значение по умолчанию, + Yes +.

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]:

Поскольку мы не используем прокси-сервер HTTP, мы оставим следующее приглашение пустым и нажмем + ENTER +.

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:

После запроса имени прокси-сервера HTTP сценарий конфигурации предоставляет сводку значений, которые он будет использовать, а затем возможность их протестировать. После успешного завершения теста введите + Y +, чтобы сохранить настройки.

После сохранения конфигурации вы получите подтверждение ее местоположения.

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

s3cmd ls

Эта команда должна вывести список пробелов, которые у вас есть под учетными данными, которые вы указали.

Output2017-12-15 02:52  s3://

Это подтверждает, что мы успешно подключились к нашим пространствам DigitalOcean. Теперь мы можем перейти к резервному копированию нашего Git-репозитория в хранилище объектов.

Резервное копирование Git Repository в хранилище объектов

Теперь, когда все наши инструменты установлены и настроены, мы собираемся создать сценарий, который заархивирует локальный репозиторий и поместит его в наше пространство DigitalOcean.

Из нашего домашнего каталога давайте вызовем наш скрипт + .sh + и откроем его в nano.

cd ~
nano .sh

Мы напишем наш скрипт следующим образом.

movetospaces.sh

#!/bin/sh

tar -zcvf .tar.gz //.git
./s3cmd-/s3cmd put .tar.gz s3://

Ранее в этом уроке мы использовали + tar + для распаковки + s3cmd +, теперь мы используем + tar + для архивирования Git-репозитория перед его отправкой в ​​Spaces. В команде + tar + мы указываем четыре флага:

  • + z + сжимает, используя метод gzip

  • + c + создает новый файл вместо использования существующего

  • + v + указывает, что мы многословны относительно файлов, включаемых в сжатый файл

  • + f + присваивает имя результирующему файлу с именем, определенным в следующей строке

После флагов мы предоставляем имя файла для сжатого файла, в данном случае + .tar.gz +. Мы также предоставляем имя каталога, в который мы хотим заархивировать + //. Git +.

Затем скрипт выполняет + s3cmd put + для отправки + .tar.gz + в пространство назначения + s3: // +.

Среди команд, которые вы обычно используете с S3cmd, команда + put + отправляет файлы в Spaces. Другие команды, которые могут быть полезны, включают команду + get + для загрузки файлов из пространства и команду + delete + для удаления файлов. Вы можете получить список всех команд, принятых S3cmd, выполнив + s3cmd + без параметров.

Чтобы скопировать вашу резервную копию в ваш Space, мы выполним скрипт.

sh .sh

Вы увидите следующий вывод:

Output.git/
...
.git/packed-refs
upload: '.tar.gz' -> 's3:///.tar.gz'  [1 of 1]
6866 of 6866   100% in    0s    89.77 kB/s  done

Вы можете проверить правильность работы процесса, выполнив следующую команду:

s3cmd ls s3://

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

Output2017-12-18 20:31      6866   s3:///.tar.gz

Теперь мы успешно создали резервную копию нашего Git-репозитория в нашем DigitalOcean Space.

Заключение

Чтобы обеспечить быстрое восстановление кода при необходимости, важно поддерживать резервные копии. В этом руководстве мы рассмотрели, как сделать резервную копию удаленного репозитория Git в DigitalOcean Space с помощью Git, клиента S3cmd и сценариев оболочки. Это всего лишь один из десятков возможных сценариев, в которых вы можете использовать Spaces, чтобы помочь с вашими стратегиями аварийного восстановления и согласованности данных.

Вы можете узнать больше о том, что мы можем хранить в хранилище объектов, прочитав следующие руководства:

Related