دیر بارگذاریشدن در ساعتهای شلوغ، خطای ۵۰۳ وسط کمپین فروش و محدودیت منابعی که معلوم نیست کجا تمام میشود — اینها نشانههای کلاسیک سایتی است که از هاست اشتراکی بزرگتر شده. راهحل، بردن وردپرس روی سرور مجازی است: سروری که همهی CPU و رم و دیسکش مال شماست. در این راهنما هر دو مسیر را قدمبهقدم میرویم: نصب تمیز از صفر، و انتقال کامل سایت فعلی — بهعلاوهی تلههایی که بیشتر مهاجرتها را خراب میکنند.
چرا وردپرس روی سرور مجازی بهتر نفس میکشد؟
در هاست اشتراکی، سایت شما با دهها سایت دیگر سرِ یک سفره نشسته: اگر همسایهتان زیر حمله برود یا اسکریپت سنگینی اجرا کند، سایت شما کند میشود. خیلیها فکر میکنند تنها راه فرار، خرید هاست وردپرس مدیریتشدهی گرانقیمت است؛ در حالی که یک VPS معمولی با Nginx و PHP-FPM همان کارایی (و اغلب بهتر) را با هزینهی کمتر میدهد، به شرطی که یک بار درست راهاندازیاش کنید. سود اصلی:
- منابع اختصاصی: رم و CPU فقط برای سایت شما کار میکند؛ کش شیءگرا (Redis) و PHP-FPM را هم میتوانید دقیقاً برای بار خودتان تنظیم کنید.
- کنترل کامل: نسخهی PHP، ماژولهای Nginx، فایروال — همه دست شماست، نه تیکتِ پشتیبانی هاست.
- مقیاسپذیری: جشنوارهی فروش دارید؟ منابع سرور را موقتاً بالا ببرید و بعد برگردانید.
مسیر اول: نصب وردپرس روی VPS از صفر
پیشنیاز این مسیر یک پشتهی LEMP آماده است: Nginx، دامنهی متصل و گواهی SSL. اینها را در راهنمای راهاندازی سایت با Nginx روی اوبونتو کامل گفتهایم و اینجا تکرار نمیکنیم — اول آن را انجام دهید، بعد برگردید.
دیتابیس و افزونههای PHP
apt install mariadb-server php8.3-fpm php8.3-mysql php8.3-curl \
php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-imagick -y
mysql_secure_installation
سپس یک دیتابیس و کاربر اختصاصی بسازید (رمز قوی یادتان نرود):
mysql -u root
CREATE DATABASE wpdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'YOUR-STRONG-PASSWORD';
GRANT ALL PRIVILEGES ON wpdb.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
دانلود و راهاندازی وردپرس
cd /var/www/example.ir/html
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz --strip-components=1
rm latest.tar.gz
chown -R www-data:www-data /var/www/example.ir/html
حالا دامنه را در مرورگر باز کنید؛ نصاب معروف پنجدقیقهای وردپرس بالا میآید، مشخصات دیتابیس را میگیرد و wp-config.php را خودش میسازد. برای اینکه پیوندهای یکتا از روز اول کار کنند، قانون Nginx بخش «تلههای رایج» پایینتر را هم همین حالا اعمال کنید. همین! نصب وردپرس روی VPS واقعاً بیشتر از یک ربع طول نمیکشد.
مسیر دوم: انتقال وردپرس به سرور مجازی
انتقال وردپرس به سرور جدید سه جزء دارد: فایلها، دیتابیس و تنظیمات. اگر همین ترتیب را رعایت کنید، بدون حتی یک دقیقه قطعی مهاجرت میکنید.
قدم ۱: انتقال فایلها
اگر هاست قدیمی دسترسی SSH میدهد، rsync سریعترین و امنترین راه است — از روی سرور جدید اجرا کنید:
rsync -avz --progress [email protected]:public_html/ /var/www/example.ir/html/
اگر فقط cPanel دارید، از File Manager یک فایل ZIP از کل public_html بسازید، دانلودش کنید و با scp به سرور بفرستید (روش کار scp در آموزش SSH آمده):
scp backup.zip [email protected]:/var/www/example.ir/html/
ssh [email protected]
cd /var/www/example.ir/html && unzip backup.zip && rm backup.zip
قدم ۲: انتقال دیتابیس
روی هاست قدیمی از phpMyAdmin خروجی SQL بگیرید، یا اگر SSH دارید:
mysqldump -u olduser -p old_database > db-backup.sql
فایل را به سرور جدید منتقل و در دیتابیسی که ساختهاید وارد کنید:
mysql -u wpuser -p wpdb < db-backup.sql
قدم ۳: هماهنگکردن wp-config.php
در فایل wp-config.php سرور جدید، چهار مقدار را با دیتابیس جدید یکی کنید:
define( 'DB_NAME', 'wpdb' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'YOUR-STRONG-PASSWORD' );
define( 'DB_HOST', 'localhost' );
قدم ۴: تست قبل از تغییر DNS
بدون دستزدن به DNS میتوانید سایت را روی سرور جدید ببینید: در فایل hosts سیستم خودتان (در لینوکس و مک /etc/hosts) یک خط اضافه کنید:
203.0.113.10 example.ir www.example.ir
حالا مرورگر شما سایت را از سرور جدید میخواند ولی بقیهی دنیا هنوز هاست قدیمی را میبینند. صفحهی اصلی، چند نوشته، ورود به پیشخوان و آپلود یک تصویر را تست کنید. بعد از اطمینان، آن خط را حذف کنید.
قدم ۵: سوئیچ DNS با TTL کم
حداقل ۲۴ ساعت قبل از مهاجرت، TTL رکورد A دامنه را به ۳۰۰ ثانیه کاهش دهید تا لحظهی سوئیچ، تغییر ظرف چند دقیقه در کل اینترنت پخش شود، نه چند ساعت. بعد فقط آیپی رکورد A را به سرور جدید تغییر دهید. اگر با مفهوم TTL و رکوردها راحت نیستید، آموزش رکوردهای DNS را ببینید.
سه تلهی رایج بعد از انتقال
۱) همهی صفحهها بهجز صفحهی اصلی ۴۰۴ میدهند
در هاست اشتراکی، فایل .htaccess پیوندهای یکتا را مدیریت میکرد؛ Nginx آن فایل را نمیخواند. در بلوک server سایت، بخش location / باید این شکلی باشد:
location / {
try_files $uri $uri/ /index.php?$args;
}
بعد nginx -t && systemctl reload nginx — تمام ۴۰۴ها ناپدید میشوند.
۲) خطا در آپلود تصویر یا نصب افزونه
فایلهایی که با root منتقل کردهاید متعلق به root هستند، در حالی که PHP با کاربر www-data اجرا میشود. مالکیت و سطح دسترسی را یکجا درست کنید:
chown -R www-data:www-data /var/www/example.ir/html
find /var/www/example.ir/html -type d -exec chmod 755 {} \;
find /var/www/example.ir/html -type f -exec chmod 644 {} \;
۳) محتوای مختلط (Mixed Content) بعد از SSL
اگر سایت قبلاً روی http بود و حالا HTTPS دارید، آدرسهای قدیمی داخل دیتابیس باعث میشوند قفل مرورگر بشکند و بعضی تصاویر لود نشوند. با WP-CLI یک جایگزینی امن انجام دهید (این ابزار دادههای سریالایزشده را هم درست تبدیل میکند — برخلاف جایگزینی مستقیم SQL که سایت را میشکند):
wp search-replace 'http://example.ir' 'https://example.ir' --skip-columns=guid --dry-run
wp search-replace 'http://example.ir' 'https://example.ir' --skip-columns=guid
اگر WP-CLI ندارید، افزونهی Better Search Replace همین کار را از پیشخوان انجام میدهد.
چکلیست بعد از مهاجرت
وقتی وردپرس روی سرور مجازی جدید بالا آمد، قبل از اعلام پایان کار این موارد را یکییکی تیک بزنید:
- صفحهی اصلی، چند نوشته، برگهی تماس و جستوجو را باز کنید؛
- ورود به پیشخوان، آپلود رسانه و ذخیرهی یک پیشنویس را تست کنید؛
- یک فرم (تماس یا دیدگاه) ثبت کنید و مطمئن شوید ایمیلش میرسد — سرور مجازی بهطور پیشفرض سرویس ایمیل ندارد؛ یک افزونهی SMTP نصب کنید؛
- افزونهی کش را دوباره فعال و کش قدیمی را پاک کنید؛
- گواهی SSL و تمدید خودکار آن را با
certbot renew --dry-runچک کنید؛ - پشتیبانگیری خودکار (فایل + دیتابیس) راه بیندازید — روی VPS دیگر کسی جز شما بکاپ نمیگیرد؛
- امنیت پایهی سرور را طبق راهنمای امنیت سرور لینوکس ببندید: فایروال، Fail2ban و غیرفعالکردن ورود با رمز؛
- چند روز لاگهای
/var/log/nginx/error.logرا زیر نظر داشته باشید.
قدم بعدی
وردپرس روی سرور مجازی یعنی سرعت و کنترلی که هیچ هاست اشتراکی نمیدهد — و همانطور که دیدید، نه نصب از صفر پیچیده است و نه انتقال وردپرس به سرور جدید. همین حالا یک سرور ابری بسازید و مهاجرت را با خیال راحت و پرداخت ساعتی تمرین کنید. اگر هنوز مدل پرداخت ساعتی برایتان تازگی دارد، مقالهی سرور ابری ساعتی چیست نقطهی شروع خوبی است.