English (change)
Migrate your web site or blog to a new server with minimal problems or inaccessibility. This guide steps out a proven relocation procedure.
When I moved my site from my shared host to my shiny new VPS at Linode, this was a concern for me, particularly as I had a continually changing database. Scouring the web, I found some scant instructions but nothing thorough, and no tutorials that gave me confidence. So I asked at the Linode forum, and the process mapped out below is a recap of the advice given by the kind folks there, along with my own experience.
In 20 copy/paste steps .. from zero to hero, blank box to cute-as Linux server.
Scroll down for the full series index.
So, hey, shed shared & viva virtual! Hope it helps. the_guv
.. So, for this process, you can thank Linode forum users btmorex, Lykaon, kirbysdl and hybinet.
This guide refers to a shared-to-VPS move, but can be applied to any server-to-server move.
DON'T TELL YOUR OLD HOST THAT YOU INTEND TO MOVE AWAY.
If you're not sure what type of host you need, VPS Bible Part 1: VPS (Virtual Private Server) vs Shared vs Dedicated will help you choose.
If you're going the unmanaged VPS route, read this bible from top to toe. If you are unmanaged, for the rest of this guide, I'll assume you've built your box. For shared, managed VPS or dedicated, your box is built anyhow, so let's skip on.
Basically, these tell a server to look for a domain.
If your new host doesn't allow DNS configuration, that's pretty poor. Else you're with a shared server, in which case you get what you pay for. For those who can perform DNS administration ..
Add DNS records in your control panel so, for example, with Linode or Slicehost that's done in the DNS Manager. You can refer to VPS Bible Part 9: Add a Domain Zone to Your VPS for details and an explanatory video. Give everything a really low TTL (time to live) value. If you have any MX or other DNS records with your current host, replicate those.
Don't worry, this doesn't make your domain resolve to the new host prematurely, but does prepare it for the migration.
Duplicate your site or blog's file structure on the new server, create & link any databases and import your data within.
Most of these tutorials have video guides as well as the copy/paste how-to. Note: some are Nginx-centric, but that's generally regarded as the most efficient web server anyhow.
Top trick, this. You can alter a file on your PC to redirect your URI to the new server, just for you. This doesn't effect the original site, nor its general traffic (unless they've changed their host files too!)
Goto my c: > windows > system32 > drivers > etc and open hosts with a text editor.
Goto etc > and open hosts with a text editor.
I don't know. Please lemme know!
You'll know it's the correct file because it'll have an entry or two like:-
127.0.0.1 localhost
... and that is the format you want for the new lines you have to add to the file. So add something like:-
12.34.56.78 domain.com 12.34.56.78 www.domain.com
... swapping the IP for your new IP, and the domain for yours.
Upon saving the file, when you surf to domain.com, instead of taking you to your old server, it will take you to the new one, and you can fully test your site's functionality.
(I told you that was top
)
NOW TEST YOUR NEW SITE'S FUNCTIONALITY.
But don't administer the wrong site: after testing, don't forget to delete the new hosts entry, else comment it out with a # at the beginning of the line. And restart your web browser.
Move your email accounts from your current host.
If you want a simple, spam-free solution with no web server resource cost (ie no personal mail server), check out the VPS Bible Part 18: Google Apps for Domain-Specific Email.
Test your email.
This is the key to a seamless move, which is particularly important if, for example, you host a forum or receive a lot of blog comments.
What we're going to do is to set up your new host to resolve the domain call to your old host. Basically, this eliminates the possibility of writing to more than one database while, for example, the nameservers propagate or Google's global servers refresh your new domain details.
In the new server's DNS settings, add two A/AAAA records using these guidelines:-
| Hostname | IP | TTL (Time to Live) |
|---|---|---|
| domain.com | old web host IP address | shortest option |
| www.domain.com | old web host IP address | shortest option |
When you save your options, you may find one of the hostname fields is blank. That's normal.
Goto your domain registrar account and look for the Nameserver option. Renew the data.
For example, with Linode, bless, change to ns1.linode.com, ns2.linode.com, ns3.linode.com and ns4.linode.com. You'll find your new web host's nameserver details easily enough.
Now we are awaiting full propagation, at all server points around the world. I have no idea how long that takes, but about 72 hours is generally reckoned, so allow for 4-5 days to be safe.
Go back to those A Records we created, replacing the old host IP to your new host IP. Set the TTL to the shortest possible 'time to live'. But before you click OK ..
Take a final backup of your old database and import the data into your new one.
.. And now you can click OK on those new A records.
While your A record changes will update the new host nameservers within minutes, it takes up to 72 hours for full web-wide propagation. You may find new data records in the old database, so you'll have to export and import those strays.
Note: At Linode, updated DNS records take effect every 15 minutes. So if you edit an A record at 2:32, it'll take until 2:45, plus the time period specified in the TTL, for the update to be visible to the world. Careful timing will give you the least downtime.
If you completed the previous testing properly, there should be no surprises. Then again ..
After the time period specified in the TTL, check your site to ensure everything works. Because your local nameservers may not yet have resolved with the new A record data, and so that you can be sure you're looking at the new, not the old, web application, use the host file trick.
Whatever kind of web host you've moved to, you can cancel the old host 4-5 days after moving day. Your breathing will gradually shallow out. Take tea!
This series is pretty much complete, and I'm definitely gonna be spending more time down the pub.
However, as a round-up, VPS Bible Part 20: Blogroll, Links, Credits, Resources will list some of the best resources on the web for anything Linux or VPS. Plus it's a bit of a thank you to all those whose advice has helped me to go from VPS newbie, a few months ago to, well, senior newbie. Hey, you be the judge, but I sure ain't a sysmin.
By way of a follow up, and as promised in VPS Bible Part 17: Nginx Control Panel Workarounds, I'll be publishing some appendix guides too, showing you how to administer your VPS without relying on bloatware like cPanel.
Here's the you-know-what ...
Serve multi sites & blogs on a budget .. at the fastest possible speed .. with the least downtime .. in the most secure environment .. and future-proofed for easy admin.
That's what the VPS Bible is about, stepped out in simple copy & paste guides.
From high traffic WordPress blogs to startup web hosts, here's what you need.
Set it up? Click here for the 21 part follow-up .. V-P-S Admin
News Set Up Unmanaged VPS (4 Newbies) – Part 19: Moving Day! How to Move Your Blog or Site | Web 2.0 Designer July 1st, 2009 at 3:11 am
[...] Read more: Set Up Unmanaged VPS (4 Newbies) – Part 19: Moving Day! How to Move Your Blog or Site [...]
News Set Up Unmanaged VPS (4 Newbies) – Part 19: Moving Day! How to Move Your Blog or Site | Web 2.0 Designer July 1st, 2009 at 3:12 am
[...] See the rest here: Set Up Unmanaged VPS (4 Newbies) – Part 19: Moving Day! How to Move Your Blog or Site [...]
Bob September 2nd, 2009 at 9:38 pm
FYI: On a Mac I see this which is logical since it is a Linux system:
$cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
the_guv September 16th, 2009 at 8:26 pm
@Bob .. cheers for the tip. Course, I run Linux cos i can't afford a Mac
Yendis September 19th, 2009 at 9:40 pm
Hi Guv, Thanks for the response. I just used that top tip and it works!
However, I am seeing the nginx welcome page. I reckon I should be seeing my uploaded files so I guess something is not right somewhere but where?
The other thing I wanna ask about is 'create & link any databases and import your data within'. This I know how to do with phpMyAdmin. Have you done a guide to do this with CLI? Do you suggest installing phpMyAdmin on my VPS? Is there a guide for that?
Yendis September 20th, 2009 at 1:17 am
Aah. As I am not using WordPress I sort of skipped part 14. I've now used it to guide me in setting up my database. I'm trying to set up phpMyAdmin but it requires me to browser to its directory which I can't do at the moment. I'm still stuck with the nginx welcome page.
the_guv September 23rd, 2009 at 10:18 am
@Yendis .. dude, keep ploughing thru! Just copy/paste, don't divert from 1-20, and you can't go wrong.
Yendis October 10th, 2009 at 5:11 am
Hey Guv,
I've been successful in serving a clone of my site on my Linode VPS. The IP I have is 97.107.XX.XXX. I can't change the nameservers for the main site I want to move myself. I have to instruct the domain registerer. I asked that they 'change the nameservers to ns1.linode.com, ns2. . . This they seem to have done but the Domain DNS details page now displays:
MX Records
0 mydomain.com 74.54.XXX.XXX
Nameservers
ns2.linode.com 65.19.178.10
ns3.linode.com 75.127.96.10
ns4.linode.com 207.192.70.10
ns1.linode.com 69.93.127.10
WWW verwijzingen
mydomain.com 74.54.XXX.XXX
http://www.mydomain.com mydomain.com
The 74.54.XXX.XXX IP is that of the server I am moving the site from.
I'm pretty sure these settings won't work.
I reckon I need to tell them to change the old IPs to my new one. Would that be all? Are those IPs for the Linode nameservers correct?
Cheers.
the_guv October 10th, 2009 at 7:48 pm
Hi Yendis,
Well, the NS records are right, for sure (and the order of them is irrelevant too, as far as I know). Maybe this is just a question of a little time for propagation. Hmmn. Well, I'm sure there are other ways to do this but maybe the easiest ..
Setup a dummy DNS zone, as explained in Add a Domain Zone to Your VPS. Call the domain anything-you-like.com and have Linode's DNS manager set the records for you, as prompted in the options. Then copy the variables generated in the editable summary page to your real zone, and wait for propagation (which is really fast with Linode, their db updates every quarter-hour).
Then again, the way to find your IP, otherwise, is either by checking on the DNS Manager and looking at the page where you edited your reverse DNS setting (you did that in the Postfix setup bit) .. or just by typing ifconfig in the terminal (not ipconfig, that's Windoze.)
Cloned it huh .. that sounds like another tute-to-go ..