Sign inSign up

napadon/volume-backup

By napadon

•Updated 8 months ago

Image
0

514

napadon/volume-backup repository overview

⁠Docker Volume Backup to NAS (FTP/SFTP)


⁠🇬🇧 English

A lightweight Docker image based on Alpine Linux for automating backups of your Docker Volumes. It compresses your data into .tar.gz and automatically uploads it to a NAS or remote server via FTP or SFTP.

⁠🌟 Key Features
  • Automated Scheduling: Powered by cron to run backups at any interval you define.
  • Retention Policy (GFS): Keep your storage clean! Retains Daily (7 days), Weekly (4 weeks), and Monthly (forever) backups. Alternatively, limit by absolute count or days.
  • Secure Transfer: Supports SFTP/FTP protocols with lftp and openssh-client for secure offsite storage.
  • Lightweight: Built on Alpine, ensuring minimal footprint and fast deployment.
⁠🚀 Quick Start (via Docker Compose)

Here's an example docker-compose.yml configuration:

version: '3.8'

services:
  volume-backup:
    image: napadon/volume-backup:latest
    container_name: volume_backup_service
    environment:
      - BACKUP_PREFIX=my_data
      - TZ=Asia/Bangkok
      - CRON_SCHEDULE=0 2 * * *
      
      # Retention Policy
      - RETENTION_COUNT=14
      # - RETENTION_DAYS=30
      
      # NAS Upload
      - UPLOAD_PROTOCOL=sftp
      - NAS_HOST=192.168.1.100
      - NAS_USER=nas_user
      - NAS_PASS=nas_password
      - NAS_DIR=/home/backups
    volumes:
      - /path/to/your/data:/data:ro
    restart: unless-stopped
⁠⚙️ Environment Variables
VariableDefault ValueDescription
BACKUP_SOURCE/dataPath inside the container to backup data from.
BACKUP_DEST/backupLocal path to temporarily store .tar.gz before upload.
BACKUP_PREFIXbackupPrefix for the generated backup file (e.g. prefix_2026...tar.gz).
TZAsia/BangkokTimezone setting for accurate cron scheduling.
CRON_SCHEDULE0 2 * * *Cron expression defining the backup frequency.
RETENTION_COUNT(Empty)Hard limit on the number of backup files to keep. (Overrides GFS on NAS if used locally)
RETENTION_DAYS(Empty)Number of days to keep backup files locally.
UPLOAD_PROTOCOL(Empty)Protocol to use: sftp or ftp.
NAS_HOST(Empty)Hostname or IP address of the target NAS/Server.
NAS_USER(Empty)Username for NAS authentication.
NAS_PASS(Empty)Password for NAS authentication.
NAS_DIR(Empty)Target directory on the NAS to store backups.

⁠🇹🇭 ภาษาไทย

Image สำหรับ Docker ขนาดเล็ก (สร้างจาก Alpine) ถูกออกแบบมาเพื่อสำรองข้อมูล (Backup) จาก Docker Volume ของคุณโดยอัตโนมัติ ระบบจะทำการบีบอัดไฟล์ให้อยู่ในรูปแบบ .tar.gz จากนั้นจะอัปโหลดไปยังหน่วยเก็บข้อมูลภายนอก (NAS) ผ่าน FTP หรือ SFTP ให้ทันที

⁠🌟 ความสามารถหลัก
  • ตั้งเวลาสำรองอัตโนมัติ: ควบคุมความถี่ในการ Backup ผ่าน cron ได้อย่างยืดหยุ่นด้วยรูปแบบเวลาที่ต้องการ
  • นโยบายลบไฟล์อัตโนมัติ (GFS Retention): เคลียร์พื้นที่เก็บข้อมูลให้ว่างเสมอ! สคริปต์จะเก็บไฟล์สุดท้ายของวันไว้ (7 วันล่าสุด), สัปดาห์ (4 สัปดาห์ล่าสุด), และเดือน (เก็บถาวร) อย่างเป็นระบบ หรือจะเลือกใช้แค่จำกัดจำนวนวันทั่วไปก็ได้
  • ปลอดภัยหายห่วง: รองรับการส่งไฟล์ออกไปภายนอกด้วยโปรโตคอล SFTP (ผ่าน OpenSSH และ lftp)
  • กินสเปคน้อย: ถูกสร้างขึ้นบนระบบปฏิบัติการ Alpine ที่เบาบาง ทำให้โหลดเร็วและไม่เปลืองทรัพยากรเซิร์ฟเวอร์
⁠🚀 วิธีการใช้งานเบื้องต้น (ผ่าน Docker Compose)

ตัวอย่างการตั้งค่าไฟล์ docker-compose.yml เพื่อเรียกใช้งาน:

version: '3.8'

services:
  volume-backup:
    image: napadon/volume-backup:latest
    container_name: volume_backup_service
    environment:
      - BACKUP_PREFIX=my_data                 # คำนำหน้าไฟล์เพื่อระบุประเภทข้อมูล
      - TZ=Asia/Bangkok                       # ตั้งให้เวลาตรงตามทวีปเอเชีย/ไทย
      - CRON_SCHEDULE=0 2 * * *               # ตั้งเวลาทำงาน (ในที่นี้คือ ตี 2 ทุกวัน)
      
      # ตั้งเงื่อนไขการเก็บไฟล์ใน NAS หรือเครื่อง (Retention Policy)
      - RETENTION_COUNT=14                    # เก็บไว้ 14 ชุด ถ้าเกินจะลบอันเก่าทิ้ง
      # - RETENTION_DAYS=30                   # (ทางเลือก) ลบไฟล์ที่เก่ากว่า 30 วัน
      
      # การตั้งค่าเพื่ออัปโหลดลงระบบ NAS
      - UPLOAD_PROTOCOL=sftp                  # โปรโตคอล (sftp หรือ ftp)
      - NAS_HOST=192.168.1.100                # ไอพีของเซิร์ฟเวอร์สำรองข้อมูล
      - NAS_USER=nas_user                     # ชื่อผู้ใช้งาน
      - NAS_PASS=nas_password                 # รหัสผ่าน 
      - NAS_DIR=/home/backups                 # โฟลเดอร์ปลายทาง
    volumes:
      - /path/to/your/data:/data:ro           # (แนะนำให้ชี้ Data แบบ Read-only เพื่อป้องกันผิดพลาด)
    restart: unless-stopped
⁠⚙️ ตัวแปร (Environment Variables) ที่รองรับ
ตัวแปรค่าตั้งต้น (Default)คำอธิบาย
BACKUP_SOURCE/dataPath ตำแหน่งโฟลเดอร์ฝั่ง Container ที่ต้องการมัดรวม Backup
BACKUP_DEST/backupPath สำหรับไว้พักไฟล์ .tar.gz ชั่วคราวก่อนส่งขึ้น NAS
BACKUP_PREFIXbackupข้อความนำหน้าชื่อไฟล์
TZAsia/Bangkokโซนเวลา เพื่อให้เข้าจังหวะกับ Cron job
CRON_SCHEDULE0 2 * * *เลขความถี่ของ Cron ตั้งกติกาทำงาน
RETENTION_COUNT(ไม่ระบุ)จำนวนไฟล์รวมทั้งหมดที่จะเก็บไว้สลับลบทิ้ง (ถ้ามีจะข้ามกฎ GFS บน NAS)
RETENTION_DAYS(ไม่ระบุ)จำนวนวันสูงสุดที่จะเก็บไฟล์
UPLOAD_PROTOCOL(ไม่ระบุ)ใช้สำหรับโยนทาง sftp หรือ ftp
NAS_HOST(ไม่ระบุ)IP หรือ Host ของ NAS ปลายทาง
NAS_USER(ไม่ระบุ)ชื่อบัญชีล็อกอิน NAS
NAS_PASS(ไม่ระบุ)รหัสผ่าน NAS
NAS_DIR(ไม่ระบุ)ไดเรกทอรีบนเครื่อง NAS เพื่อเก็บข้อมูล

Author: Napadon (AI Generated) License: MIT

Tag summary

Content type

Image

Digest

sha256:f2a3d98a2…

Size

12.8 MB

Last updated

8 months ago

docker pull napadon/volume-backup