ویرگول
ورودثبت نام
علی قادری مقدم
علی قادری مقدمسینما، تکنولوژی، AI، نرم افزار
علی قادری مقدم
علی قادری مقدم
خواندن ۴ دقیقه·۳ ماه پیش

چطور از VPS پارس‌پک روی آبجکت‌استورج رایگان بکآپ بگیریم؟

امروز متوجه شدم که پارس پک یک Object Storage S3 با فضای 50GB بعنوان فضای پشتیبان گیری سرورهای ابری بصورت رایگان ارائه میده. من تصمیم گرفتم سرورم رو با rclone به این استوریج وصل کنم و یک اسکریپت هم با کمک هوشواره (هان چیه!؟) براش نوشتم که هر روز راس یک ساعت خاص در زمان کاهش ترافیک سرورم بصورت خودکار از سرور و دیتابیس یک نسخه پشتیبان ایجاد و یا Sync کنه.

اول از همه در پنل کاربری پارس پک، از داشبورد مدیریت سرور گزینه فضای پشتیبان رو انتخاب کنید و یک Object Storage جدید بسازید.

داشبورد مدیریت سرور ابری در پارس پک
داشبورد مدیریت سرور ابری در پارس پک

بعد از اینکه مراحل ساخت تموم میشه شبیه تصویر پایین، به شما سه تا عبارت نمایش میده که برای اتصال به استوریج بهشون نیاز داریم؛ این ها رو یک جای امن یادداشت کنید موقتا:

Endpoint URL
Access Key
Secret Key

همچنین نام باکت هم مهمه که از بخش بررسی اجمالی در داشبورد میتونید ببینیدش:

در بخش بررسی اجمالی در داشبورد
در بخش بررسی اجمالی در داشبورد

چالش اصلی و یک نکته مهم!

قبل از اینکه سراغ آموزش بریم، یک موضوع خیلی مهم وجود داره: این استوریج پارس‌پک قابلیت فایل ورژنینگ (File Versioning) رو به صورت نیتیو ساپورت نمی‌کنه! یعنی اگه فایلی رو ویرایش یا پاک کنید، نسخه قبلیش روی ابر اووررایت میشه و می‌پره.

اما با اسکریپتی که با کمک داداشم هوشواره نوشتم، این مشکل رو حل کردیم؛ طوری که هر بار فایل جدیدی تغییر کنه یا پاک بشه، نسخه قبلیش توی یک پوشه تاریخ‌دار (مثل file_changes/2026-08-01/) آرشیو میشه و تا ۷ روز می‌مونه.

علاوه بر این:

  1. فضای دیسک سرور اشغال نمیشه: دیتابیس مستقیماً روی فضای ابری استریم میشه (Zero-Disk).

  2. ارور 429 (Too Many Requests) نمی‌خوریم: نرخ درخواست‌ها رو کنترل کردیم تا روی بکاپ گیری های سنگین پارس‌ پک ریجکتمون نکنه.

  3. Symlinkها هم دنبال میشن: پوشه‌هایی مثل storage توی لاراول یا فایل‌های SSL که لینک هستن هم بکاپ گرفته میشن.

مرحله اول: نصب و کانفیگ Rclone روی سرور

ابتدا ابزار Rclone رو روی سرور نصب می‌کنیم:

sudo apt update && sudo apt install rclone -y

حالا دستور زیر رو بزنید تا مراحل کانفیگ اتصال شروع بشه:

rclone config

مراحل رو به این ترتیب دنبال کنید:

  1. حرف n رو تایپ کنید و Enter بزنید (New remote).

  2. یک اسم دلخواه برای استوریج انتخاب کنید (مثلاً: parspack_s3).

  3. توی لیست باز شده، گزینه مربوط به s3 (Amazon S3 Compliant Storage Provider) رو انتخاب کنید.

  4. توی بخش Provider، شماره مربوط به Any other S3 compatible provider رو بزنید.

  5. عدد 1 رو برای env_auth انتخاب کنید (پیش‌فرض false).

  6. کلید access_key_id که از پنل پارس‌پک گرفتید رو وارد کنید.

  7. کلید secret_access_key رو هم وارد کنید.

  8. توی بخش endpoint آدرس Endpoint پارس‌پک رو وارد کنید (آدرسی که توی پنل داده).

  9. بقیه گزینه‌ها رو با زدن Enter روی حالت پیش‌فرض بگذارید تا به آخر برسید و با زدن y کانفیگ رو ذخیره کنید.

یه نکته مهم:

پارس‌پک روی متد پیش‌فرض تست باکت S3 گیر میده و ارور میده. برای حل این مشکل، فایل کانفیگ Rclone رو باز کنید:

nano ~/.config/rclone/rclone.conf

زیر بخش مربوط به [parspack_s3] این خط رو اضافه کنید:

no_check_bucket = true

حالا با دستور زیر تست کنید ببینید اتصال برقرار هست یا نه:

rclone ls parspack_s3:نام_باکت_شما

در نهایت اطلاعات شما هم باید همچین چیزی باشه
در نهایت اطلاعات شما هم باید همچین چیزی باشه

مرحله دوم: ساخت اسکریپت بکاپ‌گیری

یک فایل اسکریپت جدید می‌سازیم:

sudo nano /usr/local/bin/backup.sh

کد زیر رو کاملاً داخلش کپی کنید (اطلاعات خودتون رو جایگزین کنید):

#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin set -o pipefail DATE=$(date +%Y-%m-%d_%H-%M-%S) REMOTE="parspack_s3:نام_باکت_شما" RCLONE_CONFIG="/home/[نام_کاربری_سرور]/.config/rclone/rclone.conf" LOG_FILE="/var/log/backup.log" # فلگ‌های بهینه‌شده Rclone جهت جلوگیری از ارور 429 پارس‌پک و پوشش Symlinkها FLAGS=( "--config" "$RCLONE_CONFIG" "--s3-no-check-bucket" # دنبال کردن Symlinkها (پوشه storage لاراول و SSLها) "-L" # دریافت لیست متادیتا در یک درخواست برای کاهش شدید کلیک‌های API "--fast-list" # کنترل نرخ درخواست‌ها برای جلوگیری از Too Many Requests "--tpslimit" "5" "--tpslimit-burst" "0" "--transfers" "1" "--checkers" "2" # مدیریت هوشمند Retry در صورت ریجکت درخواست توسط S3 "--low-level-retries" "10" "--retries-sleep" "5s" # تنظیمات لاگ‌گیری "--log-file" "$LOG_FILE" "--log-level" "NOTICE" ) # کاهش اولویت پردازش جهت جلوگیری از فشار به CPU و دیسک RESOURCE_LIMIT="nice -n 19 ionice -c 2 -n 7" DB_USER="یوزر_دیتابیس" DB_PASS="پسورد_دیتابیس" DB_NAME="نام_دیتابیس" APP_DIR="مسیر_مبدا_بکاپ" # ------------------------------------------------------------- # ۱) بکاپ و استریم مستقیم دیتابیس بدون درگیر کردن دیسک سرور $RESOURCE_LIMIT mysqldump -u"$DB_USER" -p"$DB_PASS" --single-transaction --quick "$DB_NAME" \ | gzip \ | $RESOURCE_LIMIT rclone rcat "$REMOTE/database/db_$DATE.sql.gz" "${FLAGS[@]}" # ۲) سینک هوشمند فایل‌های پروژه (پیاده‌سازی ورژنینگ دستی با backup-dir) $RESOURCE_LIMIT rclone sync "$APP_DIR" "$REMOTE/current_files/" \ --backup-dir "$REMOTE/file_changes/$DATE/" \ --exclude 'vendor/**' \ --exclude 'node_modules/**' \ --exclude '.git/**' \ --exclude '*.log' \ --exclude '*.tmp' \ "${FLAGS[@]}" # ۳) پاک‌سازی خودکار بکاپ‌های قدیمی‌تر از ۷ روز از روی ابر $RESOURCE_LIMIT rclone delete "$REMOTE/database/" --min-age 7d "${FLAGS[@]}" $RESOURCE_LIMIT rclone delete "$REMOTE/file_changes/" --min-age 7d "${FLAGS[@]}" $RESOURCE_LIMIT rclone rmdirs "$REMOTE/file_changes/" "${FLAGS[@]}" 2>/dev/null

دسترسی اجرای امن به اسکریپت می‌دیم:

sudo chmod 700 /usr/local/bin/backup.sh

اطلاعات زیر رو در اسکریپت جایگزین کنید:
نام_باکت_شما
نام_کاربری_سرور (مثلا ali)
DB_USER="یوزر_دیتابیس"
DB_PASS="پسورد_دیتابیس"
DB_NAME="نام_دیتابیس"
APP_DIR="مسیر_مبدا_بکاپ" (مسیری که قصد دارید از فایل هاش بکاپ بگیرید)

مرحله سوم: تنظیم اجرای اتوماتیک (Cron Job)

می‌خوایم اسکریپت هر شب رأس ساعت مشخصی خودش اجرا بشه. crontab کاربر root رو باز می‌کنیم:

sudo crontab -e

این خط رو به انتهاش اضافه کنید:

Code snippet

30 23 * * * /usr/local/bin/backup.sh >/dev/null 2>&1

(نکته: چون تایم‌زون سرور UTC هست، ۲۳:۳۰ UTC دقیقاً معادل ۳:۰۰ بامداد تهران میشه که خلوت‌ترین زمان سروره).

جمع‌بندی

به همین راحتی تونستیم بدون پرداخت هزینه اضافی و بدون اینکه نگران پر شدن فضای VPS یا پریدن ورژن‌های قدیمی فایل‌ها باشیم، یک سیستم بکاپ‌گیری اتوماتیک بسازیم!

در نهایت میتونید اسکریپت رو بر حسب نیاز خودتون با کمک هوشواره تغییر بدید (مثلا بخش مربوط به بکاپ گیری از دیتابیس رو حذف کنید یا مدت زمان نگه داری بکاپ های قدیمی رو از 7 روز به یک ماه تغییر بدید)

سرورvpsbackupobject storage
۳
۰
علی قادری مقدم
علی قادری مقدم
سینما، تکنولوژی، AI، نرم افزار
شاید از این پست‌ها خوشتان بیاید