[{"data":1,"prerenderedAt":737},["ShallowReactive",2],{"blog-en":3},[4,229,474],{"id":5,"title":6,"author":7,"body":8,"date":215,"description":216,"extension":217,"image":218,"meta":219,"navigation":220,"path":221,"seo":222,"stem":223,"tags":224,"__hash__":228},"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":9,"value":10,"toc":200},"minimark",[11,16,20,23,27,32,35,54,57,61,69,82,89,93,96,114,117,133,140,144,147,151,177,181,184,188,191],[12,13,15],"h2",{"id":14},"why-this-matters","Why this matters",[17,18,19],"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.",[17,21,22],{},"The good news is that most migrations can be done without anyone noticing. The bad news is that they require method, not improvisation.",[12,24,26],{"id":25},"the-four-phase-method","The four-phase method",[28,29,31],"h3",{"id":30},"_1-audit-of-the-current-environment","1. Audit of the current environment",[17,33,34],{},"Before touching anything, we list:",[36,37,38,42,45,48,51],"ul",{},[39,40,41],"li",{},"Exact versions of every piece of software (PHP, MySQL, Nginx\u002FApache, Node.js, etc.).",[39,43,44],{},"System dependencies (PHP extensions, native libraries, APT packages).",[39,46,47],{},"External services calling the server (third-party cron jobs, webhooks, integrations).",[39,49,50],{},"Volume of data on disk and in the database.",[39,52,53],{},"Firewall rules, SSL certificates and current DNS.",[17,55,56],{},"Without this map, any migration is a lottery.",[28,58,60],{"id":59},"_2-parallel-replication","2. Parallel replication",[17,62,63,64,68],{},"We build the new server in parallel, ",[65,66,67],"strong",{},"without touching production",". We replicate the data:",[36,70,71,79],{},[39,72,73,74,78],{},"Files via ",[75,76,77],"code",{},"rsync -avz --delete",", scheduling several passes until the delta is minimal.",[39,80,81],{},"Database with a full dump and, on large databases, binlog replication so the destination is almost up to date.",[17,83,84,85,88],{},"We test the new website on an internal domain or a tweaked ",[75,86,87],{},"\u002Fetc\u002Fhosts",". We validate every flow: user signup, forms, payments where applicable, external integrations.",[28,90,92],{"id":91},"_3-cutover-plan-with-rollback","3. Cutover plan (with rollback)",[17,94,95],{},"This is the secret. Before the cutover:",[36,97,98,104,111],{},[39,99,100,103],{},[65,101,102],{},"We drop the DNS TTL to 5 minutes"," 24 hours in advance so propagation is almost immediate.",[39,105,106,107,110],{},"We write a ",[65,108,109],{},"documented rollback plan",": what changes, in what order, and how to undo it if anything goes wrong.",[39,112,113],{},"We notify the customer of the exact moment and the low-risk window.",[17,115,116],{},"On cutover day, we run:",[118,119,120,127,130],"ol",{},[39,121,122,123,126],{},"A final ",[75,124,125],{},"rsync"," pass with the site in read-only mode (just a few minutes).",[39,128,129],{},"DNS switch to the new server.",[39,131,132],{},"Immediate verification: the site responds, the form works, the SSL certificate is valid.",[17,134,135,136,139],{},"If everything is fine, we move on. If anything fails, ",[65,137,138],{},"we revert the DNS"," and the website continues working as before on the old server, without anyone noticing.",[28,141,143],{"id":142},"_4-post-cutover-validation","4. Post-cutover validation",[17,145,146],{},"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).",[12,148,150],{"id":149},"common-mistakes-to-avoid","Common mistakes to avoid",[36,152,153,159,165,171],{},[39,154,155,158],{},[65,156,157],{},"Migrating without prior replication",": moving live is a coin flip. Always clone first, test, then cut over.",[39,160,161,164],{},[65,162,163],{},"Forgetting cron jobs",": cron jobs on the old server keep firing if you don’t disable them, and can produce duplicates or repeat charges.",[39,166,167,170],{},[65,168,169],{},"Not testing real forms",": sending a test email from the new server isn’t the same as receiving it on the customer’s account.",[39,172,173,176],{},[65,174,175],{},"Not lowering TTL early enough",": if DNS takes 24 hours to propagate, half of the traffic goes to the old site for that long.",[12,178,180],{"id":179},"how-long-it-usually-takes","How long it usually takes",[17,182,183],{},"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.",[12,185,187],{"id":186},"wrap-up","Wrap-up",[17,189,190],{},"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.",[17,192,193,194,199],{},"If you have a pending migration and would rather have a team with real scars handle it, ",[195,196,198],"a",{"href":197},"\u002Fen\u002Fcontacto\u002F","drop us a line"," and we’ll tell you how we’d approach yours.",{"title":201,"searchDepth":202,"depth":202,"links":203},"",2,[204,205,212,213,214],{"id":14,"depth":202,"text":15},{"id":25,"depth":202,"text":26,"children":206},[207,209,210,211],{"id":30,"depth":208,"text":31},3,{"id":59,"depth":208,"text":60},{"id":91,"depth":208,"text":92},{"id":142,"depth":208,"text":143},{"id":149,"depth":202,"text":150},{"id":179,"depth":202,"text":180},{"id":186,"depth":202,"text":187},"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":6,"description":216},"en\u002Fblog\u002Fmigrar-vps-sin-downtime",[225,226,227],"Migrations","Linux","Servers","zlS-WNZvDizLEWkPGcuUEU63uGoCjD6U5AnCOJewi60",{"id":230,"title":231,"author":7,"body":232,"date":463,"description":464,"extension":217,"image":218,"meta":465,"navigation":220,"path":466,"seo":467,"stem":468,"tags":469,"__hash__":473},"blogEn\u002Fen\u002Fblog\u002Fwordpress-lento-2026.md","My WordPress is slow in 2026: how to actually diagnose and fix it",{"type":9,"value":233,"toc":451},[234,238,241,244,248,251,281,284,288,291,296,307,311,314,318,329,333,336,340,362,366,369,373,384,388,391,395,420,424,435,439,442,444],[12,235,237],{"id":236},"the-wordpress-problem-in-2026","The WordPress problem in 2026",[17,239,240],{},"WordPress still powers around 40 % of the web. And many of those WordPress sites are slow. If your site is slow, customers leave: each extra second of loading costs sales and Google rankings.",[17,242,243],{},"Good news: most slow WordPress sites are slow for the same three or four reasons. Let’s go through them.",[12,245,247],{"id":246},"diagnose-before-you-patch","Diagnose before you patch",[17,249,250],{},"Before touching anything, measure:",[36,252,253,265,275],{},[39,254,255,258,259,264],{},[65,256,257],{},"PageSpeed Insights"," (",[195,260,261],{"href":261,"rel":262},"https:\u002F\u002Fpagespeed.web.dev",[263],"nofollow",") — real Google data.",[39,266,267,270,271,274],{},[65,268,269],{},"GTmetrix"," or ",[65,272,273],{},"WebPageTest"," — for detailed waterfalls.",[39,276,277,280],{},[65,278,279],{},"Query Monitor"," (plugin) — to see which queries take the longest.",[17,282,283],{},"If you don’t measure, you’re not fixing: you’re guessing.",[12,285,287],{"id":286},"cause-1-too-many-plugins","Cause #1: too many plugins",[17,289,290],{},"The average plugin adds HTTP requests, scripts and SQL queries. A WordPress with 40 active plugins rarely loads fast, no matter how good the machine is.",[17,292,293],{},[65,294,295],{},"What to do:",[36,297,298,301,304],{},[39,299,300],{},"Disable plugins you haven’t used in months.",[39,302,303],{},"Replace plugins that do 3 small things with one that does all of them well.",[39,305,306],{},"If you need something custom, consider a tailored development instead of installing yet another plugin.",[12,308,310],{"id":309},"cause-2-bloated-theme","Cause #2: bloated theme",[17,312,313],{},"Many commercial themes (the all-in-one ones bundled with 50 demos) load libraries you don’t need: they slow everything down and are hard to optimise.",[17,315,316],{},[65,317,295],{},[36,319,320,323,326],{},[39,321,322],{},"Check what scripts and CSS load on each page using DevTools (Network tab).",[39,324,325],{},"If there are 30 CSS files or 25 JS files, the theme is overloaded.",[39,327,328],{},"Consider migrating to a lightweight theme (GeneratePress, Astra, Kadence) or a custom-built one.",[12,330,332],{"id":331},"cause-3-heavy-images","Cause #3: heavy images",[17,334,335],{},"A 3 MB image drags any server. And we still see sites in 2026 with images uploaded at 4000×3000 with no optimisation.",[17,337,338],{},[65,339,295],{},[36,341,342,345,355],{},[39,343,344],{},"Compress on upload: ShortPixel, EWWW Image Optimizer or external services like TinyPNG.",[39,346,347,348,270,351,354],{},"Convert to ",[65,349,350],{},"WebP",[65,352,353],{},"AVIF"," (typically 30–60 % smaller than JPG).",[39,356,357,358,361],{},"Serve images with ",[75,359,360],{},"loading=\"lazy\""," and proper dimensions.",[12,363,365],{"id":364},"cause-4-shared-hosting","Cause #4: shared hosting",[17,367,368],{},"Some shared hosting plans share resources with hundreds of websites. If a noisy neighbour misbehaves, your site goes down with them.",[17,370,371],{},[65,372,295],{},[36,374,375,378,381],{},[39,376,377],{},"If the website generates real revenue, consider a dedicated VPS. It costs more, but it responds better.",[39,379,380],{},"Configure application cache (Redis or memcached), page cache (WP Rocket or LiteSpeed Cache) and a CDN (free Cloudflare already goes a long way).",[39,382,383],{},"Keep PHP on a modern version (8.3 or higher). Each version bump improves performance.",[12,385,387],{"id":386},"cause-5-dirty-database","Cause #5: dirty database",[17,389,390],{},"After years, the database accumulates post revisions, expired transients, spam comments and leftovers from uninstalled plugins.",[17,392,393],{},[65,394,295],{},[36,396,397,407,417],{},[39,398,399,400,270,403,406],{},"A plugin like ",[65,401,402],{},"WP-Optimize",[65,404,405],{},"Advanced Database Cleaner"," for the cleanup.",[39,408,409,410,413,414],{},"Limit revisions in ",[75,411,412],{},"wp-config.php",": ",[75,415,416],{},"define('WP_POST_REVISIONS', 5);",[39,418,419],{},"Delete expired transients regularly.",[12,421,423],{"id":422},"what-wont-save-you","What WON’T save you",[36,425,426,429,432],{},[39,427,428],{},"Buying 5 optimisation plugins at once. They step on each other.",[39,430,431],{},"Activating everything a random tutorial says \"works fine\".",[39,433,434],{},"Switching hosting without measuring first.",[12,436,438],{"id":437},"how-much-can-be-improved","How much can be improved",[17,440,441],{},"We have seen cases where a slow website moves to good loading times just with cleanup, image optimisation and a better hosting setup. Without touching the design.",[12,443,187],{"id":186},[17,445,446,447,450],{},"WordPress can be fast in 2026. What it needs is order, not more tools. If your site is stuck and you’re not sure where to start, ",[195,448,449],{"href":197},"ask us for an audit"," and we’ll tell you what to fix in priority order.",{"title":201,"searchDepth":202,"depth":202,"links":452},[453,454,455,456,457,458,459,460,461,462],{"id":236,"depth":202,"text":237},{"id":246,"depth":202,"text":247},{"id":286,"depth":202,"text":287},{"id":309,"depth":202,"text":310},{"id":331,"depth":202,"text":332},{"id":364,"depth":202,"text":365},{"id":386,"depth":202,"text":387},{"id":422,"depth":202,"text":423},{"id":437,"depth":202,"text":438},{"id":186,"depth":202,"text":187},"2026-04-18","If your WordPress takes more than 3 seconds to load, you’re losing customers and Google ranking. Here are the real causes in 2026 and how to fix them without installing 17 more plugins.",{},"\u002Fen\u002Fblog\u002Fwordpress-lento-2026",{"title":231,"description":464},"en\u002Fblog\u002Fwordpress-lento-2026",[470,471,472],"WordPress","Performance","SEO","6gsvbUsbo_0meLcltS0nGzpsvfJf6r8QsZ5iQknPYU4",{"id":475,"title":476,"author":7,"body":477,"date":728,"description":729,"extension":217,"image":218,"meta":730,"navigation":220,"path":731,"seo":732,"stem":733,"tags":734,"__hash__":736},"blogEn\u002Fen\u002Fblog\u002Fnginx-vs-apache-php-2026.md","Nginx vs Apache for PHP in 2026: which one to pick and why",{"type":9,"value":478,"toc":718},[479,483,490,493,497,515,518,522,532,539,543,573,577,609,613,620,623,648,651,655,658,696,698,704,711],[12,480,482],{"id":481},"the-debate-is-still-alive","The debate is still alive",[17,484,485,486,489],{},"\"What’s better for PHP, Nginx or Apache?\" is a question we’ve been answering for years in consulting. The honest answer is: ",[65,487,488],{},"it depends",". And the right answer in 2026 has changed compared to 2018.",[17,491,492],{},"Let’s break it down.",[12,494,496],{"id":495},"how-they-work-short-version","How they work (short version)",[36,498,499,509],{},[39,500,501,504,505,508],{},[65,502,503],{},"Apache"," processes each request in a dedicated process or thread. With ",[75,506,507],{},"mod_php"," it runs PHP directly, which is convenient but consumes a lot of memory.",[39,510,511,514],{},[65,512,513],{},"Nginx"," is asynchronous and offloads PHP to a separate process (PHP-FPM). This lets it serve thousands of concurrent requests with very little memory.",[17,516,517],{},"Under heavy static traffic, Nginx wins. Under very high concurrency with PHP, Nginx + PHP-FPM also wins, generally by a comfortable margin.",[12,519,521],{"id":520},"what-changed-in-2026","What changed in 2026",[17,523,524,525,528,529,531],{},"Apache has matured. ",[65,526,527],{},"Apache event MPM + PHP-FPM"," performs much better than the old ",[75,530,507],{},". The gap with Nginx isn’t enormous any more in many cases, especially with medium workloads.",[17,533,534,535,538],{},"The choice today isn’t purely about performance, it’s about ",[65,536,537],{},"operations",".",[12,540,542],{"id":541},"when-to-pick-apache","When to pick Apache",[36,544,545,555,561,567],{},[39,546,547,554],{},[65,548,549,550,553],{},"Shared hosting or sites with many ",[75,551,552],{},".htaccess"," files",": Apache handles them out of the box, no need to touch global config.",[39,556,557,560],{},[65,558,559],{},"Older CMSes"," that come tuned for Apache (some WordPress plugins, certain PrestaShops).",[39,562,563,566],{},[65,564,565],{},"Team that already knows Apache",": switching to Nginx because it’s trendy and then not knowing how to operate the server is worse than running Apache properly.",[39,568,569,572],{},[65,570,571],{},"Complex existing mod_rewrite rules"," that would take days to rewrite in Nginx.",[12,574,576],{"id":575},"when-to-pick-nginx","When to pick Nginx",[36,578,579,585,591,597,603],{},[39,580,581,584],{},[65,582,583],{},"Heavy concurrent traffic",": sites with high traffic peaks, especially if they serve a lot of static content alongside PHP.",[39,586,587,590],{},[65,588,589],{},"Static or JAMstack sites",": Nginx serves pre-rendered HTML effortlessly.",[39,592,593,596],{},[65,594,595],{},"Memory-constrained servers",": Nginx makes better use of limited resources.",[39,598,599,602],{},[65,600,601],{},"Modern stacks"," with load balancers, reverse proxy, frontline caches.",[39,604,605,608],{},[65,606,607],{},"WebSockets, HTTP\u002F2 and HTTP\u002F3",": Nginx has excellent support and an easier configuration.",[12,610,612],{"id":611},"what-matters-more-than-the-engine","What matters more than the engine",[17,614,615,616,619],{},"In most real websites we see, the bottleneck ",[65,617,618],{},"isn’t Apache or Nginx",": it’s a poorly configured PHP-FPM, MySQL with no indexes, unoptimised images or missing application cache.",[17,621,622],{},"Switching from Apache to Nginx and expecting the site to be twice as fast without touching anything else usually disappoints. It’s worth more to:",[118,624,625,632,635,642,645],{},[39,626,627,628,631],{},"Enable ",[65,629,630],{},"OPcache"," in PHP.",[39,633,634],{},"Move PHP up to 8.3 or higher.",[39,636,637,638,641],{},"Use ",[65,639,640],{},"object caching"," (Redis, memcached).",[39,643,644],{},"Index the database properly.",[39,646,647],{},"Serve images via CDN.",[17,649,650],{},"If after that you still hit performance issues, then it makes sense to rethink the front layer.",[12,652,654],{"id":653},"minimum-recommended-setup-2026","Minimum recommended setup (2026)",[17,656,657],{},"In both Apache and Nginx:",[36,659,660,669,675,681,690],{},[39,661,662,665,666,668],{},[65,663,664],{},"PHP-FPM"," (not ",[75,667,507],{},").",[39,670,671,674],{},[65,672,673],{},"HTTP\u002F2"," enabled and SSL certificate via Let’s Encrypt.",[39,676,677,680],{},[65,678,679],{},"Brotli compression"," alongside gzip.",[39,682,683,686,687,668],{},[65,684,685],{},"Proper cache headers"," for static files (1 year with ",[75,688,689],{},"immutable",[39,691,692,695],{},[65,693,694],{},"Slow query log"," enabled to spot DB bottlenecks.",[12,697,187],{"id":186},[17,699,700,701],{},"In 2026 there is no clear \"winner\" between Apache and Nginx for PHP. There is a more useful question: ",[65,702,703],{},"what does your team know and what runs better in production for you?",[17,705,706,707,710],{},"If you’re starting from scratch, ",[65,708,709],{},"Nginx + PHP-FPM"," is usually more resource-efficient and easier to configure for modern use cases. If you’re coming from Apache and everything works, don’t migrate just because of trends: invest that time in optimising PHP, the database and caching.",[17,712,713,714,717],{},"If you have a server with PHP that runs slow and you don’t know where to look, ",[195,715,716],{"href":197},"we can audit it for you",", no strings attached.",{"title":201,"searchDepth":202,"depth":202,"links":719},[720,721,722,723,724,725,726,727],{"id":481,"depth":202,"text":482},{"id":495,"depth":202,"text":496},{"id":520,"depth":202,"text":521},{"id":541,"depth":202,"text":542},{"id":575,"depth":202,"text":576},{"id":611,"depth":202,"text":612},{"id":653,"depth":202,"text":654},{"id":186,"depth":202,"text":187},"2026-04-10","The Nginx vs Apache debate has been around for years. In 2026 the answer isn’t the same as in 2018. Here’s when to pick each one and why benchmarks don’t tell the whole story.",{},"\u002Fen\u002Fblog\u002Fnginx-vs-apache-php-2026",{"title":476,"description":729},"en\u002Fblog\u002Fnginx-vs-apache-php-2026",[227,226,735],"PHP","jsbVZ4mTxHgWMbC5d5ZfrLyVZEMCpYuxUwdLPoOP8cs",1777289996697]