操作指南:将LAMP网站迁移至Linode

21 阅读8分钟

本文介绍了如何将其他主机上LAMP环境中运行的网站迁移到Linode。在阅读本文前,建议先阅读《迁入Linode?最佳实践请收好!》一文,了解有关网站迁移的更多信息。


延伸阅读,点击链接了解Akamai Cloud Computing


本文提供了需要在当前主机的命令行环境中运行的命令,如果你使用的是共享主机环境,可能无法使用这些命令。本文使用Ubuntu 18.04作为Linode上运行的发行版。如果想选择其他发行版,请将本文示例中用到的命令替换为所用发行版中类似的命令。

迁移系统

· 部署Linode

1. 创建一个Linode计算实例,部署时选择Ubuntu 18.04作为Linux映像。选择一个有足够存储空间的Linode计划,以容纳当前主机上的网站数据。

2. 创建一个具备sudo权限的受限Linux用户。以下示例假定该用户名为linode_user。

· 安装

1. 通过SSH连接到Linode。

2. 如果尚未进行过,请先更新软件:

sudo apt update && sudo apt upgrade

3. 安装tasksel并用它来安装lamp-server这个metapackage。

sudo apt install tasksel
sudo tasksel install lamp-server

· 准备并备份当前主机

需要转移的数据包括:

  • 网站文档根目录中的文件。本文假定其为/var/www/html/,但你的服务器可能将其放在其他目录下。
  • MySQL数据库数据(将使用mysqldump工具导出这些数据)。
  • Apache配置文件,尤其是/etc/apache2/apache2.conf和/etc/apache2/sites-available/example.com.conf。
    • 这些文件和sites-available目录中的文件可能使用了不同名称。

你的服务器可能会将相关网站数据存储在其他目录下,但大部分LAMP部署都会使用上述默认位置。

在传输数据前,需要对MySQL进程进行数据库转储。这会在磁盘上生成一个封装数据库数据的文件,然后就可以像普通文件一样通过网络复制该文件。

重要:停止当前主机上的服务会导致网站暂时下线。

1. 通过SSH连接到当前主机。

2. 停止当前主机上的Web服务器:

sudo systemctl stop apache2

这会让网站不再处理新请求,从而停止对数据库的写入。这可确保所做的MySQL备份不会导致数据集不一致。

3. 对当前主机上的整个数据库进行数据库转储:

sudo mysqldump --all-databases --single-transaction --quick --lock-tables=false > full-backup-$(date +%F).sql -u root -p

该命令会生成一个名为full-backup-*.sql的文件,其中会插入当前日期。

4. (可选)在当前主机上重启Web服务器,以便在迁移期间继续为访客提供服务:

sudo systemctl start apache2

注意:如果在将服务完全转移到Linode之前,在当前主机上的数据库中添加了任何新信息,这些新增信息都不会被包含在本节所执行的MySQL备份中。

· 将数据传输至Linode

以下命令会将文件复制到Linode上Linux用户的主目录,即~/document_root。下文还将确保这些文件被移动到磁盘上的正确位置,并确保文件所有权正确无误。这项工作会分两步完成,因为我们假定Linux用户的权限有限,无法写入磁盘上的某些位置。

1. 从当前主机将Apache配置文件上传到新的Linode:

rsync -az /etc/apache2/apache2.conf linode_user@linode_ip_address:/etc/apache2/
rsync -az /etc/apache2/sites-available/example.com.conf linode_user@linode_ip_address:~

2. 将网站文件上传至Linode:

rsync -av /var/www/html/ linode_user@linode_ip_address:~/document_root

3. 将数据库转储文件上传至Linode:

rsync -az full-backup-*.sql linode_user@linode_ip_address:~

· 完成Linode上的设置

1. 在Linode上,将传输过来的Apache配置文件移动到相应位置:

cd ~
sudo mv apache2.conf /etc/apache2
sudo mv example.com.conf /etc/apache2/sites-available

2. 将root设置为文件的所有者和组:

sudo chown root:root /etc/apache2/apache2.conf /etc/apache2/sites-available/example.com.conf

3. 移动网站文件,将所有者和组设置为www-data:

sudo mv document_root/* /var/www/html
sudo chown -R www-data:www-data /var/www/html

重要:这将覆盖Linode的MySQL数据库系统中的所有当前数据。不建议在已有其他网站的Linode实例上执行此命令。

4. 恢复数据库转储文件。用实际文件名替换full-backup-*.sql:

sudo mysql -u root < full-backup-*.sql

5. 重新加载MySQL的授权表。当Web应用程序在mysql.users表中包含用户时,必须执行此操作。如果不这样做,应用程序将缺乏读取数据库的权限:

sudo mysqladmin flush-privileges -u root -p

6. 禁用默认的Apache示例站点,并启用你的站点:

sudo a2dissite 000-default.conf
sudo ensite example.com.conf

7. 重启动Apache:

sudo systemctl restart apache

· 测试新环境

在网络浏览器中访问Linode IP地址,应该可以看到你自己的网站。

如果网站无法正常加载,一个可能的原因是IP地址可能被硬编码到网站文件的某些区域或数据库中。如果是这种情况,请查阅PHP应用程序框架文档,了解搜索和替换这些值的方法。例如,WordPress的WP-CLI界面和Drupal的Drush界面提供了帮助你完成这项任务的方法。

网站无法加载的另一个可能原因是:网站配置希望在网络请求的HTTP头信息中提供域名。直接访问IP时,请求中不会包含这些信息。无DNS预览网站指南介绍了解决这一问题的方法。更新DNS记录后,就不再需要使用该变通方法来查看网站了。

如果在网站上看到任何其他错误,请尝试查看Apache错误日志以获取更多线索。这些日志的位置将列在/etc/apache2/apache2.conf或/etc/apache2/sites-available/文件中。

迁移DNS记录

迁移的最后一步是更新DNS记录,以反映Linode的IP。更新完成后,访客就可以从Linode访问页面。

·(可选)让域名为迁移做好准备

建议采取的第一步是降低域名“存活时间”(TTL)设置,以确保迁移不会对网站访客产生负面影响。TTL会告诉DNS缓存服务器保存域名信息的时间。由于DNS地址不会经常更换服务器IP地址,因此默认TTL通常为24小时左右。

不过在更换服务器时,TTL要短一些,以确保更新域名信息后能迅速生效。否则,你的域名可能会在长达24小时内解析到旧服务器的IP地址。

1. 找到当前域名服务器。如果不确定域名服务器是什么,请使用Whois搜索工具。你会看到列出的多个名称服务器,可能都在同一家公司。

通常我们可以从Whois报告中找到的名称服务器(如ns1.linode.com对应linode.com)

推导出名称服务器的管理机构(管理DNS的组织)。有时,名称服务器的标签与机构的网站没有直接关系,在这种情况下,通常可以搜索名称服务器来找到对应的网站。

2. 联系域名服务器管理机构,了解如何缩短域名TTL。每个提供商的情况略有不同,可能需要询问相关客服。

3. 记下当前的TTL。它将以秒为单位,因此需要除以3600才能得到小时数(例如86400秒=24小时)。这是从现在到实际转移域名之间需要等待的时间。

4. 将TTL调整为最短设置。例如,300秒等于5分钟,所以如果可以的话,这是一个不错的选择。

5. 在实际转移域名前,请等待与步骤3中原始TTL相同长度的时间,否则DNS缓存服务器将无法知道新的、较短的TTL。

· 使用Linode的名称服务器

1. 按照Linode添加域名区域的说明,为自己的域名在Linode平台创建DNS记录。重新创建当前名称服务器授权网站上列出的DNS记录,但要酌情更改IP地址,以反映Linode IP。

2. 找到域名注册商,即购买域名的公司。如果不确定注册商是谁,可以使用Whois搜索工具查找。

你的注册商可能与当前名称服务器授权机构不是同一个组织,但通常是同一个组织,因为注册商通常会提供免费的DNS服务。

3. 登录域名注册商控制面板,将授权名称服务器更新为如下的Linode名称服务器:

ns1.linode.com
ns2.linode.com
ns3.linode.com
ns4.linode.com
ns5.linode.com

4. 等待与所设置的TTL相同长度的时间,让域名信息传播出去。如果没有缩短TTL,可能需要等待48小时。

5. 在浏览器中访问自己的域名。现在显示的应该是Linode平台上的网站,而不是旧主机。如果无法区分,请使用DIG实用程序。它应该会显示Linode的IP地址。

6. 为域名设置反向DNS。如果正在运行邮件服务器,这一点尤为重要。*注意:如果在新IP地址下无法看到你的网站,请尝试使用其他浏览器或在私密浏览模式下访问。有时浏览器会缓存旧的DNS数据,即使其他地方实际上已经更新


按照本文介绍的方法,即可顺利地将其他平台上部署的LAMP网站迁移至Linode平台。欢迎关注Akamai稀土掘金机构号,查看更多操作教程和技巧心得。也欢迎通过下列方式注册Linode并获得免费使用额度,亲自体验Akamai云计算平台的丰富服务。

如果你喜欢我们的文章,欢迎关注我们↓↓↓

了解更多