نحوه بکاپگیری از سایت وردپرس به Object Storage

مقدمه
ذخیرهسازی Object پارمین کلود میتواند راهکار ذخیرهسازی Objectای برای دادههای سایت وردپرس فراهم کند. این دادهها اغلب متنوعاند—including داراییهای رسانهای و فایلهای دیتابیس—که آنها را گزینه خوبی برای ذخیرهسازی Object میسازد. چون راهکارهایی مثل ذخیرهسازی Object پارمین کلود میتوانند مقادیر زیادی داده ساختاریافتهنشده را نگه دارند، میتوانند داراییهای استاتیک سایت شما را در خود جای دهند. ذخیره جداگانه داراییهای استاتیک میتواند کارایی سایت را با آزاد کردن فضا و منابع روی سرورهایتان بهینه کند. اگر سایت شما داراییهای داینامیک دارد—منابعی با نرخ درخواست بالا یا فایلهای دیتابیسی که تغییر مکرر لازم دارند—ممکن است جفت کردن راهکار ذخیرهسازی Block با Object Storage پارمین کلود را برای ذخیره بهینه دادههایتان در نظر بگیرید. برای یادگیری بیشتر درباره Object و Block Storage، راهنمای «مقایسه سرویسهای Object Storage و Block Storage» را در پارمین کلود ببینید.
در این آموزش، از Object Storage پارمین کلود برای بکاپگیری از دادههای وردپرس استفاده میکنیم. چون API مربوط به ذخیرهسازی Object پارمین کلود با API مربوط به AWS S3 سازگار-متقابل (Interoperable) است، میتوانیم از پلاگینهای سازگار با S3 برای مدیریت بکاپهایمان—و همچنین S3cmd، ابزار کلاینتی برای کار با Object Storeهای سازگار با S3 و S3—استفاده کنیم. چند روش مختلف برای ساخت بکاپها را مرور میکنیم: استفاده از پلاگین وردپرس، ساخت بکاپهای دستی با S3cmd و خودکارسازی بکاپها با S3cmd و اسکریپتی که برای همین هدف ساخته میشود.
پیشنیازها
این آموزش فرض میکند Instance وردپرسی روی سرور و همچنین Object Storage پارمین کلود دارید. اگر ندارید، میتوانید اینها را راهاندازی کنید:
- یک سرور اوبونتو، راهاندازیشده با دنبال کردن راهنمای راهاندازی اولیه سرور با اوبونتو در پارمین کلود.
- استک LAMP، نصبشده روی سرورتان با دنبال کردن راهنمای «نحوه نصب استک Linux, Apache, MySQL, PHP (LAMP) روی اوبونتو» در پارمین کلود.
- وردپرس، نصبشده روی سرورتان با دنبال کردن راهنمای «نحوه نصب وردپرس با LAMP روی اوبونتو» در پارمین کلود.
- یک Object Storage و کلید API پارمین کلود، ساختهشده با دنبال کردن راهنمای «نحوه ساخت Object Storage و کلید API در پارمین کلود».
با برقراری این پیشنیازها، میتوانیم شروع کنیم به بکاپگیری از سایت وردپرس به Object Storage.
تغییر مجوزهای وردپرس
در سراسر این آموزش، با پوشه wp-content/uploads در پروژه وردپرسمان کار میکنیم؛ پس مهم است این پوشه وجود داشته و مجوزهای درست داشته باشد. میتوانید با دستور mkdir و استفاده از فلگ -p—که اگر وجود ندارد پوشه را میسازد و اگر وجود دارد از رخداد خطا اجتناب میکند—بسازیدش:
sudo mkdir -p /var/www/html/wp-content/uploads
حالا میتوانید مجوزها را روی پوشه تنظیم کنید. اول، مالکیتش را به کاربرتان (اینجا از sammy استفاده میکنیم؛ اما حتماً از کاربر sudo غیر root خودتان استفاده کنید) و مالکیت گروهی را به گروه www-data تنظیم کنید:
sudo chown -R sammy:www-data /var/www/html/wp-content/uploads
بعد، مجوزهایی را برقرار کنید که به وبسرور دسترسی نوشتن به این پوشه بدهد:
sudo chmod -R g+w /var/www/html/wp-content/uploads
حالا میتوانیم از پلاگینها برای ساخت بکاپهایی برای داراییهای پوشه wp-content/uploads و تعامل با داراییهایمان از رابط وردپرس استفاده کنیم.
استفاده از پلاگینها برای ساخت بکاپ
انواعی از پلاگینهای سازگار با S3 وجود دارند که میتوانید برای بکاپگیری از سایت وردپرستان به Object Storageتان استفاده کنید. عاملی که هنگام ارزیابی پلاگینها باید در نظر بگیرید این است که آیا میخواهید از فایلهای دیتابیس بکاپ بگیرید یا نه؛ چون برخی از این منابع آن قابلیت را ارائه نمیدهند. عامل دیگری که باید در ذهن داشته باشید این است که آیا پلاگین، منابع پلاگینهای دیگر را میکشد یا نه. مثلاً اگر از Document Managerای استفاده میکنید، ممکن است بخواهید در نظر بگیرید که آیا پلاگین بکاپتان، فایلها و منابعی را که Document Managerتان درون پوشه wp-content/uploads ساخته ثبت میکند یا نه.
نصب پلاگینها با WP-CLI
امکان کار با WP-CLI برای مدیریت پلاگینهای وردپرستان از خط فرمان وجود دارد. در این بخش نصبش میکنیم و در بخش بعد از آن استفاده میکنیم تا نشان بدهیم چطور با پلاگینها از دادههای وردپرس به Object Storage بکاپ بگیریم.
برای نصب WP-CLI، مراحل پیشنهادی پروژه را دنبال میکنیم. دستور زیر را برای دانلود باینری به پوشه tmp اجرا کنید:
cd /tmp
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
برای قابل اجرا و قابل استفاده از خط فرمان کردن این فایل، این را تایپ کنید:
chmod +x /tmp/wp-cli.phar
وقتی فایل را قابل اجرا کردیم، میتوانیم تغییر نامش بدهیم و به مکانی در PATH خودمان منتقلش کنیم:
sudo mv /tmp/wp-cli.phar /usr/local/bin/wp
اگر بخواهیم چک کنیم که نصبمان موفق بوده، میتوانیم این را اجرا کنیم:
wp --info
این اطلاعات عمومی درباره نسخهای که استفاده میکنیم و مسیرش به ما میدهد.
حالا میتوانیم از WP-CLI برای نصب هر پلاگینی که مایلیم استفاده کنیم و وظایف دیگر مرتبط با سایت وردپرسمان را مدیریت نماییم.
نصب و پیکربندی UpdraftPlus Backup
اگر نگران بکاپگیری از فایلهای دیتابیس همراه سایر داراییهای رسانهای هستید، ممکن است بخواهید از پلاگینی استفاده کنید که گزینه بکاپ دیتابیس ارائه میدهد. UpdraftPlus Backup نسخه سازگار با S3 و بدون-هزینهای ارائه میکند که بکاپ دیتابیس و رسانه—بههمراه زمانبندی بکاپ—را ممکن میسازد.
برای نصب UpdraftPlus، میتوانیم به دایرکتوری پلاگین وردپرسمان برویم:
cd /var/www/html/wp-content/plugins
از اینجا، میتوانیم updraftplus را با دستور wp نصب کنیم:
wp plugin install updraftplus
برای فعال کردن پلاگین، میتوانیم اجرا کنیم:
wp plugin activate updraftplus
از اینجا، میتوانیم به تب Plugins در سمت چپ داشبورد مدیریتی وردپرسمان برویم:

با انتخاب Installed Plugins، به صفحهای میرسیم که پلاگینهای نصبشدهمان را فهرست میکند. باید UpdraftPlus – Backup/Restore را در فهرست گزینههای موجود ببینیم:

برای پیکربندی تنظیمات بکاپهایتان، به تب Settings در داشبورد مدیریتی بروید و UpdraftPlus Backups را از فهرست گزینههای موجود انتخاب کنید. صفحه فرودیمی شبیه این خواهد بود:

نحوه بکاپ پایه سایت با این پلاگین را پوشش میدهیم. زیر تب Settings در بالای صفحه، منویی پیدا میکنید که به شما اجازه زمانبندی بکاپهایتان را میدهد:

اگر میخواهید تست کنید که پلاگین کار میکند، میتوانید این را روی Manual بگذارید. فعلاً این تنظیم را برای تست درست کار کردن پلاگین حفظ میکنیم.
زیر این منو، گزینههای ذخیرهسازی ریموت مختلف را میبینید. S3-Compatible (Generic) را انتخاب کنید:

با انتخاب این گزینه، منویی به شما ارائه میشود که اطلاعات Object Storage پارمین کلودتان را میخواهد:

بر اساس URL مربوط به Object Storageتان، میتوانید نام Bucket و Endpointش را تعیین کنید. مثلاً اگر URL مربوط به Object Storage شما https://example-name.nyc3.parmincloud.ir باشد، example-name باید Bucket شما باشد و nyc3.parmincloud.ir هم Endpoint شما خواهد بود. S3 location باید نام Bucket شما و S3 end-point هم Endpoint شما خواهد بود.
زیر این، گزینههایی برای فایلهایی که باید در بکاپ شامل یا مستثنی شوند پیدا میکنید:

وقتی این تنظیمات را برای انعکاس چیزی که میخواهید بکاپ بگیرید پر کردید، میتوانید به تب Current Status برگردید. وقتی Backup Now را از دکمههای موجود در بالای صفحه انتخاب میکنید، منوی زیر به شما ارائه میشود:

اینجا میتوانید انتخاب کنید که آیا میخواهید از دیتابیستان بکاپ بگیرید یا نه.
وقتی گزینه Backup Now را در پایین این منو انتخاب کردید، فایلهای بکاپتان باید Bucketتان را پر کنند. میتوانید به صفحه Object Storageتان در پنل کنترل پارمین کلود بروید تا چک کنید آنجا هستند. وقتی کارکرد پلاگین را تست کردید، میتوانید تنظیمات زمانبندی بکاپ را متناسب با نیازهایتان تغییر دهید.
بکاپگیری از وردپرس با S3cmd
بهعنوان ابزار خط فرمانی برای مدیریت دادهها در راهکارهای ذخیرهسازی Object، S3cmd گزینههای متنوعی برای بکاپگیری از دادههای وردپرستان به Object Storage ارائه میدهد. میتوان در دستورات ایزوله و در اسکریپتهایی که فرایند بکاپ را خودکار میکنند استفاده شد.
اگر هنوز s3cmd را روی سرورتان نصب ندارید، میتوانید با دنبال کردن بخش «نصب S3cmd» از این آموزش نصبش کنید و با دنبال کردن بخش «پیکربندی S3cmd» با اطلاعات Object Storageتان پیکربندیدش.
باید الان s3cmd نصبشده و با اطلاعات Object Storageتان پیکربندیشده داشته باشید. میتوانید پیکربندی s3cmd را با تایپ این تأیید کنید:
s3cmd --dump-config
خروجیای شبیه زیر باید ببینید:
Output
[default]
access_key = Your_Spaces_Access_Key access_token = add_encoding_exts = add_headers = bucket_location = US ca_certs_file = cache_file = check_ssl_certificate = True check_ssl_hostname = True cloudfront_host = cloudfront.amazonaws.com default_mime_type = binary/octet-stream delay_updates = False delete_after = False delete_after_fetch = False delete_removed = False dry_run = False enable_multipart = True encrypt = False …
وقتی اطلاعات پیکربندی s3cmd را برای اطمینان از مطابقت با اعتبارنامههای Object Storageمان بازرسی کردیم، آماده استفاده از s3cmd برای بکاپگیری فایلها به Object Storageمان هستیم. اول این کار را دستی انجام میدهیم؛ قبل از اینکه به ساخت اسکریپتی برویم که این کار را خودکار میکند.
ساخت بکاپهای دستی از پوشه wp-content/uploads
برای ساخت بکاپی از پوشه wp-content/uploads، از دستوری به نام s3cmd sync استفاده میکنیم. این به ما اجازه میدهد فقط فایلهایی را که هنوز در Object Storageمان وجود ندارند منتقل کنیم. هرچند این ممکن است برای انتقال یکباره معنادار نباشد، وقتی داده بیشتری به Object Storageتان میبرید میتواند سریع مهم شود. از sammys-bucket برای Bucket خودمان و sammys-backups برای تعیین پوشه بکاپ روی Object Storageمان استفاده میکنیم؛ اما باید اینها را با نامهای Bucket و پوشه بکاپ خودتان جایگزین کنید (در صورت وجود). برای اطمینان از اینکه فایلهایمان به مقصد موردنظرشان میروند، از گزینه --dry-run با s3cmd مثل زیر استفاده میکنیم:
s3cmd sync --dry-run /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/
اگر خروجی دستور نشان بدهد دادههایتان به مقصد موردنظرشان میرسند، میتوانید دستور را بدون گزینه --dry-run اجرا کنید:
s3cmd sync /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/
ساخت بکاپهای دستی از دیتابیس MySQL
حالا میتوانیم بکاپ دستی از دیتابیس MySQLمان بسازیم. این در ۴ بخش رخ میدهد. اول، میتوانیم در دایرکتوری خانهمان پوشهای برای نگهداشتن فایلهای دیتابیسمان بسازیم:
mkdir ~/mysqldmp
بعد، فایلی میسازیم تا اطلاعات کاربر و رمز عبور دیتابیسمان را نگه دارد. این به ما کمک میکند از پاس دادن آن اطلاعات به خط فرمان حین فرایند ساخت فایلهای بکاپ اجتناب کنیم. گزینههای خاص-کاربر MySQL معمولاً در ~/.my.cnf ذخیره میشوند؛ پس آن فایل را در دایرکتوری خانهمان میسازیم. تایپ کنید:
nano ~/.my.cnf
درون فایل، نام کاربری و رمز عبور کلاینت MySQLمان را تعیین میکنیم:
~/.my.cnf
[client]
user=mysql_user password=mysql_password
با تایپ CTRL+X و بهدنبالش Y این فایل را ذخیره کنید.
برای محدود کردن مجوزهای خواندن و نوشتن به کاربرمان، میتوانیم این را تایپ کنیم:
chmod 600 .my.cnf
حالا میتوانیم دستور mysqldump را بدون پاس دادن اطلاعات رمز عبور به خط فرمان اجرا کنیم تا کپیای از فایلهای دیتابیسمان بسازد. وقتی mysqldump را اجرا میکنیم، بهعنوان بخشی از فرایند خواندن گزینههای پیشفرضش به دنبال فایل .my.cnf ما میگردد. برای فشرده کردن خروجی از دیتابیسمان، میتوانیم از gzip هم مثل زیر استفاده کنیم:
mysqldump mysqldatabase_name | gzip > ~/mysqldmp/mysql_dump.sql.gz
در نهایت، میتوانیم از s3cmd برای ارسال فایل فشرده به Object Storageمان استفاده کنیم:
s3cmd sync mysqldmp/mysql_dump.sql.gz s3://sammys-bucket/sammys-backups/
باید الان فایل دیتابیس فشردهشده را در Object Storageتان ببینید.
خودکارسازی بکاپهای وردپرس با Cron
خودکارسازی بکاپهایتان تضمین میکند دادههای وردپرستان قابل دسترس و بازیابی بمانند. هرچند ساخت بکاپهای دستی ممکن است، فرایندی زمانبر است که میتواند با زمانبند Cron بهشکل مفیدی خودکار شود. برای یادگیری بیشتر درباره استفاده از cron برای زمانبندی وظایف، راهنمای «نحوه زمانبندی وظایف روتین با Cron و Anacron روی VPS» در پارمین کلود را ببینید.
برای ساخت فایلی برای اسکریپت بکاپمان، میتوانیم از دستور زیر استفاده کنیم:
nano ~/wp-sync.sh
درون فایل خالی، اول زیر را مینویسیم تا نشان دهیم این اسکریپت توسط شل Bash اجرا خواهد شد:
wp-sync.sh
#!/bin/bash
بعد، متغیرهایی تعریف میکنیم که اطلاعات درباره اینکه از کدام فایلها و دیتابیسها بکاپ میگیریم را تعیین کنند. متغیرهای DATABASE و UPLOADS_DIR ما اطلاعاتی درباره دیتابیس و پوشهای که بکاپ میگیریم تعیین میکنند. این متغیرها را بهعنوان آرایه تعریف میکنیم؛ که به ما اجازه تعیین بیش از یک مقدار را میدهد:
wp-sync.sh
...
DATABASE=("mysqldatabase_name") # برای افزودن بیش از یک دیتابیس، مقادیر را با فاصله جدا کنید: ("database1" "database2")
UPLOADS_DIR=("/var/www/html/wp-content/uploads") # برای افزودن بیش از یک دایرکتوری، مقادیر را با فاصله جدا کنید: ("folder1" "folder2")
BACKUP_DIR=/home/sammy/mysqldmp
متغیر DATABASE نام دیتابیس یا دیتابیسهای وردپرسی را تعیین میکند که mysqldump از آنها بکاپ میگیرد. UPLOADS_DIR به دایرکتوری یا دایرکتوریهایی اشاره میکند که بکاپ میگیریم. BACKUP_DIR به اسکریپت میگوید mysqldump باید فایل بکاپ را کجا بنویسد.
بعد، اطلاعات s3cmd خود را—including اطلاعات Bucket مربوط به Object Storageمان—تنظیم میکنیم. این اطلاعات، اطلاعات Bucket مربوط به S3 از فایل پیکربندی s3cmd را بازتاب میکند. وقتی متغیر S3_CMD را تعیین میکنیم، مسیری به باینری s3cmd برای cron میگنجانیم. همچنین متغیر DATEای درج میکنیم؛ که به ما اجازه ساخت تایماستمپ برای فایلهای بکاپمان را میدهد:
wp-sync.sh
...
DATE=$(date +%y%m%d-%H_%M_%S)
S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/
اینجا، متغیر DATE را خیلی ریزدانه ساختهایم تا سال (%y)، ماه (%m)، روز (%d)، ساعت (%H)، دقیقه (%M) و ثانیه (%S) بکاپمان را ثبت کند. بسته به فرکانس زمانبندی بکاپتان، میتوانید به شکلی تغییرش بدهید که به شما اجازه ردیابی مفید بکاپهایتان را بدهد. متغیر S3_CMD ما به executable مربوط به s3cmd اشاره میکند که به ما اجازه اجرای دستوراتمان را میدهد.
بعد، مجموعهای از دستورات را میگنجانیم که دایرکتوری mysqldmp ما را—در صورتی که هنوز وجود ندارد—میسازد و در طول فرایند بهروزرسانی هر فایلی را از آن دایرکتوری حذف میکند:
wp-sync.sh
...
mkdir -p $BACKUP_DIR
rm -rf "${BACKUP_DIR:?}/*"
در نهایت، حلقههای for میسازیم تا s3cmd sync برای فایلهای دیتابیسمان اجرا شود. دوباره از mysqldump برای ساخت فایل دیتابیس فشرده استفاده میکنیم؛ اما گزینه --defaults-extra-file را به آن اضافه میکنیم—که به mysqldump میگوید علاوه بر فایلهای گزینه استاندارد، .my.cnf را هم بخواند. همچنین روی آرایه دیتابیسمان Iterate میکنیم و همان مجموعه اقدامات را روی هر دیتابیس اجرا میکنیم:
wp-sync.sh
...
for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
done
دستورات mysqldump و s3cmd sync همان کاری را میکنند که در بخش قبلی کردند. اما چون تایماستمپ متغیر DATE را به Bucket خودمان اضافه کردیم، فایلهایمان به شکلی در Object Storage ساخته میشوند که به ما اجازه ردیابی آسان زمان ساختشان را بدهد.
بعد، حلقهای برای دایرکتوریمان میسازیم. دوباره، روی آرایه UPLOADS_DIR Iterate میکنیم تا همان اقدامات روی هر دایرکتوری اجرا شود:
wp-sync.sh
...
for DIR in "${UPLOADS_DIR[@]}"
do
$S3_CMD sync "$DIR" "$S3_BUCKET"
done
دوباره، دستور s3cmd sync با دستوری که برای ساخت بکاپ دستی این دایرکتوری استفاده کردیم یکسان است. تفاوت، تایماستمپی است که به این مواد در Object Storageمان الصاق میشود.
اسکریپت بهطور کامل اینطور خواهد بود:
wp-sync.sh
#!/bin/bash
DATABASE=("mysqldatabase_name") # برای افزودن بیش از یک دیتابیس، مقادیر را با فاصله جدا کنید: ("database1" "database2")
UPLOADS_DIR=("/var/www/html/wp-content/uploads") # برای افزودن بیش از یک دایرکتوری، مقادیر را با فاصله جدا کنید: ("folder1" "folder2")
BACKUP_DIR=/home/sammy/mysqldmp
DATE=$(date +%y%m%d-%H_%M_%S)
S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/
mkdir -p $BACKUP_DIR
rm -rf "${BACKUP_DIR:?}/*"
for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
done
for DIR in "${UPLOADS_DIR[@]}"
do
$S3_CMD sync "$DIR" "$S3_BUCKET"
done
حالا میتوانیم اسکریپت wp-sync.sh خودمان را قابل اجرا کنیم:
chmod +x ~/wp-sync.sh
برای تستش، میتوانیم اجرا کنیم:
sudo ~/wp-sync.sh
به Object Storageتان بروید و مطمئن شوید فایلها طبق موردنظر کپی شدهاند. وقتی این را چک کردید، میتوانید فایل crontab را برای اجرای اسکریپت در بازه موردنظر ویرایش کنید.
فایل crontab را با تایپ این باز کنید:
crontab -e
اگر اولینبار است این فایل را ویرایش میکنید، از شما خواسته میشود ویرایشگری انتخاب کنید:
crontab
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
Choose 1-4 [2]:
...
میتوانید ۲ را برای nano انتخاب کنید؛ یا عدد متناظر با ویرایشگر مورد علاقهتان را وارد نمایید.
در پایین فایل، خطی اضافه میکنیم تا تعیین کند اسکریپتمان هر چند وقت اجرا شود. برای تست کارکرد اسکریپتمان، بازه زمانی را مثل زیر روی دو دقیقه تنظیم میکنیم:
crontab
...
*/2 * * * * /home/sammy/wp-sync.sh
بعد از دو دقیقه، باید سپرده زمانمهرخوردهای از فایلها را در Object Storageتان ببینید. حالا میتوانید فایل crontab را برای تعیین بازه زمانیای که برای بکاپهایتان میخواهید استفاده شود تغییر دهید.
نتیجهگیری
چند روش را پوشش دادیم که میتوانید از دادههای وردپرستان به سرویس ذخیرهسازی Object پارمین کلود بکاپ بگیرید.



