بلاگ/نصب و مدیریت وردپرس با WP-CLI روی سرور مجازی و اختصاصی: خط فرمان به‌جای نصب‌کننده گرافیکی
به‌روز شده

نصب و مدیریت وردپرس با WP-CLI روی سرور مجازی و اختصاصی: خط فرمان به‌جای نصب‌کننده گرافیکی

1405/07/130 بازدید
نصب و مدیریت وردپرس با WP-CLI روی سرور مجازی و اختصاصی: خط فرمان به‌جای نصب‌کننده گرافیکی

نصب وردپرس با WP-CLI روی سرور مجازی و اختصاصی

اگر تا به حال وردپرس را از طریق مرورگر نصب کرده باشید، پنج مرحلهٔ معروف آن را می‌شناسید: انتخاب زبان، وارد کردن اطلاعات دیتابیس، ساخت کاربر ادمین و چند کلیک تا پایان. این روش برای یک سایت کافی است، اما وقتی قرار است چند سایت را روی یک سرور مجازی یا اختصاصی مدیریت کنید، یا نصب را در یک اسکریپت استقرار (deploy) خودکار کنید، نصب‌کننده گرافیکی کار را کند و دستی می‌کند.

WP-CLI همان کاری را از طریق خط فرمان انجام می‌دهد؛ بدون باز کردن مرورگر، بدون کلیک، و قابل اجرا در یک اسکریپت bash یا یک تسک cron. در این مقاله نصب وردپرس با wp-cli را از صفر روی سرور مجازی یا اختصاصی توضیح می‌دهیم، همراه با مدیریت افزونه و قالب، migration با search-replace و بک‌آپ خودکار.

WP-CLI چیست و چرا روی سرور به آن نیاز دارید؟

WP-CLI یک ابزار خط فرمان رسمی برای وردپرس است که تقریباً هر کاری که از پنل مدیریت انجام می‌دهید را با یک دستور جایگزین می‌کند: نصب core، مدیریت افزونه و قالب، تغییر تنظیمات، اجرای کوئری روی دیتابیس و گرفتن بک‌آپ.

تفاوت اصلی آن با نصب‌کننده گرافیکی در جایی مشخص می‌شود که نصب باید تکرارپذیر، خودکار یا بدون دخالت دست باشد؛ مثلاً وقتی چند سایت وردپرس روی یک سرور مجازی راه‌اندازی می‌کنید یا نصب را بخشی از یک اسکریپت استقرار قرار می‌دهید.

ویژگینصب‌کننده گرافیکی (wp-admin/install.php)WP-CLI
نیاز به مرورگربلهخیر، فقط SSH
قابل اجرا در اسکریپت/cronخیربله
نصب چند سایت هم‌زماندستی، یکی‌یکییک حلقهٔ bash
مدیریت افزونه/قالب دسته‌جمعیمحدودwp plugin update --all
گرفتن بک‌آپ دیتابیسنیازمند افزونهٔ جانبیwp db export
مناسب برای چند سایت روی یک سرور اختصاصیزمان‌برسریع و یکسان‌سازی‌شده

پیش‌نیازها روی سرور مجازی یا اختصاصی

قبل از نصب WP-CLI، این موارد باید روی سرور آماده باشد — اگر هنوز سروری در اختیار ندارید، اول مراحل خرید و راه‌اندازی سرور مجازی را ببینید:

  • PHP نسخهٔ ۷.۴ به بالا (ترجیحاً ۸.۱ یا بالاتر) همراه با افزونه‌های php-mysqli، php-curl، php-xml و php-mbstring.
  • MySQL یا MariaDB با یک کاربر دیتابیس که دسترسی ساخت و حذف دیتابیس داشته باشد.
  • Nginx یا Apache با یک virtual host از قبل تعریف‌شده برای دامنه.
  • دسترسی SSH با یک کاربر غیر root که مالکیت پوشهٔ وب‌سایت را دارد — اجرای WP-CLI با کاربر root توصیه نمی‌شود چون فایل‌های ساخته‌شده مالکیت اشتباه می‌گیرند. برای بستن این دسترسی در برابر حمله‌های brute-force، مقالهٔ امن‌سازی دسترسی SSH به سرور لینوکس را هم ببینید.

روی سرور مجازی معمولاً همین امکانات با یک پنل مدیریت ساده یا حتی بدون پنل در دسترس است. روی سرور اختصاصی، معمولاً چند سایت یا چند مشتری روی یک ماشین مدیریت می‌شوند؛ همین‌جاست که اسکریپت‌کردن نصب وردپرس با wp-cli واقعاً فرق محسوسی در زمان ایجاد می‌کند.

نصب WP-CLI روی سرور

دانلود و تنظیم فایل اجرایی

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

دستور wp --info خروجی نسخهٔ PHP، مسیر فایل‌های پیکربندی و نسخهٔ WP-CLI را نشان می‌دهد. اگر خطایی در مورد نسخهٔ PHP یا افزونه‌های گم‌شده گرفتید، همین مرحله محل رفع آن است، نه بعد از نصب وردپرس.

بررسی سازگاری قبل از ادامه

wp cli check-update
wp --allow-root --info

اگر سرور چند کاربر یا چند دامنه دارد، بهتر است این مرحله را برای هر کاربر سیستمی به‌صورت جدا تکرار کنید، چون مسیر PHP و permission هر کاربر می‌تواند متفاوت باشد.

نصب غیرتعاملی وردپرس با WP-CLI

اینجا بخش اصلی نصب وردپرس با wp-cli است — بدون نصب‌کننده گرافیکی، بدون فرم، فقط چند دستور پشت سر هم.

دانلود core وردپرس

cd /var/www/example.com
wp core download --locale=fa_IR

ساخت wp-config.php

wp config create \
  --dbname=example_db \
  --dbuser=example_user \
  --dbpass='رمز-قوی' \
  --dbhost=localhost \
  --locale=fa_IR

نصب core به‌صورت غیرتعاملی

wp core install \
  --url="https://example.com" \
  --title="نام سایت" \
  --admin_user=admin \
  --admin_password='رمز-ادمین-قوی' \
  --admin_email=admin@example.com \
  --skip-email

همین یک دستور، معادل همهٔ مراحل نصب‌کننده گرافیکی است. چون هیچ درخواست ورودی تعاملی ندارد، می‌توانید آن را داخل یک اسکریپت bash قرار دهید و نصب چند سایت را در یک حلقه for domain in ... اجرا کنید — همان الگویی که در دیپلوی خودکار پروژه با Git Hook هم برای استقرار بدون دخالت دست استفاده می‌شود.

اگر این نصب بخشی از یک فرایند استقرار خودکار روی سرور مجازی تازه‌ساخته‌شده است (مثلاً با Cloud-Init از همان بوت اول)، نکته‌ای که زمان زیادی صرفه‌جویی می‌کند این است که از همان ابتدا روی یک سرور مجازی با منابع کافی و دسترسی SSH کامل شروع کنید؛ محدودیت منابع یا دسترسی در میانهٔ اسکریپت نصب، باعث شکست نیمه‌کاره می‌شود.

مدیریت افزونه‌ها و قالب‌ها از طریق خط فرمان

مدیریت افزونه و قالب وردپرس با دستورات WP-CLI در ترمینال

بعد از نصب، مدیریت روزمرهٔ سایت هم از همان خط فرمان ادامه پیدا می‌کند:

wp plugin install woocommerce yoast-seo --activate
wp plugin update --all
wp theme install astra --activate
wp plugin list --status=inactive

برای چند سایت روی یک سرور، همین دستورات را می‌توان در یک اسکریپت جداگانه برای به‌روزرسانی دوره‌ای همهٔ سایت‌ها اجرا کرد — کاری که با پنل گرافیکی باید برای هر سایت تکرار شود.

Migration با دستور search-replace

وقتی سایتی از یک دامنهٔ موقت (staging) به دامنهٔ اصلی منتقل می‌شود، یا از یک سرور به سرور دیگر کپی می‌شود، آدرس‌های قدیمی داخل دیتابیس باقی می‌مانند. جایگزینی دستی آن‌ها در phpMyAdmin خطرناک است، چون آدرس‌ها می‌توانند داخل داده‌های سریالایز‌شده (serialized) هم باشند.

wp search-replace 'staging.example.com' 'example.com' --dry-run
wp search-replace 'staging.example.com' 'example.com' --all-tables

فلگ --dry-run تعداد ردیف‌هایی که تغییر می‌کنند را نشان می‌دهد بدون اینکه واقعاً چیزی را عوض کند؛ همیشه قبل از اجرای واقعی آن را بزنید. --all-tables هم جدول‌هایی که با پیشوند استاندارد wp_ ساخته نشده‌اند (مثل جدول‌های اضافه‌شده توسط افزونه‌ها) را هم پوشش می‌دهد.

بک‌آپ خودکار با Cron

WP-CLI بک‌آپ گرفتن از دیتابیس را به یک خط دستور تبدیل می‌کند، بدون نیاز به افزونهٔ بک‌آپ جانبی:

wp db export /backups/example-$(date +%F).sql
tar -czf /backups/example-files-$(date +%F).tar.gz /var/www/example.com/wp-content

برای اجرای خودکار، این دو خط را داخل crontab کاربر سرویس قرار می‌دهیم:

0 3 * * * cd /var/www/example.com && wp db export /backups/example-$(date +\%F).sql
15 3 * * * find /backups -name "example-*.sql" -mtime +14 -delete

خط دوم فایل‌های قدیمی‌تر از ۱۴ روز را حذف می‌کند تا فضای دیسک پر نشود. روی سرور مجازی با فضای محدود این مرحله را فراموش نکنید — اگر از ظرفیت واقعی سرورتان مطمئن نیستید، تست بنچمارک کیفیت سرور مجازی قبل از خرید راه بررسی آن را نشان می‌دهد؛ روی سرور اختصاصی که چند سایت و حجم بک‌آپ بیشتری دارید، بهتر است مسیر بک‌آپ روی یک دیسک یا پارتیشن جدا از دیسک اصلی سایت باشد تا پر شدن فضای بک‌آپ، سایت زنده را از کار نیندازد. اگر چند سایت پرترافیک روی یک ماشین مدیریت می‌کنید و منابع سرور مجازی دیگر کافی نیست، در این مرحله مهاجرت به یک سرور اختصاصی منطقی‌تر از فشرده‌کردن همه‌چیز روی یک VPS است.

جمع‌بندی

نصب وردپرس با wp-cli مراحل تکراری نصب‌کننده گرافیکی را حذف می‌کند، اسکریپت‌کردن کامل فرایند نصب و مدیریت را ممکن می‌کند، و دسترسی به ابزارهایی مثل search-replace و db export را می‌دهد که در پنل گرافیکی وجود ندارند. برای یک سایت تکی ممکن است تفاوت زیاد حس نشود، اما برای چند سایت روی یک سرور مجازی یا اختصاصی، همین چند دستور ساعت‌ها زمان نصب و نگهداری دستی را حذف می‌کند.