לכולם יש גיבויים עד שהם מנסים לשחזר אחד. התיקייה מתגלה כריקה, ה-cron job מת במרץ, או שהארכיון יושב על אותו דיסק שבדיוק קרס. restic פותר את רוב זה: הוא מצפין אצלכם, שומר כל פיסת מידע פעם אחת, והופך שחזור של קובץ בודד לפשוט כמו גיבוי השרת כולו.
הנה הגדרה שבאמת היינו סומכים עליה, ב-Ubuntu או ב-Debian.
1. התקינו את restic
apt update && apt install -y restic
restic self-update
חבילות ההפצה מפגרות מאחור; self-update מושך את הגרסה העדכנית.
2. בחרו מקום למאגר
המאגר לא יכול לשבת על השרת שאתם מגנים עליו. שתי אפשרויות נפוצות:
- שרת אחר דרך SFTP:
sftp:backup@203.0.113.20:/srv/restic/web1 - אחסון אובייקטים תואם S3:
s3:https://s3.example.com/my-bucket/web1
3. שמרו את פרטי הגישה
החזיקו הכול בקובץ אחד שרק root קורא, כדי שהטיימר וה-shell שלכם ישתמשו באותן הגדרות:
cat > /root/.restic-env <<'EOF'
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-bucket/web1"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_ACCESS_KEY_ID="your-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret"
EOF
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-env /root/.restic-pass
עכשיו העתיקו את התוכן של /root/.restic-pass למנהל הסיסמאות שלכם. בלעדיו אי אפשר לפענח את הגיבויים — לא אתם ולא אף אחד אחר.
4. אתחלו והריצו את הגיבוי הראשון
source /root/.restic-env
restic init
restic backup /etc /home /root /srv /var/www \
--exclude-caches --exclude '/root/.cache'
restic snapshots
התאימו את הנתיבים למקום שבו הנתונים שלכם באמת נמצאים. ה-volumes של Docker נמצאים ב-/var/lib/docker/volumes; נתוני אפליקציות לרוב ב-/srv או ב-/opt.
5. מסדי נתונים: קודם דאמפ, אחר כך גיבוי
אל תגבו את הקבצים הגולמיים של מסד נתונים פעיל. עשו דאמפ ממש לפני הגיבוי:
mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump
הוסיפו את /var/backups/db לנתיבי הגיבוי. במדריך ל-PostgreSQL יש עוד על דאמפים.
6. תזמנו עם systemd
כאן טיימר עדיף על cron: הוא כותב ל-journal ומשלים הרצה שהוחמצה אם השרת היה כבוי בזמן המתוכנן.
# /etc/systemd/system/restic-backup.service
[Unit]
Description=restic backup
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'source /root/.restic-env && restic backup /etc /home /root /srv /var/www /var/backups/db --exclude-caches && restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Daily restic backup
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
forget --prune שומר 7 צילומי מצב יומיים, 4 שבועיים ו-6 חודשיים ומוחק את השאר. אם יש לכם שלב של דאמפ למסד הנתונים, שימו אותו בשורת ExecStartPre=.
7. שחזרו משהו באמת
זה השלב שהופך את "יש לנו גיבויים" לעובדה. החזירו תיקייה אחת לתיקייה זמנית ותסתכלו עליה:
source /root/.restic-env
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls -la /tmp/restore-test/etc/nginx
restic check
עשו את זה פעם אחת עכשיו ושוב כל כמה חודשים. restic check מאמת את מבנה המאגר; השחזור מוכיח שהנתונים באמת שם.
restic ו-Managed Backups
הם לא מתחרים. Managed Backups יוצרים כל יום נקודת שחזור של כל השרת, שמשחזרים מלוח הבקרה — הפתרון המהיר אחרי עדכון שהשתבש. הם עולים $2 לחודש וכלולים בחינם בכל תוכנית שנתית. restic נותן עותקים ברמת קבצים, מחוץ לשרת, באחסון שאתם שולטים בו — וזה חשוב כשהבעיה היא קובץ שנמחק ביום שלישי שעבר, או כשרוצים עותק לגמרי מחוץ לתשתית שלנו.
אם אתם שומרים מידע רגיש, שלבו את זה עם הצפנת דיסק מלאה, או הציצו בשימוש לאחסון מוצפן כדי להריץ יעד גיבוי משלכם. תוכנית Micro מספיקה לרוב השרתים הקטנים יחד עם משימות הגיבוי שלהם.
תגובות
אין עדיין תגובות. היו הראשונים.