انتقال یک وبسایت PHP/MySQL به VPS Linux Infrawire منابع اختصاصی و کنترل کامل بر محیط اجرا به شما میدهد. کلید یک مهاجرت بیدردسر این است که همهچیز را روی سرور جدید آماده کنید، پیش از دستزدن به DNS آزمایش کنید و در پایان ترافیک را جابهجا کنید. این راهنما همین ترتیب را دنبال میکند.
📋 پیشنیازها
- یک VPS لینوکس با Ubuntu 24.04 یا Debian 12 (آیپی و رمز root در بخش مشتریان شما موجود است)
- دسترسی به هاست اشتراکی (مدیر فایل، FTP/SSH و ابزار پایگاه داده مانند phpMyAdmin)
- دسترسی به ناحیه DNS دامنه شما
- یک دامنه
example.comو آیپی VPS شما که در ادامهVPS_IPنوشته میشود
1. سایت قدیمی را فهرستبرداری کنید
نیازهای سایت را یادداشت کنید: نسخه PHP، افزونهها، نام پایگاه داده، کارهای cron، قوانین .htaccess، گواهی SSL و بهویژه محل میزبانی ایمیل شما. در کنترلپنل قدیمی نسخه PHP را ببینید؛ اگر دسترسی SSH دارید:
Bashphp -v php -m | sort crontab -l
همین حالا TTL رکوردهای DNS را هم دستکم یک روز پیش از مهاجرت به ۳۰۰ ثانیه کاهش دهید تا تغییر نهایی سریع باشد.
2. فایلها و پایگاه داده را خروجی بگیرید
اگر میزبان قدیمی SSH دارد، میتوانید فایلها را مستقیماً از VPS بکشید:
Bashmkdir -p ~/migration && cd ~/migration rsync -avz OLDUSER@OLD_HOST:~/public_html/ ./site/
بدون SSH، یک آرشیو را با FTP یا مدیر فایل دانلود کنید و با scp آپلود کنید. پایگاه داده را با mysqldump (یا دکمه Export در phpMyAdmin) خروجی بگیرید:
Bashmysqldump --single-transaction -u DBUSER -p DBNAME > db.sql
3. محیط را روی VPS آماده کنید
Bashsudo apt update sudo apt install -y nginx mariadb-server php-fpm php-mysql php-xml php-mbstring php-curl php-zip php-gd sudo mysql_secure_installation php -v
Ubuntu 24.04 با PHP 8.3 و Debian 12 با PHP 8.2 عرضه میشود؛ سوکت /run/php/php8.3-fpm.sock یا /run/php/php8.2-fpm.sock است. سایت Nginx را در /etc/nginx/sites-available/example.com بسازید:
Nginx1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com www.example.com; 5 root /var/www/example.com; 6 index index.php index.html; 7 8 location / { 9 try_files $uri $uri/ /index.php?$args; 10 } 11 12 location ~ \.php$ { 13 include snippets/fastcgi-php.conf; 14 fastcgi_pass unix:/run/php/php8.3-fpm.sock; 15 } 16}
Bashsudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
Nginx فایل .htaccess را نادیده میگیرد: قوانین بازنویسی آن را به بلوکهای location تبدیل کنید.
4. فایلها و پایگاه داده را درونریزی کنید
Bashsudo mkdir -p /var/www/example.com sudo cp -a ~/migration/site/. /var/www/example.com/ sudo chown -R www-data:www-data /var/www/example.com sudo mysql -e "CREATE DATABASE dbname CHARACTER SET utf8mb4;" sudo mysql -e "CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD';" sudo mysql -e "GRANT ALL ON dbname.* TO 'dbuser'@'localhost'; FLUSH PRIVILEGES;" sudo mysql dbname < ~/migration/db.sql
سپس پیکربندی برنامه (مثلاً wp-config.php) را با نام پایگاه داده، کاربر و رمز جدید ویرایش کنید. میزبان اکنون localhost است.
5. پیش از تغییر آزمایش کنید
روی رایانه خودتان با ویرایش فایل hosts دامنه را به VPS اشاره دهید (/etc/hosts در لینوکس و macOS و C:\Windows\System32\drivers\etc\hosts در ویندوز):
BashVPS_IP example.com www.example.com
یا بدون تغییر دادن چیزی آزمایش کنید:
Bashcurl -I --resolve example.com:80:VPS_IP http://example.com/
سایت را مرور کنید، وارد شوید، یک فرم ارسال کنید و لاگها را در /var/log/nginx/error.log ببینید. پس از آن خط hosts را حذف کنید.
6. DNS را تغییر دهید و ایمیل را مدیریت کنید
تغییرات محتوا روی سایت قدیمی را متوقف کنید، rsync و خروجی/درونریزی پایگاه داده را برای دریافت آخرین تغییرات تکرار کنید، سپس رکورد A را به VPS_IP و رکورد AAAA را به آدرس IPv6 سرور تغییر دهید. وقتی DNS منتشر شد، گواهی را صادر کنید:
Bashsudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d example.com -d www.example.com
ایمیل: فقط رکوردهای A/AAAA را تغییر دهید. اگر صندوقهای پستی شما نزد ارائهدهنده قدیمی میمانند، رکوردهای MX، SPF و DKIM را دستنخورده بگذارید. هاست قدیمی را تنها پس از چند روز بدون مشکل لغو کنید.
🔧 عیبیابی
502 Bad Gateway
سوکت PHP در fastcgi_pass با نسخه نصبشده مطابقت ندارد. با ls /run/php/ و systemctl status php8.3-fpm بررسی کنید.
"Error establishing a database connection"
اطلاعات ورود یا میزبان در فایل پیکربندی اشتباه است. با mysql -u dbuser -p dbname آزمایش کنید.
403 یا صفحه خالی
مالک و مجوزها (chown -R www-data:www-data) را بررسی کنید و sudo tail -n 50 /var/log/nginx/error.log و لاگهای PHP را ببینید.
پس از تغییر هنوز سایت قدیمی نمایش داده میشود
کشهای DNS هنوز فعالاند. با dig +short example.com بررسی کنید و منتظر پایان TTL بمانید.
✅ وبسایت شما اکنون روی VPS اختصاصی خودش اجرا میشود، بدون توقف منتقل شد و راه بازگشت امنی هم دارد.