रिस्टोर किया जा सकने वाला बैकअप एक झंझट भरी दोपहर और किसी प्रोजेक्ट के खो जाने के बीच का फ़र्क़ है। बुनियादी VPS बैकअप गाइड में इसका विचार बताया गया है। यह गाइड restic और BorgBackup के साथ आगे जाती है: दो टूल जो दूसरे सर्वर या ऑब्जेक्ट स्टोरेज पर एन्क्रिप्टेड, डीडुप्लिकेटेड बैकअप बनाते हैं।
सादी कॉपी की जगह restic या borg क्यों
- डीडुप्लिकेशन। केवल बदला हुआ डेटा स्टोर होता है, इसलिए रोज़ के स्नैपशॉट छोटे रहते हैं।
- एन्क्रिप्शन। डेटा आपके सर्वर से निकलने से पहले एन्क्रिप्ट हो जाता है।
- स्नैपशॉट। आप किसी भी पिछले दिन की स्थिति रिस्टोर कर सकते हैं।
- सत्यापन। दोनों टूल रिपॉज़िटरी की अखंडता जाँच सकते हैं।
कोई एक चुनें। Restic सरल है और SFTP व S3-संगत स्टोरेज समेत कई तरह के स्टोरेज के साथ काम करता है। Borg बहुत कुशल है और SSH के ज़रिए ऐसे सर्वर पर काम करता है जिस पर borg इंस्टॉल हो।
बैकअप कहाँ भेजें
एकमात्र बैकअप कभी उसी सर्वर पर न रखें। किसी दूसरी लोकेशन के दूसरे VPS, S3-संगत बकेट या स्टोरेज बॉक्स का उपयोग करें। बड़ी डिस्क वाला छोटा VPS सस्ता बैकअप टारगेट बनता है। VPS प्लान देखें।
Restic: सेटअप
sudo apt install -y restic
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/myserver"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
लंबे रैंडम पासवर्ड के साथ पासवर्ड फ़ाइल बनाएँ और एक कॉपी ऑफ़लाइन रखें। इस पासवर्ड के बिना बैकअप रिस्टोर नहीं किए जा सकते।
restic backup /etc /home /var/www --exclude-caches
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check
Borg: सेटअप
sudo apt install -y borgbackup
export BORG_REPO="ssh://backup@backup.example.com/srv/borg/myserver"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd ::'{hostname}-{now:%Y-%m-%d}' /etc /home /var/www
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg check
borg key export से रिपॉज़िटरी की एक्सपोर्ट करके सुरक्षित रखें।
डेटाबेस में सावधानी चाहिए
चालू डेटाबेस फ़ाइलें सीधे कॉपी न करें। पहले उनका डंप बनाएँ और डंप का बैकअप लें:
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz
इसे शेड्यूल करें
बैकअप को systemd टाइमर या cron से चलाएँ। एक सरल cron पंक्ति:
15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
विफलता पर ख़ुद को अलर्ट करें, उदाहरण के लिए स्क्रिप्ट के अंत में मॉनिटरिंग पिंग से।
रिस्टोर का परीक्षण करें
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test
समय-समय पर किसी अतिरिक्त मशीन पर असली रिस्टोर का परीक्षण करें। जिस बैकअप को आपने कभी परखा नहीं, वह केवल एक उम्मीद है।