Files
docker-s3-backup/.github/README.md
S.Gromov 6a01de5060
Some checks are pending
Build and Push Docker Image (gitea) / build-and-push (push) Waiting to run
refactor: Обновлен ридми для GitHub
2025-10-25 08:47:34 +03:00

135 lines
4.8 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.

> [!WARNING]
> **Это зеркало!** Основной репозиторий: [https://gromlab.ru/gromov/docker-s3-backup](https://gromlab.ru/gromov/docker-s3-backup)
>
> GitHub утратил статус надежной площадки для open-source, применяя политические блокировки репозиториев вместо сохранения нейтралитета. Блокировки коснулись разработчиков из России (Донецк, Луганск, Крым, Херсонская обл., Запорожская обл.), Ирана, Сирии, Кубы и Северной Кореи.
>
> - ⚠️ Pull requests и issues создавайте только в основном репозитории
> - 🔄 Зеркало обновляется автоматически
> - 🚫 Изменения здесь будут перезаписаны
# Docker S3 Backup
Автоматическое резервное копирование Docker-проектов в S3-хранилище по расписанию.
## Что делает
- Создаёт полный архив директории проекта
- Загружает в S3-совместимое хранилище (Yandex Cloud, Timeweb, AWS S3, MinIO)
- Работает по расписанию cron (по умолчанию: каждый день в 05:00 МСК)
- Хранит только последние N версий бэкапов (по умолчанию: 30)
- Сохраняет бекапы в папку с именем проекта: `s3://bucket/project-name/`
- Опционально останавливает сервисы перед бекапом
## Быстрый старт
Создайте `docker-compose.yaml`:
```yaml
services:
backup:
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
```
Запустите:
```bash
docker compose up -d backup
```
**По умолчанию:**
- Часовой пояс: `Europe/Moscow`
- Расписание: каждый день в `05:00`
- Хранение: `30` последних версий
- Папка в S3: `{project-name}/`
## Ручной запуск бекапа
```bash
docker exec project-backup /scripts/backup.sh
```
## Переменные окружения
### Обязательные
| Переменная | Описание | Пример |
|------------|----------|--------|
| `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` |
### Опциональные
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `TZ` | `Europe/Moscow` | Часовой пояс |
| `BACKUP_PROJECT_NAME` | `project` | Имя проекта |
| `BACKUP_SCHEDULE` | `0 5 * * *` | Расписание cron |
| `BACKUP_RETENTION_COUNT` | `30` | Количество версий |
| `BACKUP_S3_REGION` | `ru-1` | Регион S3 |
| `BACKUP_S3_FOLDER` | `{project}` | Папка в бакете |
| `BACKUP_ON_START` | `false` | Бекап при старте |
| `BACKUP_STOP_SERVICES` | - | Сервисы для остановки |
## Полезные команды
**Просмотр логов:**
```bash
docker logs -f project-backup
docker exec project-backup tail -f /var/log/backup.log
```
**Проверка S3:**
```bash
docker exec project-backup aws s3 ls s3://your-bucket --endpoint-url=https://your-endpoint
```
## Расписания cron
```yaml
# Каждый день в 05:00
- BACKUP_SCHEDULE=0 5 * * *
# Каждые 6 часов
- BACKUP_SCHEDULE=0 */6 * * *
# Каждое воскресенье в 02:00
- BACKUP_SCHEDULE=0 2 * * 0
# Каждые 30 минут
- BACKUP_SCHEDULE=*/30 * * * *
```
## Остановка сервисов
Для консистентности данных можно останавливать сервисы:
```yaml
environment:
- BACKUP_STOP_SERVICES=gitea postgres
```
**Важно:** Контейнер `backup` должен быть запущен из **того же** `docker-compose.yaml` что и целевые сервисы. Project name определяется автоматически через Docker labels.
Сервисы автоматически запустятся после создания архива.
## Лицензия
MIT