将正在运行的WordPress迁移至AWS Lightsail
首先
我把公司运营的WordPress网站迁移到了Lightsail,现在将其作为备忘录记录下来。
在WordPress网站服务器迁移方面,有使用插件的方法,但由于其操作方式常常是黑盒子,因此我们选择手动进行服务器迁移。
我们保持正在运行的WordPress不变,在Lightsail上复制同样的WordPress,最后将域名重定向到Lightsail,这样完成整个过程。
使用Lightsail创建WordPress

当实例启动时,创建静态IP并将其绑定到已启动的实例上。
如果在网络上搜索,将会出现许多带有图像解释的网站,详细说明了这个过程。
如果从浏览器访问IP后能够显示WordPress的初始界面,就是正常的。
在进行迁移之前,将WordPress版本进行调整。
Lightsail的WordPress无法选择版本(写这篇文章时的版本为5.4.2固定)。
如果要迁移的WordPress版本较旧,则最好提前升级并接近当前版本以确保稳定性。
然而,由于特殊原因,我无法在我的环境中进行升级,因此我直接将4.7.3版本的WordPress迁移过来,但并没有出现任何问题。
将WordPress核心进行迁移
尽管WordPress本身包含着许多文件,我们只需要使用新建的WordPress的核心文件,然后将插件和主题文件夹(即wp-content目录)从旧的WordPress中迁移过来。
用SSH登录到Lightsail并执行以下操作
# 旧WordPressをLightsailの中に持ってくる
git clone git@github.com:best-teacher-production/myapp.git
# LightsailのWordpress本体が配置されているディレクトリに移動
cd /home/bitnami/apps/wordpress/htdocs
# 新WordPressのwp-contentをリネームして
mv wp-content/ wp-content.original
# 旧WordPressのwp-contentのシンボリックリンクを貼る
ln -s /home/bitnami/myapp/wp-content
由于我的WordPress网站是使用git进行管理,所以我需要做一些麻烦的工作。但是,如果不需要使用git进行管理,只需要简单地将/home/bitnami/apps/wordpress/htdocs/wp-content/替换为旧的WordPress的wp-content即可,没有任何问题。
修改wp-config.php
Lightsail的wp-config.php文件位于/home/bitnami/apps/wordpress/htdocs/wp-config.php中。
默认设置情况下,网站内的链接地址将会变为IP地址,为了将其变为域名,请进行以下修正操作。
- define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/');
- define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] . '/');
+ define('WP_SITEURL', 'https://自分のドメイン名');
+ define('WP_HOME', 'https://自分のドメイン名');
此外,如果在wp-config.php文件中添加了自定义设置(如自定义常量等),将把这些设置迁移到新的wp-config.php文件中。
一旦修改设置后,需要重新启动Apache以使更改生效。
sudo /opt/bitnami/ctlscript.sh restart apache
将DB数据库迁移
将DB数据完全备份为mysqldump文件,将旧WordPress的MySQL数据恢复到新的WordPress的MySQL中。
将备份文件backup.sql移动到Lightsail,并执行以下命令。
# ユーザー名とパスワードは/apps/wordpress/htdocs/wp-config.phpで確認可
mysql -u ユーザー名 -pパスワード bitnami_wordpress < backup.sql
因为在我的环境中,我将版本为4.7.3的数据恢复到了5.4.2的WordPress,所以在恢复完成后,仪表盘出现了“需要更新数据库”的提示信息,不过我点击了更新按钮后成功地进行了更新。WordPress能够检测到应用程序和数据库之间的版本差异,并为我执行更新操作。
SSL支持
在切换DNS之前,需要提前迁移SSL证书。
关于SSL证书的迁移,可以选择继续使用当前服务器的证书,或者重新创建一个新的证书,根据情况进行选择。
如果正在使用类似Let’s Encrypt的免费证书,考虑到后续更新的问题,建议在新服务器上重新创建一个新的证书比较方便。
这次我们决定使用一个名为certbot的工具来创建新证书。
https://github.com/certbot/certbot
请注意,在这个阶段,域名尚不适用于Lightsail,因此需要使用DNS-01挑战方式来创建证书。
(通常在网络上搜索certbot命令时,大多数会介绍HTTP-01挑战方式。仅当域名已经指向您自己的服务器时,才可以使用该挑战方式。)
关于挑战模式
有关certbot命令的详细信息,请参阅以下文件:
https://certbot.eff.org/docs/
# certbotをgit cloneする
git clone https://github.com/certbot/certbot
cd certbot
# チャレンジ方式にDNS-01を指定してSSL証明書を作成するコマンド
./certbot-auto certonly --manual --preferred-challenges dns-01 -d 自分のドメイン名
当执行此命令时,日志将以以下方式流动。
Requesting to rerun ./certbot-auto with root privileges...
./certbot-auto has insecure permissions!
To learn how to fix them, visit https://community.letsencrypt.org/t/certbot-auto-deployment-best-practices/91979/
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for 自分のドメイン名
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.自分のドメイン名 with the following value:
# ここに認証文字列が表示される
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
在这里日志发送停止,按照指示,将显示的认证字符串注册到DNS的TXT记录中,然后按下Enter键。
如果成功认证,将生成SSL证书。
将已创建的SSL证书配置到Apache并重新启动。
sudo cp /etc/letsencrypt/live/自分のドメイン名/fullchain.pem /opt/bitnami/apache2/conf/server.crt
sudo cp /etc/letsencrypt/live/自分のドメイン名/privkey.pem /opt/bitnami/apache2/conf/server.key
sudo /opt/bitnami/ctlscript.sh restart apache
强制使用https访问
由于即使支持SSL,直接键入http也可以访问,因此我们将http的访问重定向到https。
在Lightsail中,可以通过/opt/bitnami/apps/wordpress/conf/httpd-prefix.conf进行设置。
- RewriteCond "%{HTTP_HOST}" ^ec2-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})\..*\.amazonaws.com(:[0-9]*)?$
- RewriteRule "^/?(.*)" "%{REQUEST_SCHEME}://%1.%2.%3.%4%5/$1" [L,R=302,NE]
+ RewriteCond %{HTTPS} !=on
+ RewriteRule ^/(.*) https://自分のドメイン名/$1 [R,L]
如果进行了修正,将重新启动Apache。
Note: Since Chinese is a context-dependent language, the best translation may vary depending on the specific usage or context.
sudo /opt/bitnami/ctlscript.sh restart apache
修改域名的引用目标
完成准备后,最后修改DNS记录,将域名的指向从旧服务器切换到Lightsail。通过浏览器访问https://自己的域名,如果日志在以下访问日志中流动,则迁移完成。
tail -f /opt/bitnami/apache2/logs/access_log
其他設置
设置环境变量
在使用环境变量时,请将其配置到/opt/bitnami/php/etc/php-fpm.conf文件中。
修改完毕后,请重新启动php-fpm服务。
sudo /opt/bitnami/ctlscript.sh restart php-fpm
请用中文原生形式转述以下内容,只需提供一个版本:
.htaccess文件。
在设置访问限制(如基本认证)时,通常在常规的Web服务器上使用.htaccess文件。但在Lightsail中,有一个名为/home/bitnami/apps/wordpress/conf/htaccess.conf的配置文件可供使用,您可以将设置信息写入该文件。
最后
这次我们转移到了Lightsail,但即使在不同的环境中进行迁移,我认为也可以应用同样的方法。只需做的是准备一份全新的WordPress,并将wp-content和数据库数据迁移到那里即可。
由于Lightsail在各种配置文件的位置上有一些特殊,所以一开始有些困惑。因为它是基于Bitnami软件的,所以在遇到问题时,只需在Bitnami WordPress上进行搜索,就很容易找到相关信息。