Чтобы улучшить функциональность резервного копирования, я добавляю синхронизацию зашифрованных резервных копий в GCP.
Введение
После того, как я настроил резервную копию своей базы данных с помощью cronjob
, я подумал о хорошем решении, позволяющем также иметь резервные копии на случай сбоя сервера.
Вы можете прочитать, как я создал свою собственную простую стратегию резервного копирования здесь:
Первой идеей было что-то вроде задания rsync
, которое выполняется на моем ноутбуке и загружает БД каждый день. Но это не очень хорошее решение, поэтому я подумал о том, чтобы включить облачное хранилище. Потому что GCP имеет 300 долларов в виде бесплатных кредитов на данный момент, я предпочитаю его AWS.
Я создал бесплатную учетную запись здесь, а затем создал свой первый Storage Bucket.
Установка Google Cloud SDK
После того, как первоначальная настройка в облачной консоли была выполнена, я выполнил следующие шаги, чтобы подключить свой сервер к хранилищу Google. Если вы работаете с Docker Swarm , эту процедуру нужно повторить для КАЖДОГО рабочего в моем рое. Если вы хотите настроить Docker Swarm, вы можете прочитать об этом в другой статье от меня.
Загрузка Google Cloud SDK
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-353.0.0-linux-x86_64.tar.gz
Извлечь
tar -xf google-cloud-sdk-353.0.0-linux-x86_64.tar.gz
Установите SDK
./google-cloud-sdk/install.sh
После завершения процесса установки вы должны переподключить оболочку!
Инициализировать SDK
./google-cloud-skd/bin/gcloud init
Во время инициализации мне пришлось войти в свою учетную запись Google.
Найти корзину
gsutil ls
Теперь машина подключена к GCP, и я могу использовать gsutilдля резервного копирования своих данных.
Шифрование
Теперь, когда у меня есть подключение к Google на каждом сервере, я могу приступить к созданию сценария резервного копирования. Но сначала я собрал информацию о том, как архивировать резервные копии базы данных и хранить их в зашифрованном виде. У Google не должно быть моей базы данных! Я знаю: паранойя
Я выбираю процедуру шифрования, которая использует файл паролей в системе (который я также загрузил на свою машину). Поэтому мне пришлось создать безопасный пароль и экспортировать его в переменную, которую затем можно было использовать в скрипте.
Создать случайный пароль в файле
head -c 100 /dev/urandom | strings -n1 | tr -d '[:space:]' | head -c 40 >> ~/.pass
Экспортируйте файл в .bashrc, чтобы использовать его, пока я нахожусь в оболочке.
echo "export PASS=~/.pass" >> ~/.bashrc && source ~/.bashrc
Сделать файл «безопасным»
chmod 400 ~/.pass
С помощью этих файлов .pass
я могу зашифровать и заархивировать папку с помощью:
tar czf - . | openssl enc -e -aes-256-cbc -pbkdf2 -iter 100000 -salt -out archive.enc -pass env:PASS
Для расшифровки я должен использовать:
openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -salt -in archive.enc -pass env:PASS | tar zxf - --directory backup_restore
Создание сценария оболочки резервного копирования
Последним шагом было действительно создать shell-script
, который затем будет выполняться в cronjob
. После исследования и тестирования был создан этот скрипт:
Важно знать, если вы читаете/используете этот файл:
- Замените
YOUR_BACKUP_STORAGE_PATH
на путь, по которому вы храните свои резервные копии. Эта папка должна иметь два подкаталога:backups_encrypted
иbackups
. YOUR_BUCKET_HERE
следует заменить на ведро, которое вы хотите использовать. Найдите его с помощьюgsutil ls
PATH_TO_GOOGLE_SDK_FOLDER
— это папка, в которую вы установили Google Cloud SDK.
Этот скрипт теперь можно использовать в cronjob
:
30 1 * * 6 export PASS=/root/.pass; /bin/sh /PATH_TO_SCRIPT/SCRIPTNAME.sh
Это cronjob
выполняется в 1:30 каждую субботу. Используйте crontab.guru для создания crontab
ОЧЕНЬ ВАЖНО: вам необходимо экспортировать переменную PASS
перед выполнением скрипта, потому что cronjob
не выполняется в том же bash, в котором вы находитесь как пользователь, а затем ранее экспортированная переменная PASS
не существует.
ТАКЖЕ ОЧЕНЬ ВАЖНО: не забудьте воссоздать cronjob
на каждом рабочем узле в рое (если вы используете Docker Swarm). В противном случае данные будут потеряны.
Заключительные примечания
В этом простом руководстве я объяснил, как я использовал Google Cloud SDK для сохранения зашифрованного zip-файла в моем Google Bucket здесь.
У меня есть еще один учебник, который объясняет, как вы можете загружать файлы на Amazon. Вы можете скопировать часть шифрования из этого руководства и объединить ее с загрузкой файла на S3:
Я надеюсь, что вы найдете эту статью полезной, а также сможете сохранить свою ценную резервную копию в облаке. Я хотел бы услышать ваши мысли, и если у вас есть какие-либо вопросы, пожалуйста, запишите их ниже.👇👇👇
Want to Connect With the Author? Here's my GitHub handle and LinkedId profile.
Эта статья изначально была опубликована в моем блоге по адресу https://www.paulsblog.dev/encrypt-database-backup-and-save-on-google-cloud-platform/