Создание резервной копий сайта в хранилище 1cloud на Linux

В инструкции описано создание резервной копий сайта с популярной базой данных MySQL на Linux и ее отправка в объектное хранилище.

Что это такое?

Резервирование копий вашего сайта в облачное хранилище позволяет в любой момент времени иметь под рукой архив всех версий страниц и СУБД. Благодаря тому, что данные хранятся в хранилище, вы можете обратиться к ним из любой точки земного шара. В нашей инструкции будет создан скрипт с использованием утилиты mysqldump, tar, curl и Swift API.

Первоначальные требования

Для того чтобы настроить автоматическую резервирование базы данных, необходимо:

  1. Наличие контейнера в облачном хранилище, в котором будут храниться резервные копии. Создать его можно несколькими способами: через панель управления; с помощью приложений S3Browser, Cyberduck или Rclone; с помощью Swift API или S3 REST API.
  2. Необходимо запомнить ExternalId, это можно сделать через API запрос.
  3. Пользователь, от имени которого будет происходить загрузка дампа в контейнер хранилища, должен иметь к нему доступ. По умолчанию доступ имеет только владелец хранилища. О том как предоставить доступ другим пользователям для работы с контейнером читайте в нашей инструкции.

Создание скрипта

С помощью текстового редактора, например vi, создайте файл в удобном для вас месте, например:

vi $HOME/auto.bash

Внесите в него следующие строки, указав значения: данные о БД, которую использует CMS - имя пользователя базы данных,его пароль, название базы данных, полное название файла с дампом БД, путь до каталога, в котором развернут сайт, полное имя файла с токеном (токен генерируется скриптом), имя пользователя хранилища и его пароль, TenantId и ExternalId, а также имя контейнера и название файла в контейнере:

#!/bin/bash
mysqldump -u<имя_пользователя_БД> -p<пароль> <имя_БД> > <имя_и_путь_до_файла_с_дампом_БД>
tar -czf <имя_и_путь_архива_сайта> -P <имя_и_путь_до_каталога_с_сайтом> <имя_и_путь_до_файла_с_дампом_БД>
curl -D <имя_и_путь_до_файла_с_токеном> -v -s -X POST https://1cloud.store/v3/auth/tokens -H "Content-Type: application/json" -d '{
	"auth": {
		"identity": {
		"methods": ["password"],
		"password": {
			"user": {
				"name": "<имя_пользователя>",
						"domain": {
							"name": "Default"
						},
						"password": "<пароль>"
				}
			}
		},
		"scope": {
			"project": {
				"name": "<TenantId>",
				"domain": {
					"name": "Default"
				}
			}
		}
	}
}' 1>/dev/null
token=`grep -Po '(?<=X-Subject-Token: )[[:graph:]]+' <имя_и_путь_до_файла_с_токеном>`
curl -i https://1cloud.store/v1/AUTH_<ExternalId_хранилища>/<имя_контейнера>/<имя_дампа_в_хранилище>_`date +"%H:%M:%S_%d-%m-%Y"` -X PUT -d <имя_и_путь_до_файла_с_дампом> -H "Content-Type: text/html; charset=UTF-8" -H "X-Auth-Token: $token"

Пример скрипта

#!/bin/bash
mysqldump -umuser -pqwerty modx > $HOME/dump.sql
tar -czf site.tar.gz -P /var/www $HOME/dump.sql
curl -D $HOME/header -v -s -X POST https://1cloud.store/v3/auth/tokens -H "Content-Type: application/json" -d '{
	"auth": {
		"identity": {
		"methods": ["password"],
		"password": {
			"user": {
				"name": "1_admin",
						"domain": {
							"name": "Default"
						},
						"password": "nwriОtgd9Ki"
				}
			}
		},
		"scope": {
			"project": {
				"name": "1",
				"domain": {
					"name": "Default"
				}
			}
		}
	}
}' 1>/dev/null
token=`grep -Po '(?<=X-Subject-Token: )[[:graph:]]+' $HOME/header`
curl -i https://1cloud.store/v1/AUTH_z192bac9085473fc8350fd269040217a/new-bucket/dump_`date +"%H:%M:%S_%d-%m-%Y"` -X PUT -d $HOME/site.tar.gz -H "Content-Type: text/html; charset=UTF-8" -H "X-Auth-Token: $token"

Не забудьте изменить права доступа к файлу для возможности его исполнения:

chmod o+x $HOME/auto.bash

Чтобы выполнить скрипт используйте следующий синтаксис:

./$HOME/auto.bash

Примечание: с помощью планировщика Cron вы можете настроить регулярную автоматическую отправку резервных копий сайта с сервера в объектное хранилище.

 


Средняя оценка: 5,0, всего оценок: 1