Recently I migrated my blogs from AWS EC2 micro instance to a DigitalOcean 512MB VPS. Migration was surprisingly easy. All I had to do was sync everything from EC2 instance to DigitalOcean VPS using rsync provided I use Ubuntu 12.04 LTS server on both locations. This is what I did step-by-step.
- Create a DititalOcean droplet with similar OS and version as the EC2 instance (in my case Ubuntu 12.04 LTS 32bit with LAMP stack pre-installed)
- Generate ssh keypairs in the newly created DigitalOcean droplet and copy the public key to” ~/.ssh/authorized_keys” of the root user of the EC2 instance. (we should be able to login to EC2 intance from DigitalOcean droplet for rsync migration to work. It’s easier to use the root account in this case because we need to migrate config files which only root can access. Using rsync with default ‘ubuntu’ user having sudo privileges is difficult )
########################################################### # # Login to DigitalOcean droplet, and generate ssh keypair ssh-keygen -t rsa #Complete the keygeneration process #Now back from your laptop/local-control-pc # Copy generated public-key to local machine scp root@digitalceansvr:~/.ssh/id_rsa.pub ~/ #Because by default EC2 instances use 'ubuntu' user with sudo we have to #copy the public key to 'ubuntu' user first and then copy it again to 'root' scp ~/id_rsa.pub ubuntu@ec2server:~ # now login to EC2 instance and issue these commands ssh ubuntu@ec2server #following commands are given from EC2 instance sudo mkdir /root/.ssh sudo cat ~/id_rsa.pub > /root/.ssh/authorized_keys sudo chmod 600 /root/.ssh/authorized_keys
- Now you should be able to login to Amazon EC2 instance’s root account from DigitalOcean droplet.
- Before proceeding to next step, do an ‘apt-get update/upgrade’ on both EC2 instance and DitgitalOcean droplet. Also install any missing apache/php/mysql modules compared to EC2 in DigitalOcean droplet.
- The next step is to synchronize everything with rsync-via-ssh.
############################################################# ## These commands should be given from the DigitalOcean droplet ## First stop LAMP stack service apache2 stop service mysql stop ## Then copy the config files. ## Here --delete option is used to make an exact copy from EC2 to ## DigitalOcean deleting any additional files in DigitalOcean droplet ## Copy all required config files as necessary rsync -avzhe ssh --progress --delete root@ec2server:/etc/phpmyadmin /etc/ rsync -avzhe ssh --progress --delete root@ec2server:/etc/php5 /etc/ rsync -avzhe ssh --progress --delete root@ec2server:/etc/apache2 /etc/ rsync -avzhe ssh --progress --delete root@ec2server:/etc/ssl /etc/ rsync -avzhe ssh --progress --delete root@ec2server:/etc/mysql /etc/ ## Finally copy www directory and mysql databases ## Here --delete option is used to make an exact copy from EC2 to ## DigitalOcean deleting any additional files in DigitalOcean droplet rsync -avzhe ssh --progress --delete root@ec2server:/var/lib/mysql /var/lib/ rsync -avzhe ssh --progress --delete root@ec2server:/var/www /var/ ## Now start LAMP stack service apache2 start service mysql start
- Voila! Everything should be up-and-running now!
This is my referral code for DigitalOcean if you are interested in testing out DigitalOcean cloud servers:
Hi, in case it’s useful to you next time, you might want to try using ServerPilot (https://serverpilot.io) to set up the LAMP stack on a DigitalOcean server. That way, you can use ServerPilot to do ongoing configuration like adding new sites and databases. It also keeps the server’s packages updated.
I’m one of the founders. If you have any questions or feedback, please shoot me an email.
Thanks,
Justin