সবার ব্যাকআপ থাকে, যতক্ষণ না একটা রিস্টোর করার চেষ্টা করেন। ফোল্ডার খালি বেরোয়, cron জব মার্চে মরে গেছে, বা আর্কাইভটা সেই ডিস্কেই যা এইমাত্র নষ্ট হলো। restic এর বেশিরভাগই সমাধান করে: আপনার দিকে এনক্রিপ্ট করে, ডেটার প্রতিটি টুকরো একবার রাখে, আর একটা ফাইল রিস্টোর করাকে পুরো সার্ভারের ব্যাকআপের মতোই সহজ করে দেয়।
এমন একটা সেটআপ যাতে আমরা সত্যিই ভরসা করতাম, Ubuntu বা Debian-এ।
১. restic ইনস্টল করুন
apt update && apt install -y restic
restic self-update
ডিস্ট্রিবিউশনের প্যাকেজ পিছিয়ে থাকে; self-update বর্তমান সংস্করণ নিয়ে আসে।
২. রিপোজিটরির জায়গা বাছুন
রিপোজিটরি সেই সার্ভারে থাকা চলবে না যেটা আপনি রক্ষা করছেন। দুটো সাধারণ বিকল্প:
- SFTP দিয়ে অন্য সার্ভার:
sftp:backup@203.0.113.20:/srv/restic/web1 - S3-সামঞ্জস্যপূর্ণ অবজেক্ট স্টোরেজ:
s3:https://s3.example.com/my-bucket/web1
৩. অ্যাক্সেসের তথ্য সংরক্ষণ করুন
সবকিছু এমন একটা ফাইলে রাখুন যা শুধু 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-এর বিষয়বস্তু পাসওয়ার্ড ম্যানেজারে কপি করুন। এটা ছাড়া ব্যাকআপ ডিক্রিপ্ট হবে না — আপনার দ্বারাও না, অন্য কারও দ্বারাও না।
৪. রিপোজিটরি শুরু করে প্রথম ব্যাকআপ নিন
source /root/.restic-env
restic init
restic backup /etc /home /root /srv /var/www \
--exclude-caches --exclude '/root/.cache'
restic snapshots
পাথগুলো সেই অনুযায়ী বদলান যেখানে আপনার ডেটা আসলে আছে। Docker ভলিউম থাকে /var/lib/docker/volumes-এ; অ্যাপের ডেটা প্রায়ই /srv বা /opt-এ।
৫. ডেটাবেস: আগে ডাম্প, পরে ব্যাকআপ
চালু ডেটাবেসের কাঁচা ফাইলের ব্যাকআপ নেবেন না। ব্যাকআপের ঠিক আগে ডাম্প নিন:
mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump
/var/backups/db-কে ব্যাকআপ পাথে যোগ করুন। আমাদের PostgreSQL গাইডে ডাম্প নিয়ে আরও আছে।
৬. 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 সাতটা দৈনিক, চারটা সাপ্তাহিক আর ছয়টা মাসিক স্ন্যাপশট রাখে আর বাকিগুলো মোছে। ডেটাবেস ডাম্পের ধাপ থাকলে সেটা একটা ExecStartPre= লাইনে রাখুন।
৭. সত্যিই কিছু রিস্টোর করুন
এই ধাপটাই "আমাদের ব্যাকআপ আছে"-কে সত্যে পরিণত করে। একটা ফোল্ডার অস্থায়ী ডিরেক্টরিতে ফিরিয়ে এনে দেখুন:
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 প্ল্যান যথেষ্ট।
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।