hyper-backup은 MySQL, PostgreSQL, MongoDB, Traefik 로그, 지정된 폴더 등을 자동으로 백업하고, rclone 또는 rsync를 통해 S3 호환 스토리지로 업로드할 수 있는 백업 도구입니다. Go로 작성되었으며, 도커 컨테이너 환경에 최적화되어 있습니다.
- ✅ MySQL, PostgreSQL, MongoDB 백업 (gzip 압축)
- ✅ Traefik JSON 로그 회전 및 USR1 시그널 전송
- ✅ 사용자 정의 폴더 백업 (
.tar.zst또는.tar.gz) - ✅ Rclone 또는 Rsync를 통한 외부 스토리지 업로드
- ✅ 크론 표현식 또는 간격 기반 스케줄링 지원
- ✅ 권한 감지 및
gosu로 사용자 전환 실행
sequenceDiagram
autonumber
participant Entrypoint
participant App as Main.go
participant Scheduler
participant Orchestrator as Service.go
participant MySQL
participant PostgreSQL
participant MongoDB
participant Traefik
participant Folder as FolderArchiver
participant Storage as Rclone/Rsync
Entrypoint->>App: exec hyper-backup (via gosu)
App->>Scheduler: Parse BACKUP_SCHEDULE or BACKUP_INTERVAL
Scheduler->>App: Wait for trigger
App->>Orchestrator: RunCoreServices()
alt If MYSQL_HOST is set
Orchestrator->>MySQL: RunMySQL()
MySQL->>MySQL: dump + gzip
end
alt If POSTGRES_HOST is set
Orchestrator->>PostgreSQL: RunPostgres()
PostgreSQL->>PostgreSQL: dump + gzip
end
alt If MONGO_HOST or MONGO_URI is set
Orchestrator->>MongoDB: RunMongo()
MongoDB->>MongoDB: mongodump + gzip + tar
end
alt If TRAEFIK_LOG_FILE is set
Orchestrator->>Traefik: LogrotateAndNotify()
Traefik->>Traefik: rotate + docker signal
end
App->>Folder: RunFileBackup()
Folder->>Folder: tar + zstd/gzip compression
App->>Storage: RunExternalBackups()
Storage->>Storage: rclone/rsync upload
Storage-->>App: ✅ Upload complete
App-->>Entrypoint: ✅ Backup cycle complete
| 환경변수 | 설명 |
|---|---|
MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE |
MySQL 설정 |
POSTGRES_HOST, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB |
PostgreSQL 설정 |
MONGO_URI 또는 MONGO_HOST, MONGO_DB |
MongoDB 설정 |
| 환경변수 | 설명 |
|---|---|
PACK_UP_HYPER_BACKUP_1, PACK_UP_HYPER_BACKUP_2, ... |
백업할 폴더 경로 |
FILE_BACKUP_COMPRESSION |
zstd (기본값) 또는 gzip |
| 환경변수 | 설명 |
|---|---|
TRAEFIK_LOG_FILE |
Traefik 로그 파일 경로 |
TRAEFIK_BACKUP_DIR (선택) |
추가 백업 디렉토리 |
| 환경변수 | 설명 |
|---|---|
RCLONE_REMOTE, RCLONE_PATH, S3_ENDPOINT, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY |
Rclone 설정 |
RSYNC_SRC, RSYNC_DEST |
Rsync 설정 |
RCLONE_RETENTION_DAYS |
삭제 보존 기간 (기본값 14일) |
| 환경변수 | 설명 |
|---|---|
BACKUP_SCHEDULE |
크론 표현식 (예: 0 0 * * *) |
BACKUP_INTERVAL_HOURS |
시간 간격 (예: 6) |
BACKUP_SCHEDULE가 우선이며, 없을 경우BACKUP_INTERVAL_HOURS, 둘 다 없으면 매일 자정 실행됩니다.
docker run --rm \
-e MYSQL_HOST=db \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DATABASE=testdb \
-e RCLONE_REMOTE=minio \
-e RCLONE_PATH=backup \
-e S3_ENDPOINT=http://minio:9000 \
-e AWS_ACCESS_KEY_ID=minioadmin \
-e AWS_SECRET_ACCESS_KEY=minioadmin \
-v /var/run/docker.sock:/var/run/docker.sock \
fvoci/hyper-backuphyper-backup is a container-friendly backup tool written in Go.
It automatically backs up MySQL, PostgreSQL, MongoDB, Traefik logs, and user-specified folders, and uploads them to external S3-compatible storage using rclone or rsync.
- ✅ MySQL, PostgreSQL, MongoDB backups (with gzip compression)
- ✅ Traefik log rotation and USR1 signal to container
- ✅ User-defined folder backup (
.tar.zstor.tar.gz) - ✅ Upload to external storage via Rclone or Rsync
- ✅ Supports cron expressions or interval-based scheduling
- ✅ Automatic user privilege switching via
gosu
sequenceDiagram
autonumber
participant Entrypoint
participant App as Main.go
participant Scheduler
participant Orchestrator as Service.go
participant MySQL
participant PostgreSQL
participant MongoDB
participant Traefik
participant Folder as FolderArchiver
participant Storage as Rclone/Rsync
Entrypoint->>App: exec hyper-backup (via gosu)
App->>Scheduler: Parse BACKUP_SCHEDULE or BACKUP_INTERVAL
Scheduler->>App: Wait for trigger
App->>Orchestrator: RunCoreServices()
alt If MYSQL_HOST is set
Orchestrator->>MySQL: RunMySQL()
MySQL->>MySQL: dump + gzip
end
alt If POSTGRES_HOST is set
Orchestrator->>PostgreSQL: RunPostgres()
PostgreSQL->>PostgreSQL: dump + gzip
end
alt If MONGO_HOST or MONGO_URI is set
Orchestrator->>MongoDB: RunMongo()
MongoDB->>MongoDB: mongodump + gzip + tar
end
alt If TRAEFIK_LOG_FILE is set
Orchestrator->>Traefik: LogrotateAndNotify()
Traefik->>Traefik: rotate + docker signal
end
App->>Folder: RunFileBackup()
Folder->>Folder: tar + zstd/gzip compression
App->>Storage: RunExternalBackups()
Storage->>Storage: rclone/rsync upload
Storage-->>App: ✅ Upload complete
App-->>Entrypoint: ✅ Backup cycle complete
| Variable | Description |
|---|---|
MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE |
MySQL configuration |
POSTGRES_HOST, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB |
PostgreSQL configuration |
MONGO_URI or MONGO_HOST, MONGO_DB |
MongoDB configuration |
| Variable | Description |
|---|---|
PACK_UP_HYPER_BACKUP_1, PACK_UP_HYPER_BACKUP_2, ... |
Absolute paths of folders to back up |
FILE_BACKUP_COMPRESSION |
Compression method: zstd (default) or gzip |
| Variable | Description |
|---|---|
TRAEFIK_LOG_FILE |
Path to Traefik's JSON log file |
TRAEFIK_BACKUP_DIR (optional) |
Additional backup directory for rotated logs |
| Variable | Description |
|---|---|
RCLONE_REMOTE, RCLONE_PATH, S3_ENDPOINT, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY |
Rclone config for S3-compatible targets |
RSYNC_SRC, RSYNC_DEST |
Rsync config |
RCLONE_RETENTION_DAYS |
Retention period in days (default: 14) |
| Variable | Description |
|---|---|
BACKUP_SCHEDULE |
Cron expression (e.g. 0 0 * * *) |
BACKUP_INTERVAL_HOURS |
Interval in hours (e.g. 6) |
If
BACKUP_SCHEDULEis set, it takes priority. If not,BACKUP_INTERVAL_HOURSis used. If neither is set, defaults to daily at midnight.
docker run --rm \
-e MYSQL_HOST=db \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DATABASE=testdb \
-e RCLONE_REMOTE=minio \
-e RCLONE_PATH=backup \
-e S3_ENDPOINT=http://minio:9000 \
-e AWS_ACCESS_KEY_ID=minioadmin \
-e AWS_SECRET_ACCESS_KEY=minioadmin \
-v /var/run/docker.sock:/var/run/docker.sock \
fvoci/hyper-backup
docker run --rm \
-e MYSQL_HOST=db \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DATABASE=testdb \
-e RCLONE_REMOTE=minio \
-e RCLONE_PATH=backup \
-e S3_ENDPOINT=http://minio:9000 \
-e AWS_ACCESS_KEY_ID=minioadmin \
-e AWS_SECRET_ACCESS_KEY=minioadmin \
-v /var/run/docker.sock:/var/run/docker.sock \
fvoci/hyper-backup