{"id":109,"date":"2025-10-02T00:00:00","date_gmt":"2025-10-01T22:00:00","guid":{"rendered":"https:\/\/helloblog.io\/sk\/zero-downtime-deployment-wordpress-trellis-atomic-release\/"},"modified":"2026-01-20T06:33:00","modified_gmt":"2026-01-20T05:33:00","slug":"zero-downtime-deployment-wordpress-trellis-atomic-release","status":"publish","type":"post","link":"https:\/\/helloblog.io\/sk\/zero-downtime-deployment-wordpress-trellis-atomic-release\/","title":{"rendered":"Zero-downtime deployment pre WordPress s Trellis: ako funguje \u201eatomic release\u201c v praxi"},"content":{"rendered":"\n<p>V WordPress svete sa deployment \u010dasto berie ako nutn\u00e9 zlo: p\u00e1r s\u00faborov prep\u00edsa\u0165 cez FTP, pr\u00edpadne <code>rsync<\/code>, a d\u00fafa\u0165, \u017ee to nikto pr\u00e1ve neotv\u00e1ra. V modernej aplika\u010dnej praxi je v\u0161ak be\u017en\u00e9, \u017ee deploy prebehne bez v\u00fdpadku a bez medzistavu, v ktorom server servuje mix star\u00fdch a nov\u00fdch s\u00faborov.<\/p>\n\n\n\n<p>Trellis (n\u00e1stroj z ekosyst\u00e9mu Roots, postaven\u00fd na Ansible) m\u00e1 zero-downtime deploymenty pripraven\u00e9 \u201eout of the box\u201c. D\u00f4le\u017eit\u00e9 je aj to, \u017ee Trellis nemus\u00ed\u0161 pou\u017e\u00edva\u0165 na cel\u00fd workflow \u2013 ve\u013ea t\u00edmov ho vyu\u017e\u00edva \u010disto na nasadzovanie Bedrock projektov na r\u00f4znych hostingoch, zatia\u013e \u010do lok\u00e1lne si be\u017eia v prostred\u00ed, ktor\u00e9 im vyhovuje (Valet, Lando, DDEV a pod.).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u010co presne znamen\u00e1 \u201ezero downtime deployment\u201c pri WordPress webe<\/h2>\n\n\n\n<p>Zero downtime deployment znamen\u00e1, \u017ee web je po\u010das cel\u00e9ho nasadenia dostupn\u00fd a funk\u010dn\u00fd. Nie je tam okno, ke\u010f sa postupne prepisuj\u00fa s\u00fabory a pou\u017e\u00edvate\u013e n\u00e1hodou traf\u00ed str\u00e1nku, ktor\u00e1 u\u017e na\u010d\u00edtala nov\u00fd PHP k\u00f3d, ale e\u0161te star\u00e9 assety (alebo naopak).<\/p>\n\n\n\n<p>K\u013e\u00fa\u010dov\u00fd princ\u00edp je <strong>atomic switch<\/strong>: nov\u00fd release sa kompletne priprav\u00ed izolovane a a\u017e ke\u010f je hotov\u00fd, prepne sa na\u0148 naraz. V ide\u00e1lnom pr\u00edpade je to oper\u00e1cia na \u00farovni filesystemu (preklopenie symlinku), ktor\u00e1 je prakticky okam\u017eit\u00e1.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pre\u010do tradi\u010dn\u00fd WordPress deploy tak \u010dasto bol\u00ed<\/h2>\n\n\n\n<p>Najbe\u017enej\u0161ie pr\u00edstupy pri WordPress deployoch maj\u00fa spolo\u010dn\u00fd probl\u00e9m: <strong>menia s\u00fabory priamo v \u017eivom adres\u00e1ri<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>FTP uploady:<\/strong> zmena prebieha po s\u00faboroch. Po\u010das uploadu m\u00f4\u017ee web servova\u0165 kombin\u00e1ciu star\u00fdch a nov\u00fdch s\u00faborov, \u010do vie rozhodi\u0165 \u0161abl\u00f3ny, autoloading aj cache.<\/li>\n\n\n<li><strong>Synchroniz\u00e1cia s\u00faborov (napr. <code>rsync<\/code>):<\/strong> r\u00fdchlej\u0161ie ne\u017e FTP, ale st\u00e1le prepisuje s\u00fabory \u201ein-place\u201c po\u010das toho, ako web be\u017e\u00ed.<\/li>\n\n\n<li><strong>Plugin-based deployment na managed hostingu:<\/strong> pohodln\u00e9, ale \u010dasto s rovnak\u00fdm z\u00e1kladn\u00fdm probl\u00e9mom \u2013 update s\u00faborov priamo na mieste a bez skuto\u010dne okam\u017eit\u00e9ho rollbacku.<\/li>\n\n<\/ul>\n\n\n\n<p>V\u00fdsledok je typicky kombin\u00e1cia troch riz\u00edk: (1) kr\u00e1tkodob\u00e9 rozbitie webu po\u010das deployu, (2) zlo\u017eit\u00fd n\u00e1vrat sp\u00e4\u0165, ke\u010f sa nie\u010do pokaz\u00ed, (3) n\u00e1v\u0161tevn\u00edci m\u00f4\u017eu dosta\u0165 chybu pr\u00e1ve v \u010dase, ke\u010f sa to \u201eprelieva\u201c.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ako to Trellis rie\u0161i: atomic a immutable releases<\/h2>\n\n\n\n<p>Trellis pou\u017e\u00edva model, ktor\u00fd je zn\u00e1my z deployov modern\u00fdch aplik\u00e1ci\u00ed: <strong>atomic deployments<\/strong>. Nasadenie vytvor\u00ed <strong>nov\u00fd release adres\u00e1r<\/strong>, priprav\u00ed ho kompletne bokom a a\u017e na konci prepne web na nov\u00fd release.<\/p>\n\n\n\n<p>Z\u00e1rove\u0148 ide o <strong>immutable<\/strong> pr\u00edstup: ke\u010f je release raz nasaden\u00fd, jeho s\u00fabory sa u\u017e sp\u00e4tne neupravuj\u00fa. Ka\u017ed\u00fd \u010fal\u0161\u00ed deploy vytvor\u00ed \u010fal\u0161\u00ed adres\u00e1r. V\u010faka tomu je rollback trivi\u00e1lny.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Typick\u00e1 adres\u00e1rov\u00e1 \u0161trukt\u00fara na serveri<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/srv\/www\/example.com\/\n\u251c\u2500\u2500 current\/             # symlink na akt\u00edvny release\n\u251c\u2500\u2500 releases\/            # v\u0161etky nasaden\u00e9 releasy\n\u2502   \u251c\u2500\u2500 20250930124530\/\n\u2502   \u251c\u2500\u2500 20250930083045\/\n\u2502   \u2514\u2500\u2500 20250930141622\/  # najnov\u0161\u00ed\n\u251c\u2500\u2500 shared\/              # zdie\u013ean\u00e9 s\u00fabory medzi release-mi\n\u2502   \u2514\u2500\u2500 uploads\/\n\u2514\u2500\u2500 logs\/\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">\/srv\/www\/example.com\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> current\/<\/span><span style=\"color:#6A737D\">             # symlink na akt\u00edvny release<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> releases\/<\/span><span style=\"color:#6A737D\">            # v\u0161etky nasaden\u00e9 releasy<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930124530\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930083045\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930141622\/<\/span><span style=\"color:#6A737D\">  # najnov\u0161\u00ed<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> shared\/<\/span><span style=\"color:#6A737D\">              # zdie\u013ean\u00e9 s\u00fabory medzi release-mi<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> uploads\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> logs\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Najd\u00f4le\u017eitej\u0161\u00ed je adres\u00e1r <code>current<\/code>. V skuto\u010dnosti to nie je \u201eklasick\u00fd\u201c adres\u00e1r, ale <strong>symbolick\u00fd link (symlink)<\/strong>, na ktor\u00fd je nasmerovan\u00fd webserver. Pre pou\u017e\u00edvate\u013ea je jedno, kam ukazuje \u2013 pre Trellis je to prep\u00edna\u010d medzi release-mi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u010co sa deje pri <code>trellis deploy production<\/code><\/h3>\n\n\n\n<p>Pri deployi Trellis typicky prejde nieko\u013eko f\u00e1z (n\u00e1zvy krokov uvid\u00ed\u0161 aj v logu deployu):<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>Initialize:<\/strong> skontroluje\/vytvor\u00ed \u0161trukt\u00faru na serveri a zalo\u017e\u00ed nov\u00fd release adres\u00e1r (\u010dasto pod\u013ea timestampu).<\/li>\n\n\n<li><strong>Update:<\/strong> stiahne najnov\u0161\u00ed k\u00f3d z Git repozit\u00e1ra do do\u010dasn\u00e9ho zdroja \u2013 mimo live webu.<\/li>\n\n\n<li><strong>Prepare:<\/strong> priprav\u00ed s\u00fabory pre nov\u00fd release adres\u00e1r.<\/li>\n\n\n<li><strong>Build:<\/strong> spust\u00ed <code>composer install<\/code> a dotiahne PHP z\u00e1vislosti.<\/li>\n\n\n<li><strong>Share:<\/strong> pripoj\u00ed zdie\u013ean\u00e9 adres\u00e1re a s\u00fabory (typicky <code>uploads<\/code>) zo <code>shared\/<\/code> do nov\u00e9ho release cez symlinky.<\/li>\n\n\n<li><strong>Finalize:<\/strong> prehod\u00ed symlink <code>current<\/code> na nov\u00fd release. Toto je ten \u201eatomic\u201c moment.<\/li>\n\n<\/ol>\n\n\n\n<p>Pointa: k\u00fdm sa v\u0161etko pripravuje, n\u00e1v\u0161tevn\u00edci st\u00e1le id\u00fa na star\u00fd release. A\u017e ke\u010f je nov\u00fd release hotov\u00fd, <code>current<\/code> sa prehod\u00ed a web okam\u017eite za\u010dne servova\u0165 nov\u00e9 s\u00fabory.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Datab\u00e1za je samostatn\u00e1 t\u00e9ma: migr\u00e1cie nie s\u00fa automaticky s\u00fa\u010das\u0165ou deployu<\/h2>\n\n\n\n<p>Je f\u00e9r poveda\u0165, \u017ee zero-downtime v Trellis sa t\u00fdka prim\u00e1rne <strong>k\u00f3du a s\u00faborov<\/strong>. Zmeny datab\u00e1zovej sch\u00e9my (migr\u00e1cie) s\u00fa samostatn\u00fd probl\u00e9m a pod\u013ea dokument\u00e1cie Trellis nie s\u00fa automaticky zahrnut\u00e9 do deploy procesu.<\/p>\n\n\n\n<p>Ak pou\u017e\u00edva\u0161 Acorn (frameworkov\u00fd z\u00e1klad od Roots, ktor\u00fd prin\u00e1\u0161a Laravel \u0161t\u00fdl do WordPress projektu), vie\u0161 pracova\u0165 s <strong>Laravel migrations<\/strong> a napl\u00e1nova\u0165 ich sp\u00fa\u0161\u0165anie ako s\u00fa\u010das\u0165 nasadenia. Pri n\u00e1vrhu migr\u00e1ci\u00ed sa oplat\u00ed myslie\u0165 na kompatibilitu dopredu\/dozadu, aby si minimalizoval riziko probl\u00e9mov pri prechode medzi release-mi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rollback: pre\u010do je to pri atomic deployoch tak\u00e1 ve\u013ek\u00e1 vec<\/h2>\n\n\n\n<p>Ke\u010f ka\u017ed\u00fd deploy vytvor\u00ed plnohodnotn\u00fd, oddelen\u00fd release adres\u00e1r a ni\u010d sa neprepisuje \u201ena mieste\u201c, rollback je v princ\u00edpe len n\u00e1vrat symlinku na predch\u00e1dzaj\u00faci release.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>trellis rollback production\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">trellis<\/span><span style=\"color:#9ECBFF\"> rollback<\/span><span style=\"color:#9ECBFF\"> production<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Trellis \u0161tandardne dr\u017e\u00ed na serveri nieko\u013eko posledn\u00fdch releasov (pod\u013ea nastavenia; be\u017ene sa ponech\u00e1va posledn\u00fdch p\u00e1r), tak\u017ee n\u00e1vrat sp\u00e4\u0165 je ot\u00e1zka okamihu \u2013 bez kop\u00edrovania s\u00faborov a bez \u201eru\u0161enia\u201c \u017eiv\u00e9ho webu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deploy hooks: prisp\u00f4sobenie bez hackovania core procesu<\/h2>\n\n\n\n<p>V praxi m\u00e1lokedy chce\u0161 deploy \u201elen\u201c prehodi\u0165 k\u00f3d. Trellis m\u00e1 preto deploy hooks (hook = bod v procese, kde vie\u0161 doplni\u0165 vlastn\u00e9 kroky), ktor\u00e9 pokr\u00fdvaj\u00fa viacero f\u00e1z \u2013 napr\u00edklad pred\/po build krokoch alebo pred\/po fin\u00e1lnom prepnut\u00ed release.<\/p>\n\n\n\n<p>V\u010faka hookom sa d\u00e1 elegantne implementova\u0165 napr\u00edklad:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>backup datab\u00e1zy pred deployom<\/li>\n\n\n<li>\u010distenie cache po deployi<\/li>\n\n\n<li>notifik\u00e1cie t\u00edmu o nasaden\u00ed<\/li>\n\n\n<li>smoke testy proti nov\u00e9mu release (ide\u00e1lne e\u0161te pred prepnut\u00edm, ak to workflow dovol\u00ed)<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Ako za\u010da\u0165 bez toho, aby si musel meni\u0165 cel\u00fd lok\u00e1lny setup<\/h2>\n\n\n\n<p>Ak chce\u0161 Trellis vyu\u017ei\u0165 prim\u00e1rne kv\u00f4li nasadzovaniu, zvy\u010dajne d\u00e1va zmysel postavi\u0165 WordPress projekt na Bedrocku (lep\u0161ia \u0161trukt\u00fara projektu a spr\u00e1va z\u00e1vislost\u00ed cez Composer) a Trellis pou\u017ei\u0165 na deployment.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Zalo\u017e projekt s <a href=\"https:\/\/roots.io\/bedrock\/\">Bedrock<\/a>.<\/li>\n\n\n<li>Nain\u0161taluj a nakonfiguruj <a href=\"https:\/\/roots.io\/trellis\/\">Trellis<\/a> pre svoj server\/prostredie.<\/li>\n\n\n<li>V <code>wordpress_sites.yml<\/code> nastav Git repozit\u00e1r a deployment parametre.<\/li>\n\n\n<li>Spus\u0165 deploy (napr. <code>trellis deploy production<\/code>).<\/li>\n\n<\/ol>\n\n\n\n<p>Prv\u00fd deploy b\u00fdva pomal\u0161\u00ed, lebo sa pripravuje adres\u00e1rov\u00e1 \u0161trukt\u00fara a s\u0165ahuj\u00fa sa z\u00e1vislosti. \u010eal\u0161ie nasadenia s\u00fa u\u017e r\u00fdchlej\u0161ie \u2013 a hlavne bez okna, v ktorom by bol web v nekonzistentnom stave.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Praktick\u00e1 pozn\u00e1mka<\/h4>\n\n\n<p>Trellis vie\u0161 pou\u017ei\u0165 aj na servery, ktor\u00e9 neboli provisionovan\u00e9 cez Trellis. A rovnako ho vie\u0161 pou\u017e\u00edva\u0165 iba na deployment, zatia\u013e \u010do lok\u00e1lne ostane\u0161 na n\u00e1stroji, ktor\u00fd ti sed\u00ed.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Zhrnutie: \u010do si z Trellis atomic deployov re\u00e1lne odn\u00e1\u0161a WordPress t\u00edm<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Web po\u010das deployu neprejde do medzistavu so zmie\u0161an\u00fdmi s\u00fabormi.<\/li>\n\n\n<li>Ka\u017ed\u00fd deploy je nov\u00fd, izolovan\u00fd release (immutable pr\u00edstup).<\/li>\n\n\n<li>Rollback je r\u00fdchly, lebo ide prim\u00e1rne o prehodenie <code>current<\/code> symlinku.<\/li>\n\n\n<li>Proces sa d\u00e1 roz\u0161irova\u0165 cez deploy hooks.<\/li>\n\n\n<li>Datab\u00e1zov\u00e9 migr\u00e1cie treba rie\u0161i\u0165 vedome (napr. cez Acorn migrations), nie spolieha\u0165 sa, \u017ee sa \u201enejako\u201c stan\u00fa.<\/li>\n\n<\/ul>\n\n\n<div class=\"references-section\">\n                <h2>Referencie \/ Zdroje<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/roots.io\/zero-downtime-wordpress-deployments-with-trellis\/\" target=\"_blank\" rel=\"noopener noreferrer\">Zero Downtime WordPress Deployments with Trellis<\/a><\/li><li><a href=\"https:\/\/roots.io\/trellis\/docs\/deployments\/\" target=\"_blank\" rel=\"noopener noreferrer\">Trellis deployments documentation<\/a><\/li><li><a href=\"https:\/\/roots.io\/bedrock\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bedrock<\/a><\/li><li><a href=\"https:\/\/roots.io\/trellis\/\" target=\"_blank\" rel=\"noopener noreferrer\">Trellis<\/a><\/li><li><a href=\"https:\/\/roots.io\/acorn\/docs\/creating-and-running-laravel-migrations\/\" target=\"_blank\" rel=\"noopener noreferrer\">Creating and running Laravel migrations (Acorn)<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Nahr\u00e1vanie s\u00faborov na produkciu \u201ecez \u017eiv\u00fd web\u201c je najr\u00fdchlej\u0161ia cesta k tomu, aby n\u00e1v\u0161tevn\u00edci pri deployi videli chyby. Trellis to rie\u0161i modern\u00fdm atomic deployment pr\u00edstupom: nov\u00fd release priprav\u00ed bokom a na konci len prehod\u00ed symlink.<\/p>\n","protected":false},"author":36,"featured_media":108,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49],"tags":[73,76,77,75,10],"class_list":["post-109","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ekosystem-wordpress","tag-bedrock","tag-deploy","tag-devops","tag-trellis","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/posts\/109","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/comments?post=109"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/posts\/109\/revisions"}],"predecessor-version":[{"id":125,"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/posts\/109\/revisions\/125"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/media\/108"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/media?parent=109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/categories?post=109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/sk\/wp-json\/wp\/v2\/tags?post=109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}