Резервное копирование Docker контейнеров
Эта статья была создана с помощью Chat GPT-4 на основе моей большой беседы с ней и отладки скрипта, а затем отредактирована мной. Я добился рабочего результата, но это касается только моего конкретного случая. Эта статья в первую очередь для того чтобы я сохранил свой собственный best way для достижения результата В статье могут быть ошибки, поэтому, пожалуйста, не рассматривайте её как единственно верное решение или истину в последней инстанции.
Резервное копирование Docker контейнеров является критически важным для обеспечения сохранности данных и конфигураций ваших приложений. В этой статье мы рассмотрим, как настроить автоматическое резервное копирование Docker контейнеров и конфигурационных файлов, используя скрипт bash и docker-backup
. Также включим шаги по загрузке резервных копий на FTP-сервер для дополнительной безопасности.
Подготовка:
Docker Installation Guide
Docker Compose Installation Guide
lftp Official Site
Go Installation Guide
docker-backup on GitHub
Шаг 1: Установка необходимых инструментов
Прежде чем приступить к созданию резервных копий, убедитесь, что у вас установлены необходимые инструменты: docker
, docker-compose
, lftp
, и docker-backup
.
Установка lftp
Для загрузки резервных копий на FTP-сервер установите lftp
:
sudo apt-get update sudo apt-get install lftp
Установка Go
Для установки Go выполните следующие шаги:
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
2. Распакуйте архив и установите Go:
sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.profile source ~/.profile
Скачайте и установите docker-backup
с GitHub:
git clone https://github.com/muesli/docker-backup.git cd docker-backup go build sudo mv docker-backup /usr/local/bin/
Шаг 2: Создание директории для резервных копий
Создайте директорию, в которой будут храниться резервные копии:
mkdir -p /root/backup
Шаг 3: Создание скрипта резервного копирования
Создайте скрипт резервного копирования, который будет выполнять все необходимые операции, включая создание резервных копий контейнеров, копирование файлов docker-compose.yml
и загрузку на FTP-сервер.
Скрипт резервного копирования
Создайте файл /root/docker-backup/backup_script.sh
и вставьте в него следующий код:
#!/bin/bash # Директория для сохранения резервных копий BACKUP_DIR="/root/backup" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_DIR_TIMESTAMP="$BACKUP_DIR/$TIMESTAMP" # Убедитесь, что директория для резервных копий существует mkdir -p $BACKUP_DIR_TIMESTAMP/easyappointments mkdir -p $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy # Создание резервных копий всех контейнеров и томов cd /root/docker-backup ./docker-backup backup easyappointments-easyappointments-1 --tar ./docker-backup backup easyappointments-mysql-1 --tar ./docker-backup backup n8n-docker-caddy-caddy-1 --tar ./docker-backup backup n8n-docker-caddy-postgres-1 --tar ./docker-backup backup n8n-docker-caddy-n8n-1 --tar # Перемещение созданных резервных копий в соответствующие директории mv alextselegidis_easyappointments-latest-easyappointments-easyappointments-1.tar $BACKUP_DIR_TIMESTAMP/easyappointments/ mv mysql-8.0-easyappointments-mysql-1.tar $BACKUP_DIR_TIMESTAMP/easyappointments/ mv caddy-latest-n8n-docker-caddy-caddy-1.tar $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/ mv postgres-13-n8n-docker-caddy-postgres-1.tar $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/ mv docker.n8n.io_n8nio_n8n-n8n-docker-caddy-n8n-1.tar $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/ # Копирование файлов docker-compose.yml cp /root/easyappointments/docker-compose.yml $BACKUP_DIR_TIMESTAMP/easyappointments/ cp /root/n8n-docker-caddy/docker-compose.yml $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/ # Загрузка резервных копий и docker-compose.yml файлов на FTP-сервер с временными метками FTP_SERVER="storagebox.com" FTP_USERNAME="username" FTP_PASSWORD="password" # Создание директории на FTP сервере lftp -u $FTP_USERNAME,$FTP_PASSWORD $FTP_SERVER <<EOF mkdir -p backup/easyappointments mkdir -p backup/n8n-docker-caddy quit EOF # Загрузка резервных копий for file in $BACKUP_DIR_TIMESTAMP/easyappointments/*.tar; do BASENAME=$(basename $file) lftp -u $FTP_USERNAME,$FTP_PASSWORD -e "put $file -o /backup/easyappointments/${TIMESTAMP}_$BASENAME; quit" $FTP_SERVER done for file in $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/*.tar; do BASENAME=$(basename $file) lftp -u $FTP_USERNAME,$FTP_PASSWORD -e "put $file -o /backup/n8n-docker-caddy/${TIMESTAMP}_$BASENAME; quit" $FTP_SERVER done # Загрузка docker-compose.yml файлов с временными метками lftp -u $FTP_USERNAME,$FTP_PASSWORD -e "put $BACKUP_DIR_TIMESTAMP/easyappointments/docker-compose.yml -o /backup/easyappointments/${TIMESTAMP}_docker-compose.yml; quit" $FTP_SERVER lftp -u $FTP_USERNAME,$FTP_PASSWORD -e "put $BACKUP_DIR_TIMESTAMP/n8n-docker-caddy/docker-compose.yml -o /backup/n8n-docker-caddy/${TIMESTAMP}_docker-compose.yml; quit" $FTP_SERVER echo "Backup completed and uploaded to FTP at $TIMESTAMP" >> /var/log/backup.log
Шаг 4: Настройка прав и создание задачи cron
Убедитесь, что у скрипта есть права на выполнение:
chmod +x /root/docker-backup/backup_script.sh
Добавьте задачу cron для автоматического выполнения скрипта, например, каждый день в 6 утра:
crontab -e
Добавьте следующую строку в файл crontab:
0 6 * * * /root/docker-backup/backup_script.sh >> /var/log/backup.log 2>&1
Заключение
Теперь у вас настроено автоматическое резервное копирование Docker контейнеров и файлов docker-compose.yml
, с загрузкой резервных копий на FTP-сервер. Этот скрипт гарантирует, что у вас всегда будет актуальная резервная копия ваших контейнеров и конфигураций, которая может быть использована для восстановления в случае необходимости.