中文

将网站从共享主机迁移到 Linux VPS

1 min
VPS/VDS 主机

把 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 访问权限:

Bash
php -v php -m | sort crontab -l

同时请现在就把 DNS 记录的 TTL 降到 300 秒,至少在迁移前一天,这样最终切换会很快。

2. 导出文件和数据库

如果旧主机提供 SSH,可以直接从 VPS 拉取文件:

Bash
mkdir -p ~/migration && cd ~/migration rsync -avz OLDUSER@OLD_HOST:~/public_html/ ./site/

没有 SSH 的话,通过 FTP 或文件管理器下载压缩包,再用 scp 上传。使用 mysqldump(或 phpMyAdmin 的“导出”按钮)导出数据库:

Bash
mysqldump --single-transaction -u DBUSER -p DBNAME > db.sql

3. 在 VPS 上准备运行环境

Bash
sudo 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 站点:

Nginx
1server { 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}
Bash
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx

Nginx 会忽略 .htaccess:请把其中的重写规则改写为 location 块。

4. 导入文件和数据库

Bash
sudo 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):

Bash
VPS_IP example.com www.example.com

或者不修改任何设置直接测试:

Bash
curl -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 生效后,申请证书:

Bash
sudo 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 上,迁移过程零停机,并且保留了安全的回退路径。

及时了解最新的优惠、折扣和特别促销活动。

查看促销

我们使用Cookie

我们使用分析性Cookie来改善您在我们网站上的体验。数据不会出售给第三方。了解更多请查看我们的 隐私政策.