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:
1 | 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:
1 2 | 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:
1 | 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:
1 | 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:
1 2 3 | 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:
1 2 3 4 5 6 | 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:
1 | 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:
1 2 | mysql -u root -p**** mysql> CREATE DATABASE IF NOT EXISTS wordpress; |
Step 11: Import export-wordpress-data.sql to newly created database, as follows:
1 | 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:
1 2 3 4 | 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:
01 02 03 04 05 06 07 08 09 10 | # 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:
1 2 3 4 5 6 | <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:
1 | 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:
1 2 3 4 |
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/