{"id":135,"date":"2025-10-02T00:00:00","date_gmt":"2025-10-01T22:00:00","guid":{"rendered":"https:\/\/helloblog.io\/lv\/zero-downtime-wordpress-izvietosana-ar-trellis\/"},"modified":"2026-01-20T06:38:46","modified_gmt":"2026-01-20T05:38:46","slug":"zero-downtime-wordpress-izvietosana-ar-trellis","status":"publish","type":"post","link":"https:\/\/helloblog.io\/lv\/zero-downtime-wordpress-izvietosana-ar-trellis\/","title":{"rendered":"Zero-downtime WordPress izvieto\u0161ana ar Trellis: atomiskie deploy bez stresa"},"content":{"rendered":"\n<p>WordPress pasaul\u0113 joproj\u0101m bie\u017ei sastopama \u201cklasisk\u0101\u201d izvieto\u0161anas (deployment) pieeja: aug\u0161upiel\u0101d\u0113 failus un cer, ka pa vidu neviens lietot\u0101js netr\u0101p\u012bs uz br\u012bdi, kad sist\u0113ma ir nekonsistent\u0101 st\u0101vokl\u012b. Modern\u0101 lietot\u0146u izstr\u0101d\u0113 tas sen vairs nav pie\u0146emami \u2014 un tie\u0161i te Trellis ienes \u013coti praktisku ideju: <strong>atomisku izvieto\u0161anu<\/strong> (atomic deployment), kas p\u0113c noklus\u0113juma dod <em>zero downtime<\/em> pieredzi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ko re\u0101li noz\u012bm\u0113 \u201czero downtime\u201d WordPress kontekst\u0101<\/h2>\n\n\n\n<p>Ar <em>zero downtime deployment<\/em> parasti saprot, ka vietne visu izvieto\u0161anas procesu laik\u0101 paliek pieejama un funkcion\u0101la: nav br\u012b\u017ea, kur\u0101 apmekl\u0113t\u0101js redz da\u013c\u0113ji atjaunin\u0101tu kodu (vecas PHP klases + jauni \u0161abloni, main\u012bts JS bez atbilsto\u0161iem CSS u.tml.).<\/p>\n\n\n\n<p>At\u0161\u0137ir\u012bba ir pieej\u0101: nevis p\u0101rrakst\u012bt eso\u0161os failus turpat <code>public_html<\/code>, bet <strong>sagatavot pilnu jauno rel\u012bzi izol\u0113ti<\/strong> un tikai pa\u0161\u0101s beig\u0101s p\u0101rsl\u0113gt trafiku uz jauno rel\u012bzi ar vienu \u0101tru darb\u012bbu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">K\u0101p\u0113c tradicion\u0101lais WordPress deploy m\u0113dz \u201csal\u016bzt\u201d<\/h2>\n\n\n\n<p>Liel\u0101k\u0101 da\u013ca WordPress izvieto\u0161anas scen\u0101riju iekr\u012bt vien\u0101 no \u0161iem mode\u013ciem \u2014 un visiem ir kop\u012bga probl\u0113ma: failu mai\u0146a notiek, kam\u0113r vietne str\u0101d\u0101.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>FTP aug\u0161upiel\u0101de<\/strong>: manu\u0101li p\u0101rraksti main\u012btos failus. Process var vilkties min\u016btes, un pa to laiku lietot\u0101ji sa\u0146em failu \u201ckokteili\u201d no vec\u0101s un jaun\u0101s versijas.<\/li>\n\n\n<li><strong>Failu sinhroniz\u0101cija<\/strong> (piem., <code>rsync<\/code>): \u0101tr\u0101k nek\u0101 FTP, bet b\u016bt\u012bba t\u0101 pati \u2014 live vid\u0113 tiek p\u0101rrakst\u012bti faili, kam\u0113r piepras\u012bjumi turpin\u0101s.<\/li>\n\n\n<li><strong>Hostinga spraud\u0146u\/risin\u0101jumu deploy<\/strong>: \u0113rti, bet nereti tas joproj\u0101m ir \u201cin-place update\u201d bez \u012bstas atomikas un bez vienk\u0101r\u0161a rollback meh\u0101nisma.<\/li>\n\n<\/ul>\n\n\n\n<p>Rezult\u0101ts: izvieto\u0161anas log\u0101 var par\u0101d\u012bties 500 k\u013c\u016bdas, tr\u016bksto\u0161i faili, \u201cclass not found\u201d, nekorekti asseti, un, ja kas aiziet greizi, atgrie\u0161an\u0101s iepriek\u0161\u0113j\u0101 st\u0101vokl\u012b bie\u017ei ir manu\u0101la un l\u0113na.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">K\u0101 Trellis pan\u0101k atomisku izvieto\u0161anu<\/h2>\n\n\n\n<p>Trellis izmanto pieeju, kas modern\u0101 lietot\u0146u pasaul\u0113 ir standarts: katrs deploy izveido <strong>jaunu rel\u012bzes direktoriju<\/strong>, sagatavo taj\u0101 visu nepiecie\u0161amo un tikai tad p\u0101rsl\u0113dz web serveri uz \u0161o rel\u012bzi.<\/p>\n\n\n\n<p>\u0160o modeli bie\u017ei raksturo ar diviem atsl\u0113gas v\u0101rdiem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Atomic<\/strong> \u2014 p\u0101rsl\u0113g\u0161an\u0101s notiek vien\u0101 moment\u0101, bez \u201cstarpposma\u201d, kur str\u0101d\u0101 puse vec\u0101 un puse jaun\u0101.<\/li>\n\n\n<li><strong>Immutable<\/strong> \u2014 jau izvietota rel\u012bze netiek labota\/p\u0101rrakst\u012bta uz vietas. Katrs deploy ir jauna, atsevi\u0161\u0137a direktorija.<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Direktoriju strukt\u016bra, uz kuras turas viss triks<\/h3>\n\n\n\n<p>P\u0113c izvieto\u0161anas uz servera Trellis uztur skaidru strukt\u016bru ar <code>releases<\/code>, <code>shared<\/code> un galveno \u201csl\u0113dzi\u201d \u2014 <code>current<\/code> simbolisko saiti (symlink). Web serveris apkalpo tie\u0161i <code>current<\/code>.<\/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>\/srv\/www\/example.com\/\n\u251c\u2500\u2500 current\/             # symlink uz akt\u012bvo rel\u012bzi\n\u251c\u2500\u2500 releases\/            # visas izvietot\u0101s rel\u012bzes\n\u2502   \u251c\u2500\u2500 20250930124530\/\n\u2502   \u251c\u2500\u2500 20250930083045\/\n\u2502   \u2514\u2500\u2500 20250930141622\/  # jaun\u0101k\u0101\n\u251c\u2500\u2500 shared\/              # koplietojamie faili starp rel\u012bz\u0113m\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 uz akt\u012bvo rel\u012bzi<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> releases\/<\/span><span style=\"color:#6A737D\">            # visas izvietot\u0101s rel\u012bzes<\/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\">  # jaun\u0101k\u0101<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> shared\/<\/span><span style=\"color:#6A737D\">              # koplietojamie faili starp rel\u012bz\u0113m<\/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>No lietot\u0101ja viedok\u013ca viss \u201cma\u0123iskais\u201d moments ir tas, ka <code>current<\/code> p\u0101rsl\u0113dzas no vienas rel\u012bzes direktorijas uz citu praktiski uzreiz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kas notiek, kad palai\u017e <code>trellis deploy production<\/code><\/h3>\n\n\n\n<p>Izvieto\u0161ana ar Trellis ir sec\u012bgs process ar skaidriem so\u013ciem. Svar\u012bg\u0101kais \u2014 liela da\u013ca darbu notiek \u0101rpus live rel\u012bzes, t\u0101p\u0113c apmekl\u0113t\u0101ji nej\u016bt failu atjauno\u0161anu.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>Initialize<\/strong>: p\u0101rbauda\/izveido nepiecie\u0161amo strukt\u016bru un sagatavo jaunu rel\u012bzes direktoriju ar timestamp nosaukumu.<\/li>\n\n\n<li><strong>Update<\/strong>: pa\u0146em jaun\u0101ko kodu no Git repozitorija uz atsevi\u0161\u0137u avota (source) direktoriju, nevis p\u0101rraksta live failus.<\/li>\n\n\n<li><strong>Prepare<\/strong>: sagatavo rel\u012bzi \u2014 kop\u0113 failus uz jaun\u0101s rel\u012bzes direktoriju.<\/li>\n\n\n<li><strong>Build<\/strong>: palai\u017e <code>composer install<\/code>, lai iel\u0101d\u0113tu atkar\u012bbas (dependencies).<\/li>\n\n\n<li><strong>Share<\/strong>: pievieno koplietojam\u0101s direktorijas (piem., aug\u0161upiel\u0101des) no <code>shared\/<\/code> uz jauno rel\u012bzi ar symlink.<\/li>\n\n\n<li><strong>Finalize<\/strong>: atjauno <code>current<\/code> symlink, nor\u0101dot uz jauno rel\u012bzi.<\/li>\n\n<\/ol>\n\n\n\n<p>Praks\u0113 tas noz\u012bm\u0113: vienu mirkli vietne tiek apkalpota no <code>releases\/20250930124530<\/code>, un n\u0101kamaj\u0101 \u2014 jau no <code>releases\/20250930141622<\/code>. Nav \u201cupload loga\u201d, kur\u0101 kaut kas ir pusce\u013c\u0101.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Datub\u0101ze: zero downtime kodam nenoz\u012bm\u0113 autom\u0101tiskas migr\u0101cijas<\/h2>\n\n\n\n<p>Svar\u012bga nianse: Trellis ar savu atomisko modeli atrisina <strong>koda<\/strong> izvieto\u0161anas stabilit\u0101ti, bet <strong>datub\u0101zes sh\u0113mas izmai\u0146as<\/strong> ir atsevi\u0161\u0137a t\u0113ma. Trellis dokument\u0101cij\u0101 ir skaidri nor\u0101d\u012bts, ka datub\u0101zes migr\u0101cijas uz jaunu sh\u0113mu nav iek\u013cautas k\u0101 autom\u0101tiska deploy sast\u0101vda\u013ca.<\/p>\n\n\n\n<p>Ja izmanto Acorn (Roots r\u012bks, kas WordPress vid\u0113 ienes Laravel ergonomiku), vari veidot un palaist <strong>Laravel migrations<\/strong> (migr\u0101cijas) ar\u012b WordPress projektos un piesl\u0113gt t\u0101s izvieto\u0161anas procesam. Tas pal\u012bdz disciplin\u0113ti un atk\u0101rtojami main\u012bt sh\u0113mu, bet joproj\u0101m j\u0101dom\u0101 par sader\u012bbu (backward\/forward compatibility), lai izvair\u012btos no situ\u0101cij\u0101m, kur kods un DB izmai\u0146as nav savietojamas p\u0101rejas br\u012bd\u012b.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rollback bez panikas: viena komanda, viens symlink<\/h2>\n\n\n\n<p>Atomiska\/immutabla pieeja uzreiz dod v\u0113l vienu lielu ieguvumu: <strong>\u0101tru rollback<\/strong>. T\u0101 k\u0101 katra rel\u012bze ir piln\u012bga un netiek modific\u0113ta p\u0113c izvieto\u0161anas, atgrie\u0161an\u0101s iepriek\u0161\u0113j\u0101 versij\u0101 ir tikai <code>current<\/code> symlink p\u0101rsl\u0113g\u0161ana uz vec\u0101ku rel\u012bzi.<\/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>P\u0113c noklus\u0113juma Trellis uz servera patur vair\u0101kas p\u0113d\u0113j\u0101s rel\u012bzes (tipiski piecas), lai rollback b\u016btu moment\u0101ns.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deployment hook-i: kur ielikt savas darb\u012bbas<\/h2>\n\n\n\n<p>Re\u0101l\u0101s komand\u0101s izvieto\u0161ana reti ir tikai \u201cieliec kodu\u201d. Trellis pied\u0101v\u0101 deployment hook-us (\u0101\u0137us) \u2014 defin\u0113tas vietas proces\u0101, kur vari piesl\u0113gt savus so\u013cus.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>deploy_build_before<\/code> un <code>deploy_build_after<\/code> \u2014 papildu build darb\u012bb\u0101m.<\/li>\n\n\n<li><code>deploy_finalize_before<\/code> un <code>deploy_finalize_after<\/code> \u2014 uzdevumiem tie\u0161i pirms\/p\u0113c p\u0101rsl\u0113g\u0161an\u0101s uz jauno rel\u012bzi.<\/li>\n\n\n<li>Hook-i katram lielajam solim: initialize, update, prepare, build, share, finalize.<\/li>\n\n<\/ul>\n\n\n\n<p>Praktiski piem\u0113ri, ko ar to parasti dara: pirms deploy izveido DB backup, p\u0113c deploy izt\u012bra ke\u0161us, nos\u016bta pazi\u0146ojumus (piem., Slack), vai palai\u017e vienk\u0101r\u0161us smoke testus pret jauno rel\u012bzi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">K\u0101 s\u0101kt: Trellis var izmantot tikai deploy vajadz\u012bb\u0101m<\/h2>\n\n\n\n<p>Trellis nav oblig\u0101ti j\u0101izmanto visam izstr\u0101des workflow. Bie\u017ei sastopams scen\u0101rijs: lok\u0101li str\u0101d\u0101 ar sev \u0113rtu vidi (piem., Valet, Lando, DDEV u.c.), bet uz serveri izvieto ar Trellis \u2014 \u012bpa\u0161i, ja projekts balst\u0101s uz Bedrock (sak\u0101rtot\u0101ka WordPress projekta strukt\u016bra).<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Sagatavo projektu ar <strong>Bedrock<\/strong> (lab\u0101ka strukt\u016bra un atkar\u012bbu p\u0101rvald\u012bba).<\/li>\n\n\n<li>Uzst\u0101di <strong>Trellis<\/strong> un nokonfigur\u0113 izvieto\u0161anas iestat\u012bjumus.<\/li>\n\n\n<li><code>wordpress_sites.yml<\/code> nor\u0101di Git repozitoriju un p\u0101r\u0113jo nepiecie\u0161amo konfigur\u0101ciju.<\/li>\n\n\n<li>Palai\u017e <code>trellis deploy production<\/code>.<\/li>\n\n<\/ol>\n\n\n\n<p>Pirmais deploy parasti ir l\u0113n\u0101ks \u2014 j\u0101izveido direktoriju strukt\u016bra un j\u0101iel\u0101d\u0113 atkar\u012bbas. N\u0101kamie deploy ir \u0101tr\u0101ki, un galvenais \u2014 tie ir paredzami un bez d\u012bkst\u0101ves.<\/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\">Praktiska doma WordPress projektiem<\/h4>\n\n\n<p>Ja tev svar\u012bgs stabils deploy ar \u0101tru rollback, bet negribas main\u012bt lok\u0101lo vidi vai hostinga izv\u0113li, Trellis atomisk\u0101 izvieto\u0161ana bie\u017ei ir labs kompromiss: pa\u0146em tikai to, kas dod liel\u0101ko ieguvumu produkcij\u0101.<\/p>\n\n<\/div>\n\n\n<div class=\"references-section\">\n                <h2>Atsauces \/ Avoti<\/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 documentation: Deployments<\/a><\/li><li><a href=\"https:\/\/roots.io\/acorn\/docs\/creating-and-running-laravel-migrations\/\" target=\"_blank\" rel=\"noopener noreferrer\">Acorn documentation: Creating and running Laravel migrations<\/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><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Ja WordPress deploy laik\u0101 k\u0101dreiz esi redz\u0113jis baltu ekr\u0101nu, 500 k\u013c\u016bdu vai \u201cpuse vietnes\u201d str\u0101d\u0101, puse n\u0113 \u2014 probl\u0113ma bie\u017ei ir failu p\u0101rrakst\u012b\u0161ana live re\u017e\u012bm\u0101. Trellis pied\u0101v\u0101 atomisku pieeju, kas \u013cauj p\u0101rsl\u0113gties uz jauno versiju uzreiz, bez d\u012bkst\u0101ves.<\/p>\n","protected":false},"author":52,"featured_media":134,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31],"tags":[70,77,78,76,10],"class_list":["post-135","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-ekosistema","tag-bedrock","tag-deploy","tag-devops","tag-trellis","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/posts\/135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/comments?post=135"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/posts\/135\/revisions"}],"predecessor-version":[{"id":151,"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/posts\/135\/revisions\/151"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/media\/134"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/media?parent=135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/categories?post=135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/lv\/wp-json\/wp\/v2\/tags?post=135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}