הגדרת גיבויי נפח Docker עם Restic

אובדן נתונים ב-Docker volumes משמעותו שעות עבודה ופגיעה באמון הצוות, במיוחד כשהגיבויים ידניים או חסרים. אנחנו מגדירים גיבויים אוטומטיים עם Restic, יוצרים snapshots מוצפנים ומבוזרים, והצוות שלנו מוסר את הפרויקט במפתח מלא—מביקורת ועד בדיקות שחזור שוטפות—ומבטיח הגנה אמינה ותמיכה מתמשכת.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הגדרת גיבויי נפח Docker עם Restic

תארו לעצמכם: אתם מנהלים GitLab על Docker. מישהו מריץ בטעות docker-compose down -v וכל מסדי הנתונים עם הבעיות, הוויקי, בקשות המיזוג נעלמים. או שהמארח נכשל, והגיבוי האחרון היה ידני לפני חודש. ללא הגנת נתונים אוטומטית, אתם מאבדים שעות של עבודה ואמון הצוות. כדי למנוע זאת, אנו מיישמים גיבוי של נפחי Docker עם Restic — כלי גיבוי מהיר שיוצר תמונות מצב מצטברות, ללא כפילויות ומוצפנות.

תיעוד Restic קובע ש-Restic משתמש בקריפטוגרפיה AES-256-GCM ותומך ב-S3, Backblaze B2, SFTP ותיקיות מקומיות. זהו בינארי Go שפועל ללא תלות. דדופליקציה ברמת בלוק עם בלוקים של 4 MB חוסכת עד 90% מקום בעת גיבוי נפחים דומים. להלן אנו מפרקים כיצד הגדרנו גיבוי עבור docker-compose ו-Kubernetes, ומדוע בדיקת שחזור היא לא אופציה אלא שלב חובה.

בעיות עיקריות שאנו פותרים

  • חוסר אוטומציה: גיבויים נעשים ידנית או לא בכלל. אנו מגדירים טיימר systemd או Kubernetes CronJob לפעולה יומית.
  • גיבויים המאוחסנים על אותו מארח: הם אובדים אם הדיסק נכשל. אנו שולחים עותקים לאחסון אובייקטים (S3, Selectel, Yandex Object Storage).
  • אין אימות שחזור: עותק גיבוי נחשב תקין עד שצריך אותו. אנו מריצים אוטומטית restic check ומבצעים שחזור סביבת ביניים שבועי.
  • עבור מסדי נתונים: גיבוי נפחים ללא עצירת מסד הנתונים מוביל לשחיתות נתונים. אנו משתמשים ב-dumps דרך pg_dump, mysqldump או mongodump.

למה Restic על פני rsync או Duplicity?

Restic מנצח עם דדופליקציה, מהירות ופשטות. rsync לא מצפין תוך כדי תנועה; duplicity איטי יותר באינקרמנטים. השוואה בפרמטרים מרכזיים:

קריטריון Restic rsync duplicity
דדופליקציה כן (ברמת בלוק, 4 MB) לא כן (לפי קובץ)
הצפנה AES-256-GCM דרך GnuPG (איטי) GnuPG (איטי)
אינקרמנטים כן, מהירות ~50 MB/s כן, אבל ללא דדופליקציה כן, אבל איטי
תמיכה ב-S3 טבעית דרך rclone דרך boto
פשטות בינארי יחיד חבילת מערכת חבילת מערכת

עבור נפחי קונטיינרים, Restic הוא אופטימלי. בבדיקות שלנו, הוא מהיר פי 2–3 מ-duplicity בגיבויים מצטברים של נפחים של 100 GB.

איך לאוטומט גיבויי נפח Docker?

תרחיש בסיסי לנפח יחיד

כדי לגבות נפח PostgreSQL, הריצו קונטיינר זמני עם התמונה restic/restic, תוך הרכבת הנפח לקריאה בלבד:

docker run --rm \
 -v postgres_data:/data:ro \
 -v restic-cache:/root/.cache/restic \
 -e RESTIC_REPOSITORY=s3:s3.amazonaws.com/my-bucket/docker-backups \
 -e RESTIC_PASSWORD=supersecret \
 -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
 -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
 restic/restic backup /data --tag postgres_data

האפשרות docker run --rm \ -v postgres_data:/data:ro \ -v restic-cache:/root/.cache/restic \ -e RESTIC_REPOSITORY=s3:s3.amazonaws.com/my-bucket/docker-backups \ -e RESTIC_PASSWORD=supersecret \ -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ restic/restic backup /data --tag postgres_data מבטיחה שהקונטיינר לא ישחית נתונים. עבור PostgreSQL, עדיף להשתמש ב-:ro בתוך הקונטיינר הרץ:

docker exec postgres_container pg_dump -U dbuser dbname \
| restic backup --stdin --stdin-filename postgres.sql \
  --tag postgres --tag daily

זה מונע מצב לא עקבי שיכול להתרחש בעת גיבוי נפח גולמי של מסד נתונים רץ.

אוטומציה דרך טיימר systemd

  1. צרו קובץ שירות pg_dump:
    [Unit]
    Description=Docker volumes backup via Restic
    After=docker.service
    
    [Service]
    Type=oneshot
    EnvironmentFile=/etc/docker-backup.env
    ExecStart=/usr/local/bin/backup-volumes.sh

    ב-Kubernetes, CronJob עם התמונה docker exec postgres_container pg_dump -U dbuser dbname \ | restic backup --stdin --stdin-filename postgres.sql \ --tag postgres --tag daily , הרכבת ה-PVCs הנדרשים לקריאה בלבד, מספק פונקציונליות דומה.

    איך לוודא שהגיבוי עובד?

    אנו כוללים אימות שחזור אוטומטי בהליך. לאחר כל גיבוי, /etc/systemd/system/docker-backup.service מאמת את שלמות המאגר. פעם בשבוע, מסד נתונים לבדיקה נפרס בסביבת ביניים ו-[Unit] Description=Docker volumes backup via Restic After=docker.service [Service] Type=oneshot EnvironmentFile=/etc/docker-backup.env ExecStart=/usr/local/bin/backup-volumes.sh מבוצע. רק לאחר שחזור מוצלח, תמונת המצב נחשבת תקפה. סטטיסטיקות: כ-12% מהגיבויים בשוק אינם פונקציונליים בבדיקה הראשונה.

    אנו גם מגדירים התראות דרך healthchecks.io או בוט טלגרם. אם גיבוי נכשל או בדיקת השחזור נכשלת, אתם מקבלים התראה תוך 5 דקות.

    מה כלול בהתקנה

    שלב משך תיאור
    התקנת Restic ומאגר 2–3 שעות התקנה, אתחול, הגדרת אחסון S3
    כתיבת סקריפטי גיבוי 1–2 שעות סקריפט Bash התומך במספר נפחים (קבצים + dumps של מסדי נתונים)
    הגדרת מתזמן שעה טיימר systemd או Kubernetes CronJob
    אימות שחזור שעה בדיקת restic/restic בסביבת ביניים עם רישום מדדים
    תיעוד שעה תיאור הליך השחזור, runbook
    ניטור והתראות 0.5 שעה אינטגרציה עם healthchecks.io או Prometheus

    כתוצאה מכך, אתם מקבלים:

    • סקריפטי גיבוי אוטומטיים לחלוטין לכל נפחי Docker של השירותים.
    • מתזמן מוגדר (טיימר systemd או Kubernetes CronJob).
    • אחסון ב-S3 (או ענן אחר) עם הצפנת AES-256-GCM.
    • תיעוד שחזור: פקודות שחזור, בדיקת שלמות.
    • התראות על גיבויים שנכשלו.
    • רוטציית תמונות מצב: שמירת יומי 7, שבועי 4, חודשי 6 עם restic check.

    התוצרים כוללים: סקריפטי גיבוי, הגדרת מתזמן, הגדרת אחסון S3, הצפנת AES-256, אינטגרציית ניטור ותיעוד מקיף. לצוות שלנו יש ניסיון של למעלה מ-5 שנים ב-DevOps ויותר מ-30 יישומי גיבוי מוצלחים, המבטיחים פתרונות אמינים ומוכחים בשטח.

    דוגמה לסקריפט מלא לגיבוי כל הנפחים
    #!/bin/bash
    REPOSITORY="s3:s3.amazonaws.com/my-bucket/docker-backups"
    PASSWORD="supersecret"
    export AWS_ACCESS_KEY_ID=...
    export AWS_SECRET_ACCESS_KEY=...
    # Backup each volume
    for volume in $(docker volume ls -q); do
        docker run --rm -v $volume:/data:ro restic/restic backup /data --tag $volume --repo $REPOSITORY --password $PASSWORD
    done
    

    לוחות זמנים ומחירים

    עבור מחסנית טיפוסית של 3–5 שירותים (docker-compose או Kubernetes), ההתקנה אורכת יום עבודה אחד. ההתקנה מתחילה מ-$500, ועלויות אחסון הענן החוזרות עבור עומס עבודה של 50GB עומדות בממוצע על $20 לחודש. עם דדופליקציה ברמת בלוק, ניתן להפחית את עלויות האחסון בעד 90%.

    קבלו ייעוץ — אנו נעריך את התשתית שלכם ונציע פתרון. רקורד מוכח: 100% הצלחת שחזור בפרויקטים שלנו.