Last year, I moved this blog from Blogger to WordPress. Last week, I moved this blog from shared hosting to VPS. It was a fun experience and interesting too.
Why I chose VPS (Virtual Private Server) :
There are several VPS providers out there and they mainly offer two kinds of services : managed and unmanaged. Managed means that there is full time support staff that can take care of your VPS (ensure it is always up, secure and up to date, install and configure various apps and so on) while unmanaged means you are your own support staff (which provides a kickass experience to learn if you can dedicate the time IMHO).
After analyzing the trend and volume of this blog’s traffic and frequency with which it is updated , I went with an unmanaged VPS by Digital Ocean (all the VPS resources like RAM, disk space and bandwidth can be upgraded anytime if needed to accommodate growth – that is another cool thing of having own VPS – complete flexibility).
Here is how I did it :
Setting up LEMP stack on VPS :
Installing LEMP is simple, just login to the VPS as root and first update the repository (Ubuntu server is used here) :
Once all repositories are updated, install each of the components : Nginx, MySQL and PHP-Fast CGI . This is done by typing :
Setting up PHP-Fast CGI to work with Nginx :
Once done, to setup Nginx and make sure it works with php-cgi, refer to this excellent article here.
So now the VPS is up and running as a webserver, it is time to setup Nginx virtual hosts configuration as well as a MySQL database.
Setting up Nginx vhosts :
Create a directory (assuming blog is example.com) and set appropriate ownership as well as permissions :
This will serve as the document root or the blog root. Now to set up Nginx vhost :
Copy the basic vhost config found here.
Once done, save it and enable this Nginx vhost by creating a symlink :
Restart the Nginx server :
Setting up a MySQL database :
Assuming a database named mydb with user as “freedom” and password as “pass”, issue the following command to get to MySQL command prompt:
What this will do is create a new MySQL database, now all that is left is to copy the contents and the database from current (soon to be former) webhost to the new VPS. Reboot the VPS once all of this is done.
Moving from old host to VPS :
Moving a WordPress blog involves moving the content (posts, images, contents) and also the WordPress database which keeps them. A simple guide to this can be found here.
To copy the contents, login to old host using ssh and from there type :
This assumes that the old WordPress installation is residing at /srv/www/oldwebhostpath/example.com/public_html and the VPS where it is to be moved is at /srv/www/example.com/public_html
Finally, import the old WordPress database which say is copied to VPS and is now at /srv/www/example.com/db by :
mysql -u root -p mydb < /srv/www/example.com/db
Then edit the wp-config.php file on the new VPS so that username, database name and password match the ones given when they were created before. To make sure that newly moved blog would work and be accessible as before, it is useful to edit the local hosts file and add an entry for the VPS IP address so that it maps to the domain name.
This can be great when testing and checking if all posts, images as well as editing functions are available just like on old blog before DNS changes are done. Also, firewall can now be setup and be checked if functionality is affected or not. Here is a simple method to set up firewall on a Linux VPS.
Now that the blog is moved and tested so that everything looks ok, it is time to permanently change DNS settings from the domain end as well as from VPS end. Here is a good resource on how to set it up at both ends. Once these changes are done, all that is left is to wait for about 24 hours. During this time, the blog traffic will be served from either of the hosts and there will be essentially no downtime at all. After a while, the ping response will start displaying the new VPS IP address and this means DNS changes are in effect. All of the traffic is now reaching the VPS and not the old host.
To check the DNS progress, it can be useful to ping the domain name from different parts of the world. Online ping tools like ping.ms should suffice.
I hope this was helpful and may save a few hours for you.
Some considerations when moving :
Some useful resources and references :