Обновлены скрипты и конфигурации для улучшения резервного копирования

- Изменено имя папки в S3 на имя проекта по умолчанию
- Обновлено количество хранимых версий бэкапов вместо дней
- Изменено расписание запуска бэкапов на 05:00
- Обновлены переменные окружения в примерах и документации
- Улучшено логирование и обработка старых бэкапов
This commit is contained in:
2025-10-22 10:24:53 +03:00
parent c982c4e359
commit f8e0267b54
6 changed files with 130 additions and 260 deletions

263
README.md
View File

@@ -1,138 +1,99 @@
# 🗄️ Universal Docker Backup Service
# Docker S3 Backup
![Build Status](https://github.com/USERNAME/docker-s3-backup/actions/workflows/docker-build.yml/badge.svg)
Автоматическое резервное копирование Docker-проектов в S3-хранилище по расписанию.
Универсальная система автоматического резервного копирования Docker-проектов с загрузкой в S3-совместимое хранилище.
## Что делает
## ✨ Возможности
- Создаёт полный архив директории проекта
- Загружает в S3-совместимое хранилище (Yandex Cloud, Timeweb, AWS S3, MinIO)
- Работает по расписанию cron (по умолчанию: каждый день в 05:00 МСК)
- Хранит только последние N версий бэкапов (по умолчанию: 30)
- Сохраняет бекапы в папку с именем проекта: `s3://bucket/project-name/`
- Опционально останавливает сервисы перед бекапом
- ✅ Автоматическое создание tar.gz архивов по расписанию (cron)
- ✅ Загрузка бэкапов в S3-совместимые хранилища (Yandex Cloud, AWS S3, MinIO, Timeweb и т.д.)
- ✅ Опциональная остановка сервисов перед бекапом для консистентности данных
- ✅ Автоматическое удаление старых бэкапов
- ✅ Подробное логирование всех операций
- ✅ Запуск в отдельном Docker-контейнере
## Быстрый старт
## 🚀 Быстрый старт
### Вариант 1: Использование готового образа (рекомендуется)
Создайте `docker-compose.yaml` в директории вашего проекта:
Создайте `docker-compose.yaml`:
```yaml
services:
backup:
image: ghcr.io/USERNAME/docker-s3-backup:latest
image: ghcr.io/gromov-io/docker-s3-backup:latest
container_name: project-backup
restart: unless-stopped
environment:
# Ваши настройки (см. ниже)
- BACKUP_PROJECT_NAME=my-project
- BACKUP_S3_BUCKET=my-backups
- BACKUP_S3_ENDPOINT=s3.twcstorage.ru
- BACKUP_S3_ACCESS_KEY=your_key
- BACKUP_S3_SECRET_KEY=your_secret
volumes:
- .:/backup-source:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
```
### Вариант 2: Сборка из исходников
Скопируйте файлы в директорию вашего проекта, который нужно бекапить:
```bash
git clone <this-repo> backup-system
cd your-project
cp -r backup-system/* .
```
### Настройка
Отредактируйте `docker-compose.yaml` и укажите свои значения переменных окружения:
```yaml
environment:
# Обязательные параметры
- BACKUP_PROJECT_NAME=my-project
- BACKUP_S3_BUCKET=my-backups
- BACKUP_S3_ENDPOINT=s3.twcstorage.ru
- BACKUP_S3_ACCESS_KEY=your_access_key
- BACKUP_S3_SECRET_KEY=your_secret_key
# Необязательные параметры
- BACKUP_SCHEDULE=0 3 * * * # Каждый день в 03:00
- BACKUP_RETENTION_DAYS=30
```
### Запуск
Запустите:
```bash
docker compose up -d backup
```
Проверить логи:
**По умолчанию:**
- Часовой пояс: `Europe/Moscow`
- Расписание: каждый день в `05:00`
- Хранение: `30` последних версий
- Папка в S3: `{project-name}/`
## Ручной запуск бекапа
```bash
docker compose logs -f backup
docker exec project-backup /scripts/backup.sh
```
> **Примечание:** Замените `USERNAME` в URL образа на ваш GitHub username после публикации проекта.
## Переменные окружения
## 📋 Переменные окружения
### Обязательные
Все параметры подробно описаны в `docker-compose.yaml` с примерами использования.
| Переменная | Описание | Пример |
|------------|----------|--------|
| `BACKUP_S3_BUCKET` | S3 бакет | `my-backups` |
| `BACKUP_S3_ENDPOINT` | S3 эндпоинт | `s3.twcstorage.ru` |
| `BACKUP_S3_ACCESS_KEY` | Ключ доступа | `your_key` |
| `BACKUP_S3_SECRET_KEY` | Секретный ключ | `your_secret` |
### Обязательные параметры
### Опциональные
| Параметр | Описание | Пример |
|----------|----------|--------|
| `BACKUP_S3_BUCKET` | Имя S3 бакета | `my-backups` |
| `BACKUP_S3_ENDPOINT` | Эндпоинт S3 сервиса | `s3.twcstorage.ru` |
| `BACKUP_S3_ACCESS_KEY` | Ключ доступа S3 | `your_key` |
| `BACKUP_S3_SECRET_KEY` | Секретный ключ S3 | `your_secret` |
### Необязательные параметры
| Параметр | Значение по умолчанию | Описание |
|----------|----------------------|----------|
| `BACKUP_PROJECT_NAME` | `project` | Имя проекта для архивов |
| `BACKUP_S3_FOLDER` | ` ` (корень) | Папка внутри бакета |
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `TZ` | `Europe/Moscow` | Часовой пояс |
| `BACKUP_PROJECT_NAME` | `project` | Имя проекта |
| `BACKUP_SCHEDULE` | `0 5 * * *` | Расписание cron |
| `BACKUP_RETENTION_COUNT` | `30` | Количество версий |
| `BACKUP_S3_REGION` | `ru-1` | Регион S3 |
| `BACKUP_RETENTION_DAYS` | `30` | Дни хранения бэкапов |
| `BACKUP_SCHEDULE` | `0 3 * * *` | Расписание cron |
| `BACKUP_S3_FOLDER` | `{project}` | Папка в бакете |
| `BACKUP_ON_START` | `false` | Бекап при старте |
| `BACKUP_STOP_SERVICES` | ` ` | Сервисы для остановки |
| `BACKUP_COMPOSE_FILE` | ` ` | Путь к compose-файлу |
| `BACKUP_STOP_SERVICES` | - | Сервисы для остановки |
## 🛠️ Расширенные сценарии
### Остановка сервисов перед бекапом
## Полезные команды
Для консистентности данных можно останавливать сервисы перед созданием архива:
```yaml
environment:
# ... другие параметры ...
- BACKUP_STOP_SERVICES=gitea gitea-db
- BACKUP_COMPOSE_FILE=/backup-source/docker-compose.yml
**Просмотр логов:**
```bash
docker logs -f project-backup
docker exec project-backup tail -f /var/log/backup.log
```
**Важно:**
- Сервисы будут остановлены через `docker compose down`
- После создания архива сервисы автоматически запустятся через `docker compose up -d`
- Если бекап упадет с ошибкой - сервисы все равно запустятся обратно
### Изменение директории для бекапа
По умолчанию бекапится текущая директория (`.`). Чтобы изменить:
```yaml
volumes:
- /path/to/your/project:/backup-source:ro
# ... остальные volumes ...
**Проверка S3:**
```bash
docker exec project-backup aws s3 ls s3://your-bucket --endpoint-url=https://your-endpoint
```
### Примеры расписаний (cron)
## Расписания cron
```yaml
# Каждый день в 03:00
- BACKUP_SCHEDULE=0 3 * * *
# Каждый день в 05:00
- BACKUP_SCHEDULE=0 5 * * *
# Каждые 6 часов
- BACKUP_SCHEDULE=0 */6 * * *
@@ -142,123 +103,21 @@ volumes:
# Каждые 30 минут
- BACKUP_SCHEDULE=*/30 * * * *
# Дважды в день: 03:00 и 15:00
- BACKUP_SCHEDULE=0 3,15 * * *
```
### Тестовый бекап
## Остановка сервисов
Для проверки настроек запустите бекап вручную:
```bash
docker compose exec backup /scripts/backup.sh
```
Или включите бекап при старте:
Для консистентности данных можно останавливать сервисы:
```yaml
- BACKUP_ON_START=true
environment:
- BACKUP_STOP_SERVICES=app db
```
## 📂 Формат архивов
Сервисы автоматически запустятся после создания архива.
Архивы создаются в формате:
```
{BACKUP_PROJECT_NAME}-backup-YYYY-MM-DD_HH-MM-SS.tar.gz
```
Пример: `my-project-backup-2025-10-22_03-00-00.tar.gz`
## 🔧 Структура проекта
```
.
├── backup.sh # Основной скрипт бекапа
├── entrypoint.sh # Точка входа контейнера
├── crontab # Шаблон cron (генерируется автоматически)
├── Dockerfile # Образ контейнера
├── docker-compose.yaml # Конфигурация сервиса
└── README.md # Документация
```
## 🐛 Решение проблем
### Проверка логов
```bash
# Все логи
docker compose logs backup
# Логи в реальном времени
docker compose logs -f backup
# Внутренние логи бекапа
docker compose exec backup cat /var/log/backup.log
```
### Проверка доступа к S3
```bash
docker compose exec backup aws s3 ls s3://your-bucket --endpoint-url=https://your-endpoint
```
### Ручной запуск бекапа
```bash
docker compose exec backup /scripts/backup.sh
```
## 📊 S3-провайдеры
### Yandex Cloud Object Storage
```yaml
- BACKUP_S3_ENDPOINT=storage.yandexcloud.net
- BACKUP_S3_REGION=ru-central1
```
### Timeweb Cloud S3
```yaml
- BACKUP_S3_ENDPOINT=s3.twcstorage.ru
- BACKUP_S3_REGION=ru-1
```
### AWS S3
```yaml
- BACKUP_S3_ENDPOINT=s3.amazonaws.com
- BACKUP_S3_REGION=us-east-1
```
### MinIO (self-hosted)
```yaml
- BACKUP_S3_ENDPOINT=minio.your-domain.com
- BACKUP_S3_REGION=us-east-1
```
## 🔄 CI/CD
Проект использует GitHub Actions для автоматической сборки и публикации Docker-образов:
- **Сборка:** При каждом push в main/master
- **Публикация:** Автоматическая публикация в GitHub Container Registry (ghcr.io)
- **Платформы:** Поддержка amd64 и arm64 архитектур
- **Теги:**
- `latest` - последняя версия из main/master
- `v1.0.0` - семантическое версионирование при создании тегов
- `main-sha` - образы с хешем коммита
Готовые образы доступны по адресу: `ghcr.io/USERNAME/docker-s3-backup`
## 📝 Лицензия
## Лицензия
MIT
## 🤝 Поддержка
При возникновении проблем создайте issue в репозитории.