Hosting WordPress Application on an EC2 Instance – AWS
In this post, we will deploy WordPress Application on an EC2 Amazon Linux AMI t2.micro instance following below steps:
Step 1: Set up Amazon EC2 instance following set-up-amazon-ec2-instance.
Step 2: Launch an EC2 instance following ec2-launch-linux-instance.
Step 3: As creating a wordpress application is not a part of this post, I already created one and zipped it as wordpress-app.zip which we will securely copy from local machine to an EC2 instance home directory (/home/ec2-user) using ec2-user as follows:
scp -i /Users/ArpitAggarwal/arpitaggarwal-key-pair.pem /Users/ArpitAggarwal/wordpress-app.zip ec2-user@ec2-54-218-30-7.us-west-2.compute.amazonaws.com:/home/ec2-user
arpitaggarwal-key-pair.pem refers to private key file.
ec2-54-218-30-7.us-west-2.compute.amazonaws.com refers to Public DNS name of EC2 instance.
Step 4: Export wordpress-app database, as follows:
cd /applications/MAMP/library/bin ./mysqldump -u root -p**** wordpress > /Users/ArpitAggarwal/export-wordpress-data.sql
/applications/MAMP/library/bin refers to MAMP local database store.
./mysqldump referes to command to get mysqldump.
Step 5: Copy export-wordpress-data.sql we created from local machine directory to EC2 instance home (/home/ec2-user) directory:
scp -i /Users/ArpitAggarwal/arpitaggarwal-key-pair.pem /Users/ArpitAggarwal/export-wordpress-data.sql ec2-user@ec2-54-218-30-7.us-west-2.compute.amazonaws.com:/home/ec2-user
Step 6: Login to your EC2 instance with private key file and Public DNS name using ssh:
ssh -i /Users/ArpitAggarwal/arpitaggarwal-key-pair.pem ec2-user@ec2-54-218-30-7.us-west-2.compute.amazonaws.com
Step 7: Change collation of your database by executing following commands in /home/ec2-user after login to an EC2 instance:
sed -i 's/utf8mb4/utf8/g' export-wordpress-data.sql sed -i 's/utf8_unicode_ci/utf8_general_ci/g' export-wordpress-data.sql sed -i 's/utf8_unicode_520_ci/utf8_general_ci/g' export-wordpress-data.sql
Step 8: Set up Linux, Apache, MySQL, PHP (LAMP) stack on an EC2 CentOS 6 instance and set the processes to run automatically when the server boots, executing below commands:
sudo yum install httpd sudo yum install mysql-server sudo yum install php php-mysql sudo service mysqld start sudo chkconfig httpd on sudo chkconfig mysqld on
Step 9: Set a root MySQL password same as you have provided in your wordpess-app, executing below command and choosing specific option for all the prompt:
sudo /usr/bin/mysql_secure_installation
Step 10: Login to MySQL database on an EC2 instance and create DATABASE same as you have provided in your wordpess-app, for me it’s wordpress:
mysql -u root -p**** mysql> CREATE DATABASE IF NOT EXISTS wordpress;
Step 11: Import export-wordpress-data.sql to newly created database, as follows:
mysql -uroot -p**** wordpress < export-wordpress-data.sql
Step 12: Inflate wordpress-app.zip, Copy all the files to /var/www/html directory and create .htaccess file inside the same directory:
unzip wordpress-app.zip sudo cp -R wordpress-app/* /var/www/html cd /var/www/html sudo touch .htaccess
Replace the content of .htaccess file with below:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
Step 13: Edit httpd.conf placed in /etc/httpd/conf to set value of AllowOverride directive to All for the /var/www/html directory, as below:
<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>
Step 13: Restart apache to reflect all of the changes we did:
sudo service httpd restart
Now, access the wordpress-app from your browser using Public DNS name or Public IP of your EC2 instance as: http://ec2-54-218-30-7.us-west-2.compute.amazonaws.com/
Need to move WordPress site to a new Host?
It can be easily done by updating the option_value, post_content and guid of the application directly in the MySQL database executing below scripts:
UPDATE wp_options SET option_value = 'http://new-host/' WHERE option_name = 'home'; UPDATE wp_options SET option_value = 'http://new-host/' WHERE option_name = 'siteurl'; UPDATE wp_posts SET post_content = REPLACE(post_content,'http://old-host/','http://new-host/'); UPDATE wp_posts SET guid = REPLACE(guid,'http://old-host/','http://new-host/');
Reference: | Hosting WordPress Application on an EC2 Instance – AWS from our JCG partner Arpit Aggarwal at the Arpit Aggarwal blog. |
Hi Arpit, this blog post is really amazing. Setup steps are working fine. Thanks for providing useful info.
Nice to hear this Ben, I appreciate if you share your feedback on the original post as well – https://aggarwalarpit.wordpress.com/2017/05/20/hosting-wordpress-application-on-an-ec2-instance-aws/