Обновлены скрипты и конфигурации для улучшения резервного копирования
- Изменено имя папки в S3 на имя проекта по умолчанию - Обновлено количество хранимых версий бэкапов вместо дней - Изменено расписание запуска бэкапов на 05:00 - Обновлены переменные окружения в примерах и документации - Улучшено логирование и обработка старых бэкапов
This commit is contained in:
263
README.md
263
README.md
@@ -1,138 +1,99 @@
|
||||
# 🗄️ Universal Docker Backup Service
|
||||
# Docker S3 Backup
|
||||
|
||||

|
||||
Автоматическое резервное копирование 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 в репозитории.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user