Files
docker-s3-backup/README.md
S.Gromov c982c4e359 Обновлен README.md для улучшения документации
- Добавлен статус сборки проекта с помощью GitHub Actions
- Включены два варианта быстрого старта: использование готового образа и сборка из исходников
- Добавлен раздел о CI/CD с информацией о автоматической сборке и публикации Docker-образов
- Уточнены инструкции по настройке и запуску сервиса
2025-10-22 09:41:48 +03:00

265 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🗄️ Universal Docker Backup Service
![Build Status](https://github.com/USERNAME/docker-s3-backup/actions/workflows/docker-build.yml/badge.svg)
Универсальная система автоматического резервного копирования Docker-проектов с загрузкой в S3-совместимое хранилище.
## ✨ Возможности
- ✅ Автоматическое создание tar.gz архивов по расписанию (cron)
- ✅ Загрузка бэкапов в S3-совместимые хранилища (Yandex Cloud, AWS S3, MinIO, Timeweb и т.д.)
- ✅ Опциональная остановка сервисов перед бекапом для консистентности данных
- ✅ Автоматическое удаление старых бэкапов
- ✅ Подробное логирование всех операций
- ✅ Запуск в отдельном Docker-контейнере
## 🚀 Быстрый старт
### Вариант 1: Использование готового образа (рекомендуется)
Создайте `docker-compose.yaml` в директории вашего проекта:
```yaml
services:
backup:
image: ghcr.io/USERNAME/docker-s3-backup:latest
container_name: project-backup
restart: unless-stopped
environment:
# Ваши настройки (см. ниже)
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
```
Проверить логи:
```bash
docker compose logs -f backup
```
> **Примечание:** Замените `USERNAME` в URL образа на ваш GitHub username после публикации проекта.
## 📋 Переменные окружения
Все параметры подробно описаны в `docker-compose.yaml` с примерами использования.
### Обязательные параметры
| Параметр | Описание | Пример |
|----------|----------|--------|
| `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` | ` ` (корень) | Папка внутри бакета |
| `BACKUP_S3_REGION` | `ru-1` | Регион S3 |
| `BACKUP_RETENTION_DAYS` | `30` | Дни хранения бэкапов |
| `BACKUP_SCHEDULE` | `0 3 * * *` | Расписание cron |
| `BACKUP_ON_START` | `false` | Бекап при старте |
| `BACKUP_STOP_SERVICES` | ` ` | Сервисы для остановки |
| `BACKUP_COMPOSE_FILE` | ` ` | Путь к compose-файлу |
## 🛠️ Расширенные сценарии
### Остановка сервисов перед бекапом
Для консистентности данных можно останавливать сервисы перед созданием архива:
```yaml
environment:
# ... другие параметры ...
- BACKUP_STOP_SERVICES=gitea gitea-db
- BACKUP_COMPOSE_FILE=/backup-source/docker-compose.yml
```
**Важно:**
- Сервисы будут остановлены через `docker compose down`
- После создания архива сервисы автоматически запустятся через `docker compose up -d`
- Если бекап упадет с ошибкой - сервисы все равно запустятся обратно
### Изменение директории для бекапа
По умолчанию бекапится текущая директория (`.`). Чтобы изменить:
```yaml
volumes:
- /path/to/your/project:/backup-source:ro
# ... остальные volumes ...
```
### Примеры расписаний (cron)
```yaml
# Каждый день в 03:00
- BACKUP_SCHEDULE=0 3 * * *
# Каждые 6 часов
- BACKUP_SCHEDULE=0 */6 * * *
# Каждое воскресенье в 02:00
- BACKUP_SCHEDULE=0 2 * * 0
# Каждые 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
```
## 📂 Формат архивов
Архивы создаются в формате:
```
{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 в репозитории.