एक अच्छी VPS बैकअप रणनीति की तीन परतें होती हैं: पूरे सर्वर को जल्दी रीस्टोर करने के लिए अपने-आप चलने वाले सर्वर बैकअप, डेटाबेस के लिए ऐप्लिकेशन-लेवल डंप, और किसी दूसरी लोकेशन पर एक एन्क्रिप्टेड ऑफ़साइट कॉपी। हर जोखिम भरे बदलाव से पहले एक स्नैपशॉट लें और नियमित रूप से रीस्टोर टेस्ट करें, क्योंकि बिना टेस्ट किया बैकअप सिर्फ़ एक उम्मीद है।
यह गाइड हर परत को समझाती है, Ubuntu 24.04 और Debian 12 के कमांड के साथ।
3-2-1 नियम से शुरुआत करें
पुराना नियम आज भी सही है:
- आपके डेटा की 3 कॉपी (लाइव डेटा और दो बैकअप),
- 2 अलग-अलग तरह के स्टोरेज या सिस्टम पर,
- इनमें से 1 ऑफ़साइट, किसी दूसरी लोकेशन या प्रोवाइडर पर।
VPS पर इसका मतलब आम तौर पर होता है: खुद सर्वर, प्रोवाइडर के बैकअप, और कहीं और रखी एक एन्क्रिप्टेड कॉपी।
जानें कि आप किससे बचाव कर रहे हैं
| जोखिम | क्या मदद करता है |
|---|---|
| खराब अपडेट या कॉन्फ़िग बदलाव | बदलाव से पहले स्नैपशॉट |
| डिलीट हुई फ़ाइलें, टूटा हुआ ऐप | कई रीस्टोर पॉइंट वाले रोज़ाना बैकअप |
| डेटाबेस करप्शन | लॉजिकल डंप (pg_dump, mariadb-dump) |
| हैक हुआ सर्वर या रैनसमवेयर | ऐसी ऑफ़साइट कॉपी जिन्हें सर्वर डिलीट नहीं कर सकता |
| अकाउंट एक्सेस खो जाना | अकाउंट के बाहर रखी कॉपी |
अलग-अलग जोखिमों के लिए अलग-अलग परतें चाहिए। इसीलिए ज़रूरी डेटा के लिए एक तरीका कभी काफ़ी नहीं होता।
परत 1: प्रोवाइडर के बैकअप और स्नैपशॉट
अपने-आप चलने वाले बैकअप
Wolkra पर आप हर सर्वर के लिए रोज़ाना ऑटोमैटिक बैकअप चालू कर सकते हैं। इनकी कीमत सर्वर की कीमत का 20% है और ये 7 रीस्टोर पॉइंट रखते हैं। बैकअप पूरे सर्वर को कैप्चर करता है, इसलिए रीस्टोर करने पर OS, कॉन्फ़िगरेशन और डेटा एक साथ वापस आते हैं। किसी बड़ी गलती के बाद वापस पटरी पर आने का यही सबसे तेज़ तरीका है।
स्नैपशॉट
स्नैपशॉट ज़रूरत पड़ने पर लिए जाते हैं और इनका बिल प्रति GB बनता है। इनका इस्तेमाल करें:
- OS, डेटाबेस या किसी बड़े ऐप वर्ज़न को अपग्रेड करने से पहले;
- फ़ायरवॉल या नेटवर्क सेटिंग्स के साथ प्रयोग करने से पहले;
- टेम्पलेट के रूप में: आप किसी स्नैपशॉट से नए सर्वर बना सकते हैं।
चरणों के लिए देखें बैकअप और स्नैपशॉट और डॉक्स।
डिस्क-लेवल कॉपी को सुसंगत रखें
चलते हुए सर्वर का बैकअप कुछ ऐसा है जैसे बिजली का प्लग खींच देना: फ़ाइल सिस्टम के स्तर पर फ़ाइलें सुसंगत रहती हैं, लेकिन जो डेटाबेस उस समय लिख रहा था उसे रिकवरी की ज़रूरत पड़ सकती है। डेटाबेस इसे संभालने के लिए बने हैं, फिर भी एक साफ़ डंप (परत 2) हर शक दूर कर देता है।
परत 2: ऐप्लिकेशन-लेवल डंप
PostgreSQL
sudo mkdir -p /var/backups/db && sudo chown postgres: /var/backups/db
sudo -u postgres sh -c 'pg_dump -Fc mydb > /var/backups/db/mydb-$(date +%F-%H%M).dump'
-Fc कंप्रेस्ड कस्टम फ़ॉर्मेट है; इसे pg_restore से रीस्टोर करें।
MariaDB या MySQL
sudo sh -c 'mariadb-dump --single-transaction --routines --all-databases | gzip > /var/backups/db/all-$(date +%F-%H%M).sql.gz'
--single-transaction InnoDB टेबल को लॉक किए बिना उनका सुसंगत डंप देता है।
Docker में
docker compose exec -T db pg_dump -U app app | gzip > ~/backups/app-$(date +%F).sql.gz
शेड्यूल करें और पुरानी फ़ाइलें हटाएं
डंप को एक स्क्रिप्ट में डालें और उसे systemd टाइमर या cron से चलाएं, फिर पुरानी फ़ाइलें हटाएं:
find /var/backups/db -type f -mtime +14 -delete
परत 3: restic से एन्क्रिप्टेड ऑफ़साइट कॉपी
restic बैकअप को एन्क्रिप्ट और डीडुप्लिकेट करता है और उन्हें कई तरह के टारगेट पर भेजता है: SFTP के ज़रिए किसी दूसरे सर्वर पर, या किसी भी S3-कम्पैटिबल ऑब्जेक्ट स्टोरेज पर।
इंस्टॉल करें
sudo apt install -y restic
रिपॉज़िटरी चुनें
उदाहरण आपके नियंत्रण वाले एक बैकअप सर्वर पर SFTP का इस्तेमाल करते हैं। S3-कम्पैटिबल बकेट भी इसी तरह काम करता है, s3: रिपॉज़िटरी URL और एनवायरनमेंट वेरिएबल में क्रेडेंशियल के साथ।
sudo mkdir -p /etc/restic && sudo chmod 700 /etc/restic
openssl rand -base64 32 | sudo tee /etc/restic/password >/dev/null
sudo chmod 600 /etc/restic/password
sudo tee /etc/restic/env >/dev/null <<'EOF'
RESTIC_REPOSITORY=sftp:[email protected]:/srv/restic/web-1
RESTIC_PASSWORD_FILE=/etc/restic/password
EOF
sudo chmod 600 /etc/restic/env
root को एक ऐसी SSH की चाहिए जिससे वह backup.example.com में लॉग इन कर सके (देखें SSH कीज़)। restic पासवर्ड को सर्वर के बाहर भी कहीं सुरक्षित रखें। इसके बिना बैकअप कोई नहीं पढ़ सकता, आप भी नहीं।
इनिशियलाइज़ करें और चलाएं
sudo bash -c 'set -a; . /etc/restic/env; restic init'
sudo bash -c 'set -a; . /etc/restic/env; restic backup /etc /var/www /var/backups/db /home --exclude-caches'
sudo bash -c 'set -a; . /etc/restic/env; restic snapshots'
रिटेंशन
sudo bash -c 'set -a; . /etc/restic/env; restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'
इससे एक हफ़्ते के रोज़ाना, एक महीने के साप्ताहिक और छह महीने के मासिक बैकअप रहते हैं।
systemd टाइमर से ऑटोमेट करें
/etc/systemd/system/restic-backup.service:
[Unit]
Description=restic backup
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
EnvironmentFile=/etc/restic/env
ExecStart=/usr/bin/restic backup /etc /var/www /var/backups/db /home --exclude-caches
ExecStartPost=/usr/bin/restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
/etc/systemd/system/restic-backup.timer:
[Unit]
Description=Nightly restic backup
[Timer]
OnCalendar=*-*-* 03:30
RandomizedDelaySec=15m
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
डेटाबेस डंप को restic से पहले चलाएं, जैसे एक ExecStartPre= लाइन से जो आपकी डंप स्क्रिप्ट को कॉल करे।
हैक हुए सर्वर से बचाव
अगर किसी हमलावर को root मिल जाए, तो वह वे सारे बैकअप डिलीट कर सकता है जिन तक सर्वर पहुंच सकता है। यह जोखिम कम करें:
- जहां टूल सपोर्ट करे, टारगेट पर बैकअप यूज़र को append-only एक्सेस दें (restic के REST सर्वर में
--append-onlyमोड है); - पुराने बैकअप हटाने (pruning) का काम किसी दूसरी मशीन से चलाएं;
- कम से कम एक कॉपी ऐसी जगह रखें जिसके क्रेडेंशियल सर्वर के पास न हों।
किसका बैकअप लें
- कॉन्फ़िगरेशन के लिए
/etc। - ऐप्लिकेशन कोड और अपलोड:
/var/www,/srv,/optया आपकी ऐप डायरेक्टरी। - डेटाबेस डंप, कच्ची डेटाबेस फ़ाइलें नहीं।
- स्टेटफ़ुल कंटेनरों के Docker वॉल्यूम, या उनके डंप।
- TLS और ऐप सीक्रेट, एन्क्रिप्टेड रूप में।
- एक छोटी
READMEजो बताए कि सर्वर को दोबारा कैसे बनाना है।
आम तौर पर आपको /var/cache, /tmp, पैकेज कैश या उन Docker इमेज लेयर की ज़रूरत नहीं होती जिन्हें फिर से pull किया जा सकता है।
ब्लॉक स्टोरेज वॉल्यूम
अगर आपका डेटा किसी ब्लॉक स्टोरेज वॉल्यूम पर है, तो वॉल्यूम को अलग करके नए सर्वर से जोड़ा जा सकता है, जो सर्वर फ़ेल होने पर मदद करता है। फिर भी यह एक ही कॉपी है, इसलिए इसे भी बाकी डेटा की तरह restic या डंप में शामिल करें।
रीस्टोर टेस्ट करें
एक शेड्यूल चुनें, जैसे हर महीने, और इनमें से कोई एक करें:
- पूरा सर्वर: किसी बैकअप या स्नैपशॉट से नया सर्वर बनाएं, उसे किसी टेस्ट नाम पर शुरू करें और जांचें कि ऐप काम करता है।
- फ़ाइलें: किसी अस्थायी डायरेक्टरी में रीस्टोर करें और तुलना करें।
sudo bash -c 'set -a; . /etc/restic/env; restic restore latest --target /tmp/restore-test --include /etc/caddy'
sudo bash -c 'set -a; . /etc/restic/env; restic check'
- डेटाबेस: एक डंप को नए डेटाबेस में लोड करें और कुछ क्वेरी चलाएं।
प्रति घंटा बिलिंग के साथ, एक घंटे के लिए रीस्टोर टेस्ट सर्वर बहुत सस्ता पड़ता है। रीस्टोर में लगा समय लिख लें; वही आपका असली रिकवरी टाइम है।
कॉपी करने लायक एक आसान योजना
| क्या | कैसे | रिटेंशन |
|---|---|---|
| पूरा सर्वर | प्रोवाइडर के रोज़ाना बैकअप | 7 रीस्टोर पॉइंट |
| बदलावों से पहले | स्नैपशॉट | एक हफ़्ते बाद डिलीट करें |
| डेटाबेस | हर 6 घंटे में डंप | 14 दिन लोकल |
| फ़ाइलें और डंप | restic, हर रात, ऑफ़साइट | 7 रोज़ाना, 4 साप्ताहिक, 6 मासिक |
| रीस्टोर टेस्ट | बैकअप से नया सर्वर | मासिक |
संख्याओं को इस हिसाब से बदलें कि आप कितना डेटा खोना झेल सकते हैं और आपको कितनी जल्दी वापस चालू होना है। बाकी सर्वर सेटअप के लिए देखें नए VPS पर पहले कदम और Ubuntu सर्वर को सुरक्षित कैसे करें।
अक्सर पूछे जाने वाले सवाल
स्नैपशॉट और बैकअप में क्या अंतर है?
स्नैपशॉट किसी एक पल की कॉपी है जिसे आप हाथ से लेते हैं, अक्सर किसी जोखिम भरे बदलाव से पहले। बैकअप एक शेड्यूल पर अपने-आप चलते हैं और कई रीस्टोर पॉइंट रखते हैं। दोनों गलतियों से बचाते हैं; कोई भी ऑफ़साइट कॉपी की जगह नहीं ले सकता।
VPS का बैकअप कितनी बार लेना चाहिए?
जो भी डेटा बदलता है, उसका कम से कम रोज़ाना। ज़रूरी डेटा वाले डेटाबेस के लिए अक्सर इससे ज़्यादा बार डंप चाहिए, कभी-कभी हर घंटे।
क्या प्रोवाइडर के बैकअप काफ़ी हैं?
ये एक मज़बूत पहली परत हैं और पूरे सर्वर को रीस्टोर करने का सबसे तेज़ तरीका। ज़रूरी डेटा के लिए किसी दूसरे प्रोवाइडर या लोकेशन पर भी एक कॉपी रखें, ताकि एक अकाउंट या एक साइट अकेला विफलता बिंदु न बने।
क्या बैकअप एन्क्रिप्टेड होने चाहिए?
हां, खासकर वे कॉपी जो आपके अपने सर्वरों के बाहर रखी जाती हैं। restic जैसे टूल सर्वर से निकलने से पहले ही सब कुछ एन्क्रिप्ट कर देते हैं।
मुझे कैसे पता चले कि मेरे बैकअप काम करते हैं?
उन्हें रीस्टोर करके। शेड्यूल पर किसी बैकअप से नया सर्वर बनाएं या फ़ाइलें किसी टेस्ट डायरेक्टरी में रीस्टोर करें, और जांचें कि ऐप सच में शुरू होता है।