I recently migrated my WordPress blog from Amazon Linux 2 to Amazon Linux 2023 to take advantage of newer software versions. The process was mostly smooth, but I wanted to document a few things I ran into—especially around encryption setup.
I followed these instructions for setting WordPress up on AL 2023: https://docs.aws.amazon.com/linux/al2023/ug/hosting-wordpress-aml-2023.html
The first thing I had to do was follow these instructions to get Apache, PHP, and MariaDB setup: https://docs.aws.amazon.com/linux/al2023/ug/ec2-lamp-amazon-linux-2023.html
I also had to setup a new elastic ip: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html
I used the security group that I had for my existing AL 2 EC2 so I had the right ip addresses opened up.
I copied the database over from the old to new EC2:
on the old server:
mysqldump -u blogdbuser -pMYPASSWORD --single-transaction --routines --triggers blogdb > blogdb.sql
on the new server:
mysql -vvv -n -u blogdbuser -pMYPASSWORD blogdb < blogdb.sql > blogdb.log
Similarly for the web pages and other files:
New server:
# clear out existing web server directory
cd /var/www/html
sudo rm -fr *
sudo rm -f .htaccess .user.ini .wpcli
Old server:
sudo tar -cvf /home/ec2-user/html.tar /var/www/html
New server:
sudo tar -xvf /home/ec2-user/html.tar -C /
Moving the DNS entries over to the new elastic ip address was easy. I just had the change the “A” records for bobbydurrettdba.com and www.bobbydurrettdba.com in Route 53. First, I changed the TTL from one day to 10 minutes so my changes would propogate quickly while I messed with things. Later I set these back. One day was 86400 seconds. Ten minutes was 600 seconds.
The biggest challenge I had was getting encryption setup properly. The documentation missed a couple of key steps. I thought about just writing this post about the encryption part because it was the only thing that wasn’t straightforward.
I was following the steps in https://docs.aws.amazon.com/linux/al2023/ug/SSL-on-amazon-linux-2023.html and using the Let’s Encrypt script for getting certificates. This was called Certbot and documented here: https://eff-certbot.readthedocs.io/en/stable/install.html
There were two key things missing from this documentation:
- How to install Snap on Amazon Linux 2023
- The need for a port 80 VirtualHost
Certbot wants you to install something called Snap to use to install Certbot. I got this from a Google search:
sudo dnf install openssl mod_ssl
sudo wget -O /etc/yum.repos.d/snapd.repo https://bboozzoo.github.io/snapd-amazon-linux/al2023/snapd.repo
sudo dnf install snapd -y
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo reboot
The other undocumented thing was that I had to add these lines after the “Listen 80” line in /etc/httpd/conf/httpd.conf:
sudo vi /etc/httpd/conf/httpd.conf
after Listen 80 add this:
<VirtualHost *:80>
DocumentRoot "/var/www/html"
ServerName bobbydurrettdba.com
ServerAlias www.bobbydurrettdba.com
</VirtualHost>
Then I just ran the documented Certbot commands like this:
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --apache
It took me a few iterations to get this right. Anyway, I just wanted to post a quick note documenting this.
Bobby