[{"data":1,"prerenderedAt":228},["ShallowReactive",2],{"art-migrar-vps-sin-downtime-en":3},{"id":4,"title":5,"author":6,"body":7,"date":214,"description":215,"extension":216,"image":217,"meta":218,"navigation":219,"path":220,"seo":221,"stem":222,"tags":223,"__hash__":227},"blogEn\u002Fen\u002Fblog\u002Fmigrar-vps-sin-downtime.md","How to migrate a VPS with zero downtime: the method we have been applying for years","Paco Cubel",{"type":8,"value":9,"toc":199},"minimark",[10,15,19,22,26,31,34,53,56,60,68,81,88,92,95,113,116,132,139,143,146,150,176,180,183,187,190],[11,12,14],"h2",{"id":13},"why-this-matters","Why this matters",[16,17,18],"p",{},"Any business that lives online has a recurring nightmare: that the website goes down right when a campaign starts, on a long weekend or the day the big customer decides to come in. And migrating the server is one of the moments where that risk concentrates the most.",[16,20,21],{},"The good news is that most migrations can be done without anyone noticing. The bad news is that they require method, not improvisation.",[11,23,25],{"id":24},"the-four-phase-method","The four-phase method",[27,28,30],"h3",{"id":29},"_1-audit-of-the-current-environment","1. Audit of the current environment",[16,32,33],{},"Before touching anything, we list:",[35,36,37,41,44,47,50],"ul",{},[38,39,40],"li",{},"Exact versions of every piece of software (PHP, MySQL, Nginx\u002FApache, Node.js, etc.).",[38,42,43],{},"System dependencies (PHP extensions, native libraries, APT packages).",[38,45,46],{},"External services calling the server (third-party cron jobs, webhooks, integrations).",[38,48,49],{},"Volume of data on disk and in the database.",[38,51,52],{},"Firewall rules, SSL certificates and current DNS.",[16,54,55],{},"Without this map, any migration is a lottery.",[27,57,59],{"id":58},"_2-parallel-replication","2. Parallel replication",[16,61,62,63,67],{},"We build the new server in parallel, ",[64,65,66],"strong",{},"without touching production",". We replicate the data:",[35,69,70,78],{},[38,71,72,73,77],{},"Files via ",[74,75,76],"code",{},"rsync -avz --delete",", scheduling several passes until the delta is minimal.",[38,79,80],{},"Database with a full dump and, on large databases, binlog replication so the destination is almost up to date.",[16,82,83,84,87],{},"We test the new website on an internal domain or a tweaked ",[74,85,86],{},"\u002Fetc\u002Fhosts",". We validate every flow: user signup, forms, payments where applicable, external integrations.",[27,89,91],{"id":90},"_3-cutover-plan-with-rollback","3. Cutover plan (with rollback)",[16,93,94],{},"This is the secret. Before the cutover:",[35,96,97,103,110],{},[38,98,99,102],{},[64,100,101],{},"We drop the DNS TTL to 5 minutes"," 24 hours in advance so propagation is almost immediate.",[38,104,105,106,109],{},"We write a ",[64,107,108],{},"documented rollback plan",": what changes, in what order, and how to undo it if anything goes wrong.",[38,111,112],{},"We notify the customer of the exact moment and the low-risk window.",[16,114,115],{},"On cutover day, we run:",[117,118,119,126,129],"ol",{},[38,120,121,122,125],{},"A final ",[74,123,124],{},"rsync"," pass with the site in read-only mode (just a few minutes).",[38,127,128],{},"DNS switch to the new server.",[38,130,131],{},"Immediate verification: the site responds, the form works, the SSL certificate is valid.",[16,133,134,135,138],{},"If everything is fine, we move on. If anything fails, ",[64,136,137],{},"we revert the DNS"," and the website continues working as before on the old server, without anyone noticing.",[27,140,142],{"id":141},"_4-post-cutover-validation","4. Post-cutover validation",[16,144,145],{},"24 hours watching logs, uptime monitoring and metrics. Any odd behaviour is diagnosed live. When we have several green days, we shut down the old server (not before).",[11,147,149],{"id":148},"common-mistakes-to-avoid","Common mistakes to avoid",[35,151,152,158,164,170],{},[38,153,154,157],{},[64,155,156],{},"Migrating without prior replication",": moving live is a coin flip. Always clone first, test, then cut over.",[38,159,160,163],{},[64,161,162],{},"Forgetting cron jobs",": cron jobs on the old server keep firing if you don’t disable them, and can produce duplicates or repeat charges.",[38,165,166,169],{},[64,167,168],{},"Not testing real forms",": sending a test email from the new server isn’t the same as receiving it on the customer’s account.",[38,171,172,175],{},[64,173,174],{},"Not lowering TTL early enough",": if DNS takes 24 hours to propagate, half of the traffic goes to the old site for that long.",[11,177,179],{"id":178},"how-long-it-usually-takes","How long it usually takes",[16,181,182],{},"A standard small-VPS migration is done in 2–3 weeks: one for audit and replication, one for testing, one for cutover and support. Don’t aim to do it over a weekend, except for trivial cases.",[11,184,186],{"id":185},"wrap-up","Wrap-up",[16,188,189],{},"Migrating a VPS without downtime isn’t magic: it’s discipline. The hardest part isn’t technical, it’s the upfront planning. On cutover day you only execute what has already been validated.",[16,191,192,193,198],{},"If you have a pending migration and would rather have a team with real scars handle it, ",[194,195,197],"a",{"href":196},"\u002Fen\u002Fcontacto\u002F","drop us a line"," and we’ll tell you how we’d approach yours.",{"title":200,"searchDepth":201,"depth":201,"links":202},"",2,[203,204,211,212,213],{"id":13,"depth":201,"text":14},{"id":24,"depth":201,"text":25,"children":205},[206,208,209,210],{"id":29,"depth":207,"text":30},3,{"id":58,"depth":207,"text":59},{"id":90,"depth":207,"text":91},{"id":141,"depth":207,"text":142},{"id":148,"depth":201,"text":149},{"id":178,"depth":201,"text":179},{"id":185,"depth":201,"text":186},"2026-04-22","A poorly planned server migration costs money. Here is the step-by-step method we use at Atenea Systems to move websites and services without the end customer noticing a thing.","md","\u002Fog\u002Fog-default.png",{},true,"\u002Fen\u002Fblog\u002Fmigrar-vps-sin-downtime",{"title":5,"description":215},"en\u002Fblog\u002Fmigrar-vps-sin-downtime",[224,225,226],"Migrations","Linux","Servers","zlS-WNZvDizLEWkPGcuUEU63uGoCjD6U5AnCOJewi60",1777289997056]