将您当前的VPS(Linode、Rackspace、AWSEC2)迁移到DigitalOcean
介绍
在 VPS 提供商之间迁移似乎是一项艰巨的任务。 与 DigitalOcean 一样,Linode 和 Rackspace 等其他 VPS 提供商也提供 root 访问权限。 这允许您将所有必要的文件传输到新的 DigitalOcean VPS。
对于本指南,我们将演示如何将简单的 WordPress 博客从 Linode 传输到 DigitalOcean 云服务器。
两个实例都将运行 Ubuntu。 这些指令可适用于从其他提供商迁移其他服务。
我们将在两个 VPS 实例中以 root 身份工作。
红色是什么意思
用户需要输入或自定义的行在本教程中将显示为红色! 其余的大部分应该是可复制粘贴的。
初步 DigitalOcean 云服务器配置
灯具安装
首先,您需要在 DigitalOcean 云服务器上安装 LAMP(Linux、Apache、MySQL、PHP)堆栈。 这可以通过几种不同的方式来实现。
在 Ubuntu 上启动和运行 LAMP 的最简单方法是在最初创建 Droplet 时选择预配置的“Ubuntu 上的 LAMP”映像。 在 Droplet 创建页面的“选择图像”部分中,选择“应用程序”选项卡。 选择“Ubuntu 14.04 上的 LAMP”。
如果您已经有一个想要使用的 Droplet,您可以按照此链接在 Ubuntu 上 安装 LAMP 堆栈。
同步安装
我们将使用 ssh 和 rsync 进行文件传输。 使用以下命令确保在您的 DigitalOcean VPS 上安装了 rsync:
rsync --version
如果此命令返回“找不到命令”消息,那么您需要使用 apt-get 安装 rsync:
apt-get install rsync
VPS 服务器之间的通信
以下步骤将在您的旧 VPS 上进行。 如果您还没有,请以 root 身份登录。
您的旧 VPS 还需要安装 rsync。 在此系统上重新运行 rsync 检查:
rsync --version
如有必要,安装 rsync:
apt-get install rsync
为了将相关信息从我们以前的 VPS 传输到我们的 DigitalOcean 云服务器,rsync 需要能够从我们的旧服务器登录到我们的新服务器。 我们将使用 SSH 来执行此操作。
如果您没有在旧 VPS 上生成 SSH 密钥,请立即使用以下命令创建它们:
ssh-keygen -t rsa -b 4096 -v
根据需要回答提示。 在所有提示中随意按“Enter”以接受默认值。
接下来,使用以下命令将 SSH 密钥传输到我们的新 VPS。 更改 red 中的部分以反映您的 DigitalOcean VPS IP 地址:
ssh-copy-id 111.222.333.444
传输站点文件
首先,我们会将旧服务器的 Web 根目录中的文件传输到新的云服务器。 我们将通过检查配置文件找到我们的 WordPress Web 根目录。 我们将查看启用站点的目录以找到正确的 VirtualHost 文件:
cd /etc/apache2/sites-enabled ls
li606-185.members.linode.com
在这里,我们的文件名为“li606-185.members.linode.com”,但您的文件可能有所不同。 在 nano 中打开文件:
nano li606-185.members.linode.com
我们正在寻找“DocumentRoot”行来告诉我们从哪个目录提供我们的 Web 内容。 在我们的示例中,该行显示为:
DocumentRoot /srv/www/li606-185.members.linode.com/public_html/
关闭文件并 cd 进入该目录:
cd /srv/www/li606-185.members.linode.com/public_html/ ls -F
输出
latest.tar.gz wordpress/
如您所见,我们有一个 WordPress 网站的目录。 这包含我们网站的所有网络内容。
我们会将整个目录及其权限和子目录从该位置转移到我们的 DigitalOcean 云服务器的 Web 根目录中。 默认情况下,Ubuntu 14.04 上的 apache2 从“/var/www/html”中提供其内容,因此我们将放置此内容。
我们将为 rsync 添加一些选项,以使其正确传输。 “-a”选项代表存档,它允许我们递归传输,同时保留许多底层文件属性,如权限和所有权。
我们还使用“-v”标志进行详细输出,以及“-P”标志,它向我们显示传输进度并允许 rsync 在出现传输问题时恢复。
rsync -avP wordpress 111.222.333.444:/var/www/html/
请注意“wordpress”之后如何有 no 斜杠,但在“/var/www/html/”中有 is。 这会将“wordpress”目录本身传输到目的地,而不仅仅是传输目录内容。
我们的整个 WordPress 目录结构现已转移到新云服务器的 Web 根目录。
此时,如果我们将 Web 浏览器定向到新云服务器的 IP 地址并尝试访问我们的 WordPress 站点,我们将收到 MySQL 错误:
111.222.333.444/wordpress
Error establishing a database connection
这是因为 WordPress 将其数据存储在尚未传输的 MySQL 数据库中。 接下来我们将处理 MySQL 传输。
MySQL 数据库传输
传输 MySQL 数据库的最佳方式是使用 MySQL 的内部数据库转储实用程序。 首先,我们将看到我们需要转储哪些数据库。 登录 MySQL:
cd mysql -u root -p
输入数据库管理员的密码以继续。 使用以下命令列出 MySQL 数据库:
show databases;
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | wordpress | +--------------------+ 3 rows in set (0.00 sec)
我们想传输我们的“wordpress”数据库,其中包含我们的站点信息,以及我们的“mysql”数据库,它将传输我们所有的用户信息等。 “information_schema”只是数据结构信息,我们不需要坚持。
了解您要为下一步传输哪些数据库。 退出MySql:
exit
我们将使用“mysqldump”转储数据库信息,然后使用“bzip2”对其进行压缩。 我们将使用一些参数来使我们的数据库干净地导入。 将 red 替换为您的数据库名称:
mysqldump -u root -p -QqeR --add-drop-table --databases mysql wordpress | bzip2 -v9 - > siteData.sql.bz2
再次输入数据库管理员的密码以继续。
我们现在有一个压缩的数据库文件,我们可以将其传输到我们的新云服务器。 我们将再次使用 rsync。 更改 IP 地址以反映您的 DigitalOcean 服务器的 IP 地址:
rsync -avP siteData.sql.bz2 111.222.333.444:/root
导入数据库
我们的数据库文件被压缩并传输到我们新的 DigitalOcean 云服务器。 我们必须将它导入到我们新服务器上的 MySQL 中,以便 WordPress 可以使用它。
以 root 身份登录到您的 DigitalOcean 云服务器以执行以下步骤。
我们的数据库文件已转移到 root 用户的主目录,所以现在移动到该目录。 我们将使用“bunzip2”解压缩文件:
cd /root bunzip2 siteData.sql.bz2
现在我们可以将文件导入到我们的新 MySQL 数据库中:
mysql -u root -p < siteData.sql
让我们检查一下 MySQL 是否正确导入:
mysql -u root -p show databases;
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | wordpress | +--------------------+ 5 rows in set (0.00 sec)
如您所见,我们的“wordpress”数据库已经存在。 以前的“mysql”数据库已被我们旧 VPS 中的数据库替换。
退出 MySQL:
exit
现在我们将重新启动我们的数据库和我们的服务器以进行良好的测量:
service mysql restart service apache2 restart
现在,如果我们导航到我们的 DigitalOcean VPS IP 地址,后跟“/wordpress”,我们将看到以前托管在旧 VPS 上的 WordPress 站点:
111.222.333.444/wordpress
最后的考虑
在更改您的域名以指向您的新站点位置之前,广泛测试您的设置非常重要。
最好参考在旧 VPS 上运行的服务,然后检查它们的配置文件。 您可以通过登录并键入以下内容来查看在旧 VPS 上运行的服务:
netstat -plunt
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 13791/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 10538/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 13963/master tcp6 0 0 :::80 :::* LISTEN 13771/apache2 tcp6 0 0 :::22 :::* LISTEN 10538/sshd udp 0 0 0.0.0.0:68 0.0.0.0:* 2287/dhclient3
在这里,我们可以在最后一列中看到要在新服务器上配置的服务。 您的列表可能会有所不同。
每个服务都有自己的配置语法和配置位置,因此您需要根据具体情况检查文档。
例如,如果我们想在新 VPS 上复制 SSH 守护进程的配置,我们可以使用 rsync 将配置文件传输到新 VPS 的主目录:
rsync -avP /etc/ssh/sshd_config 111.222.333.444:/root
传输文件后,我们不想简单地将默认文件替换为旧 VPS 中的文件。
不同版本的程序可能会改变语法。 问题也可能来自特定于旧 VPS 的配置选项。 需要更改引用主机名、IP 地址或文件路径的选项以反映您的新设置。
生成文件的 diff 更安全,以便您可以根据需要调整新的云服务器 ' 的本机配置文件。
有许多不同的程序可以为您提供两个文件之间的差异。 一种是简单的 diff:
diff /root/sshd_conf /etc/ssh/sshd_config
这将生成两个文件之间所有差异的列表。 您可以检查差异并将其考虑在内。 您可能希望从旧设置中合并一些配置选项,而另一些您可能希望修改或丢弃。