把 PHP/MySQL 网站迁移到 VPS Linux Infrawire,可以获得独享资源以及对整个环境的完全控制。顺利迁移的关键是:先在新服务器上准备好一切,在修改 DNS 之前完成测试,最后才切换流量。本指南就按这个顺序进行。
📋 前提条件
- 一台安装 Ubuntu 24.04 或 Debian 12 的 Linux VPS(IP 和 root 密码可在您的客户区找到)
- 共享主机的访问权限(文件管理器、FTP/SSH,以及 phpMyAdmin 等数据库工具)
- 域名 DNS 解析区的管理权限
- 一个域名
example.com和 VPS 的 IP,下文记为VPS_IP
1. 盘点旧网站
记录网站所需的一切:PHP 版本、扩展、数据库名称、计划任务、.htaccess 规则、SSL 证书,尤其是您的邮箱托管在哪里。在旧控制面板中查看 PHP 版本;如果有 SSH 访问权限:
Bashphp -v php -m | sort crontab -l
同时请现在就把 DNS 记录的 TTL 降到 300 秒,至少在迁移前一天,这样最终切换会很快。
2. 导出文件和数据库
如果旧主机提供 SSH,可以直接从 VPS 拉取文件:
Bashmkdir -p ~/migration && cd ~/migration rsync -avz OLDUSER@OLD_HOST:~/public_html/ ./site/
没有 SSH 的话,通过 FTP 或文件管理器下载压缩包,再用 scp 上传。使用 mysqldump(或 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;对应的 socket 为 /run/php/php8.3-fpm.sock 或 /run/php/php8.2-fpm.sock。在 /etc/nginx/sites-available/example.com 中创建 Nginx 站点:
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(Linux 和 macOS 为 /etc/hosts,Windows 为 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 记录改为 VPS 的 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
fastcgi_pass 中的 PHP socket 与已安装的版本不一致。用 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 上,迁移过程零停机,并且保留了安全的回退路径。