Setting Up WordPress on Amazon EC2

Step 1: Create an AWS Account

First things first: you need to create your AWS account. You can sign up here. You’ll have to provide a credit card and a phone number where you will be called as part of the online registration process for verification purposes. Amazon offers a Free Usage Tier, which is great to explore the services and even host real apps without being charged. Check the details here.

Step 2: Create an Instance

What type of EC2 instance should you use? I started my experiments with a Micro instance because its price structure is very attractive. However, after a few minutes to a couple of hours, my blog systematically became unresponsive and I had to restart Apache and/or MySQL. I did some research, and found out that other people were reporting similar problems. It looks like that combination was too much for a Micro instance. I tried a Small instance and the problems went away.

To create a new instance, access the AWS Management Console and click the EC2 tab:

  • Choose an AMI in the classic instance wizard: I chose the Basic 32-bit Amazon Linux AMI.
  • Instance details: Select the Instance Type you want to use. I chose Small (m1.small).
  • Create a new key pair. Enter a name for your key pair (i.e. sean) and download your key pair (i.e. sean.pem).
  • Select the quick start security group.
  • Launch your instance.

Step 3: SSH into your Instance

Once your instance is running, you can ssh into it. First, you need to identify the address of your instance: Select the instance in the AWS Management Console, and look for the Public DNS in the instance description (ec2-23-23-77-251.compute-1.amazonaws.com).

Use that address (and a path to your .pem file) to ssh into your instance:
ssh [email protected] -i ~/sean.pem

If you get a message about your .pem file permissions being too open, chmod your .pem file as follows:
chmod 600 ~/sean.pem

Many of the shell commands below require root access. To avoid having to prefix these commands with sudo, let’s just switch user once and for all:
sudo su

Step 4: Install the Apache Web Server

To install the Apache Web Server, type:
yum install httpd

Start the Apache Web Server:
service httpd start

To test your Web Server, open a browser and access your web site: http://ec2-23-23-77-251.compute-1.amazonaws.com (Use your actual public DNS name). You should see a standard Amazon place holder page.

Step 5: Install PHP

To install PHP, type:
yum install php php-mysql

Restart the Apache Web Server:
service httpd restart

Create a page to test your PHP installation:
cd /var/www/html
vi test.php

  1. Type i to start the insert mode
  2. Type <?php phpinfo() ?>
  3. Type :wq to write the file and quit vi

Open a browser and access test.php to test your PHP installation: http://ec2-23-23-77-251.compute-1.amazonaws.com/test.php (Use your actual public DNS name).

Step 6: Install MySQL

To install MySQL, type:
yum install mysql-server

Start MySQL:
service mysqld start

Create your “blog” database:
mysqladmin -uroot create blog

Secure your database:
mysql_secure_Installation

Answer the wizard questions as follows:

  1. Enter current password for root: Press return for none
  2. Change Root Password: Y
  3. New Password: Enter your new password
  4. Remove anonymous user: Y
  5. Disallow root login remotely: Y
  6. Remove test database and access to it: Y
  7. Reload privilege tables now: Y

Step 7: Install WordPress

To install WordPress, type:
cd /var/www/html

wget http://wordpress.org/latest.tar.gz

tar -xzvf latest.tar.gzcd

This will uncompress WordPress in its own “wordpress” directory. I like having WordPress in a separate directory, but would rather rename it to “blog”:
mv wordpress blog

Create the WordPress wp-config.php file:
cd blog

mv wp-config-sample.php wp-config.php

vi wp-config.php

  1. Type i to start insert mode.
  2. Modify the database connection parameters as follows:

    define(‘DB_NAME’, ‘blog’);

    define(‘DB_USER’, ‘root’);

    define(‘DB_PASSWORD’, ‘YOUR_PASSWORD’);

    define(‘DB_HOST’, ‘localhost’);
  3. Type :wq to write the file and quit vi

Open a Browser and access your blog: http://ec2-23-23-77-251.compute-1.amazonaws.com/blog (Use your actual public DNS name). This should trigger the WordPress configuration process.

Step 8: Map IP Address and Domain Name

To use your blog in production, you will have to:

  1. Associate an IP address to your instance
  2. Map your domain name to that IP address

To associate an IP address to your instance:

  1. In the AWS Management Console, click Elastic IPs (left navigation bar)
  2. Click Allocate New Address, and confirm by clicking the “Yes, Allocate” button
  3. Right-click the newly allocated IP address and select “Associate” in the popup menu. Select the instance you just created and click “Yes, Associate”

To map your domain name to your IP address, you will have to use the tools provided by your domain registrar. If you use GoDaddy, specify NS73.DOMAINCONTROL.COM and NS74.DOMAINCONTROL.COM as the name servers for your domain, and use the DNS Manager to modify the A record and point to your IP address. Documentation is available here.

Once everything is configured and mapped correctly, access the General Settings in the WordPress management console and make sure the WordPress Address and Site Address are specified correctly using your domain name.