{"id":105,"date":"2025-10-02T00:00:00","date_gmt":"2025-10-01T22:00:00","guid":{"rendered":"https:\/\/helloblog.io\/lt\/zero-downtime-wordpress-diegimai-su-trellis\/"},"modified":"2026-01-20T06:33:13","modified_gmt":"2026-01-20T05:33:13","slug":"zero-downtime-wordpress-diegimai-su-trellis","status":"publish","type":"post","link":"https:\/\/helloblog.io\/lt\/zero-downtime-wordpress-diegimai-su-trellis\/","title":{"rendered":"Zero downtime WordPress diegimai su Trellis: atomini\u0173 release\u2019\u0173 praktika"},"content":{"rendered":"\n<p>WordPress pasaulyje vis dar labai da\u017enai matau \u201eklasikin\u012f\u201c diegim\u0105: \u012fkeli kelis failus per FTP, arba paleidi <code>rsync<\/code>, arba pasitiki hostingo \u012fskiepiu, kuris \u201eka\u017ek\u0105 atnaujina\u201c. Kol procesas vyksta, svetain\u0117 aptarnauja mi\u0161r\u0173 sen\u0173 ir nauj\u0173 fail\u0173 rinkin\u012f \u2014 ir b\u016btent \u010dia prasideda atsitiktin\u0117s 500 klaidos, tr\u016bkstami asset\u2019ai, neveikiantys PHP include\u2019ai ir pana\u0161\u016bs siurprizai.<\/p>\n\n\n\n<p>Trellis (Roots infrastrukt\u016bros \u012frankis, paremtas Ansible automatizacija) si\u016blo tai, kas moderniuose web\u2019app projektuose jau seniai norma: <strong>zero downtime<\/strong> diegimus, paremtus <strong>atominiu release\u2019\u0173 perjungimu<\/strong>. Svarbiausia: Trellis gali b\u016bti naudojamas vien diegimui, net jei lokaliai dirbi su Lando, DDEV, Valet ar kitu \u012fprastu setup\u2019u.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kas i\u0161 tikro yra \u201ezero downtime\u201c diegimas?<\/h2>\n\n\n\n<p>\u201eZero downtime\u201c rei\u0161kia, kad diegimo metu svetain\u0117 i\u0161lieka pilnai pasiekiama ir funkcionali. N\u0117ra intervalo, kai vartotojai pataiko \u012f pusiau atnaujint\u0105 b\u016bsen\u0105 (pvz., naujas \u0161ablonas jau \u012fkeltas, bet dar neatkeliavo nauji JS failai, arba atvirk\u0161\u010diai).<\/p>\n\n\n\n<p>Tai pasiekiama ne \u201egreitesniu upload\u2019u\u201c, o <strong>atomine strategija<\/strong>: nauja versija paruo\u0161iama izoliuotai, o tada viena operacija perjungiama \u012f j\u0105. Praktikoje tai da\u017eniausiai yra symlink\u2019o perstatymas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kod\u0117l tradicinis WordPress diegimas l\u016b\u017eta (net jei \u201eatrodo veikia\u201c)?<\/h2>\n\n\n\n<p>Da\u017eniausi scenarijai:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>FTP \u012fk\u0117limas<\/strong>: kol keli failus, svetain\u0117 gyvai aptarnauja dal\u012f sen\u0173 ir dal\u012f nauj\u0173 fail\u0173. Jei u\u017etrunka kelias minutes \u2014 vartotojai tikrai pataikys \u012f nekonsistenti\u0161k\u0105 b\u016bsen\u0105.<\/li>\n\n\n<li><strong>Fail\u0173 sinchronizacija (pvz., <code>rsync<\/code>)<\/strong>: grei\u010diau nei FTP, bet problema ta pati \u2014 failai perra\u0161omi \u201ein-place\u201c, kai sistema veikia.<\/li>\n\n\n<li><strong>Hostingo\/\u012fskiepio diegimas<\/strong>: patogu, bet da\u017enai be tikro rollback\u2019o ir su tais pa\u010diais \u201ein-place update\u201c minusais.<\/li>\n\n<\/ul>\n\n\n\n<p>Bendra \u0161i\u0173 metod\u0173 b\u0117da: n\u0117ra ai\u0161kios izoliacijos tarp \u201eseno\u201c ir \u201enaujo\u201c, rollback da\u017eniausiai rei\u0161kia rankin\u012f fail\u0173 perkopijavim\u0105, o diegimo langas realiai matomas lankytojams.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kaip Trellis daro atominius (immutable) diegimus?<\/h2>\n\n\n\n<p>Trellis diegimo modelis paremtas dviem id\u0117jomis:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Atomic<\/strong>: perjungimas \u012f nauj\u0105 release\u2019\u0105 \u012fvyksta momenti\u0161kai (vienu veiksmu).<\/li>\n\n\n<li><strong>Immutable<\/strong>: release direktorijos po diegimo neberedaguojamos. Kiekvienas diegimas sukuria nauj\u0105 atskir\u0105 katalog\u0105.<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Serverio direktorij\u0173 strukt\u016bra: kur slypi \u201emagija\u201c<\/h3>\n\n\n\n<p>Tipin\u0117 strukt\u016bra, kuri\u0105 Trellis sukuria deploy\u2019inant projekt\u0105:<\/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 \u012f aktyv\u0173 release\n\u251c\u2500\u2500 releases\/            # Visi i\u0161diegti release\u2019ai\n\u2502   \u251c\u2500\u2500 20250930124530\/\n\u2502   \u251c\u2500\u2500 20250930083045\/\n\u2502   \u2514\u2500\u2500 20250930141622\/  # Naujausias\n\u251c\u2500\u2500 shared\/              # Bendri failai per release\u2019us\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>\/srv\/www\/example.com\/<\/span><\/span>\n<span class=\"line\"><span>\u251c\u2500\u2500 current\/             # Symlink \u012f aktyv\u0173 release<\/span><\/span>\n<span class=\"line\"><span>\u251c\u2500\u2500 releases\/            # Visi i\u0161diegti release\u2019ai<\/span><\/span>\n<span class=\"line\"><span>\u2502   \u251c\u2500\u2500 20250930124530\/<\/span><\/span>\n<span class=\"line\"><span>\u2502   \u251c\u2500\u2500 20250930083045\/<\/span><\/span>\n<span class=\"line\"><span>\u2502   \u2514\u2500\u2500 20250930141622\/  # Naujausias<\/span><\/span>\n<span class=\"line\"><span>\u251c\u2500\u2500 shared\/              # Bendri failai per release\u2019us<\/span><\/span>\n<span class=\"line\"><span>\u2502   \u2514\u2500\u2500 uploads\/<\/span><\/span>\n<span class=\"line\"><span>\u2514\u2500\u2500 logs\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Web serveris (Nginx\/Apache) visada aptarnauja turin\u012f i\u0161 <code>current\/<\/code>. Bet <code>current\/<\/code> n\u0117ra \u201etikras katalogas\u201c \u2014 tai <strong>symlink<\/strong>, rodantis \u012f vien\u0105 i\u0161 <code>releases\/...<\/code> direktorij\u0173. Tod\u0117l perjungimas tarp versij\u0173 yra tiesiog symlink\u2019o perstatymas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kas vyksta paleidus <code>trellis deploy production<\/code>?<\/h3>\n\n\n\n<p>Auk\u0161tu lygiu, Trellis daro tok\u012f pipeline\u2019\u0105 (pavadinimai gali skamb\u0117ti pa\u017e\u012fstamai i\u0161 CI\/CD):<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>Initialize<\/strong>: patikrina\/sukuria reikaling\u0105 strukt\u016br\u0105, sukuria nauj\u0105 release katalog\u0105 su timestamp\u2019u (pvz., <code>20250930141622<\/code>).<\/li>\n\n\n<li><strong>Update<\/strong>: klonuoja naujausi\u0105 kod\u0105 i\u0161 Git repo \u012f laikin\u0105 viet\u0105, atskirai nuo live svetain\u0117s.<\/li>\n\n\n<li><strong>Prepare<\/strong>: paruo\u0161t\u0105 kod\u0105 nukopijuoja \u012f naujo release direktorij\u0105.<\/li>\n\n\n<li><strong>Build<\/strong>: paleid\u017eia <code>composer install<\/code> (priklausomyb\u0117s atsisiun\u010diamos ir sudedamos \u012f release).<\/li>\n\n\n<li><strong>Share<\/strong>: bendri katalogai (pvz., media upload\u2019ai) prijungiami per symlink\u2019us i\u0161 <code>shared\/<\/code> \u012f nauj\u0105 release.<\/li>\n\n\n<li><strong>Finalize<\/strong>: atnaujina <code>current<\/code> symlink\u2019\u0105 \u012f nauj\u0105 release.<\/li>\n\n<\/ol>\n\n\n\n<p>Svarbiausia vieta: iki <code>Finalize<\/code> momento real\u016bs vartotojai vis dar mato sen\u0105 release\u2019\u0105. O perjungimas \u012f nauj\u0105 \u012fvyksta akimirksniu \u2014 n\u0117ra \u201etarpin\u0117s\u201c b\u016bsenos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Duomen\u0173 baz\u0117: ko Trellis s\u0105moningai nedaro u\u017e tave<\/h2>\n\n\n\n<p>Trellis puikiai sutvarko <strong>kodo<\/strong> diegim\u0105 be prastov\u0173, bet DB schema ir migracijos yra atskiras klausimas. Trellis dokumentacijoje ai\u0161kiai pasakoma, kad <strong>database migrations \u012f deploy proces\u0105 n\u0117ra \u012ftrauktos<\/strong>.<\/p>\n\n\n\n<p>Jei projekte naudoji Acorn (Roots \u012frank\u012f, kuris \u012f WordPress atne\u0161a Laravel komponentus), gali naudoti Laravel migracijas ir jas \u012ftraukti \u012f diegimo eig\u0105 kaip atskir\u0105 \u017eingsn\u012f. \u010cia svarbu planuoti \u201ebackward-compatible\u201c migracijas: naujas kodas ir sena schema (ir atvirk\u0161\u010diai) trumpam turi sugyventi saugiai.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rollback: greitas gr\u012f\u017eimas atgal be fail\u0173 kopijavimo<\/h2>\n\n\n\n<p>Immutable release\u2019ai duoda labai prakti\u0161k\u0105 benefit\u2019\u0105: rollback tampa trivialus. Kadangi senas release\u2019as vis dar yra diske, gr\u012f\u017eti atgal rei\u0161kia tiesiog perjungti <code>current<\/code> symlink\u2019\u0105 \u012f ankstesn\u012f katalog\u0105.<\/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>Pagal nutyl\u0117jim\u0105 serveryje laikomi keli paskutiniai release\u2019ai (Trellis numatytai saugo penkis). Tai rei\u0161kia, kad blogas deploy\u2019as n\u0117ra \u201eincidentas su naktiniu taisymu\u201c, o 10 sekund\u017ei\u0173 operacija, kol ai\u0161kiniesi, kas nutiko.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deploy hook\u2019ai: kaip prisitaikyti proces\u0105 prie realaus projekto<\/h2>\n\n\n\n<p>Trellis diegimo procesas turi hook\u2019us (kablius) \u2014 tai vietos, kur gali \u012fterpti savo u\u017eduotis \u012f konkre\u010dius \u017eingsnius. Pavyzd\u017eiai:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>deploy_build_before<\/code> \/ <code>deploy_build_after<\/code> \u2014 papildomi build \u017eingsniai (pvz., asset\u2019\u0173 generavimas, jei tai darai serveryje).<\/li>\n\n\n<li><code>deploy_finalize_before<\/code> \/ <code>deploy_finalize_after<\/code> \u2014 u\u017eduotys prie\u0161 ir po perjungimo (pvz., cache flush, warmup, health check).<\/li>\n\n\n<li>Hook\u2019ai kiekvienam pagrindiniam etapui: initialize, update, prepare, build, share, finalize.<\/li>\n\n<\/ul>\n\n\n\n<p>Praktikoje hook\u2019ai leid\u017eia susid\u0117lioti \u201ebrand\u0173\u201c deploy scenarij\u0173: pasidaryti DB backup prie\u0161 perjungim\u0105, i\u0161valyti page cache po perjungimo, prasukti smoke test prie\u0161 nukreipiant sraut\u0105 \u012f nauj\u0105 release, arba i\u0161si\u0173sti prane\u0161im\u0105 komandai.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nuo ko prad\u0117ti, jei nori Trellis naudoti tik diegimui?<\/h2>\n\n\n\n<p>Minimalus kelias atrodo taip:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Projekt\u0105 susitvarkyti su Bedrock (Roots WordPress strukt\u016bra, kuri padeda tvarkingai valdyti priklausomybes ir konfig\u016bracij\u0105).<\/li>\n\n\n<li>\u012esidiegti Trellis ir susikonfig\u016bruoti deploy nustatymus.<\/li>\n\n\n<li><code>wordpress_sites.yml<\/code> faile nurodyti Git repo informacij\u0105 (i\u0161 kur imti kod\u0105).<\/li>\n\n\n<li>Paleisti <code>trellis deploy production<\/code>.<\/li>\n\n<\/ol>\n\n\n\n<p>Pirmas diegimas da\u017eniausiai u\u017etrunka ilgiau, nes sukuria strukt\u016br\u0105 ir susideda priklausomybes. V\u0117lesni deploy\u2019ai tampa \u017eenkliai greitesni \u2014 ir svarbiausia, atliekami be vartotojams matom\u0173 \u201ebangavim\u0173\u201c.<\/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\">Svarbi praktin\u0117 detal\u0117<\/h4>\n\n\n<p>Trellis zero downtime efektas galioja kodo bazei ir failams. Jei darai schema-breaking DB poky\u010dius, diegim\u0105 planuok taip, kad per\u0117jimas b\u016bt\u0173 saugus (pvz., dviej\u0173 etap\u0173 migracijos), arba \u012ftrauk papildom\u0105 strategij\u0105.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Rezium\u0117: kada Trellis atomini\u0173 deploy\u2019\u0173 modelis labiausiai atsiperka?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Kai svetain\u0117 turi real\u0173 sraut\u0105 ir net keli\u0173 minu\u010di\u0173 \u201epusiau atnaujinta\u201c b\u016bsena sukelia klaidas ar prarastas konversijas.<\/li>\n\n\n<li>Kai nori tur\u0117ti real\u0173 rollback\u2019\u0105, o ne \u201egr\u0105\u017einkit backup\u2019\u0105\u201c.<\/li>\n\n\n<li>Kai WordPress projekt\u0105 valdai kaip aplikacij\u0105: su Git, Composer, aplinkomis (staging\/production) ir ai\u0161kiu release\u2019\u0173 gyvenimo ciklu.<\/li>\n\n<\/ul>\n\n\n<div class=\"references-section\">\n                <h2>Nuorodos \/ \u0160altiniai<\/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>Kai WordPress atnaujinimas vyksta per FTP ar rsync, real\u016bs lankytojai da\u017enai pirmi pamato klaidas. Trellis diegimo modelis sprend\u017eia \u0161i\u0105 problem\u0105 atominiu perjungimu ir leid\u017eia tur\u0117ti greit\u0105 rollback be streso.<\/p>\n","protected":false},"author":55,"featured_media":104,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[73,74,75,4,72],"class_list":["post-105","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-bedrock","tag-deploy","tag-devops","tag-roots","tag-trellis"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/posts\/105","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/users\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/comments?post=105"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/posts\/105\/revisions"}],"predecessor-version":[{"id":121,"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/posts\/105\/revisions\/121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/media\/104"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/media?parent=105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/categories?post=105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/lt\/wp-json\/wp\/v2\/tags?post=105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}