{"id":133,"date":"2025-10-02T00:00:00","date_gmt":"2025-10-01T22:00:00","guid":{"rendered":"https:\/\/helloblog.io\/sv\/zero-downtime-deployar-wordpress-med-trellis\/"},"modified":"2026-01-20T06:33:18","modified_gmt":"2026-01-20T05:33:18","slug":"zero-downtime-deployar-wordpress-med-trellis","status":"publish","type":"post","link":"https:\/\/helloblog.io\/sv\/zero-downtime-deployar-wordpress-med-trellis\/","title":{"rendered":"Zero downtime-deployar WordPress med Trellis: atomiska releaser, snabb rollback och hooks"},"content":{"rendered":"\n<p>Det \u00e4r l\u00e4tt att k\u00e4nna igen scenariot: du pushar en uppdatering, en host k\u00f6r sin \u201ddeploy-plugin\u201d eller du syncar upp filer med <code>rsync<\/code> \u2013 och pl\u00f6tsligt f\u00e5r n\u00e5gon anv\u00e4ndare en trasig sida eftersom servern r\u00e5kar servera en blandning av gammalt och nytt. I modern apputveckling \u00e4r det h\u00e4r ett problem man l\u00f6ser med <em>atomiska deployer<\/em> (atomic deployments). I WordPress-v\u00e4rlden \u00e4r det fortfarande ovanligt \u2013 men Trellis har det inbyggt.<\/p>\n\n\n\n<p>Trellis \u00e4r Roots server- och deploy-verktyg som (bland annat) kan deploya WordPress-projekt p\u00e5 ett s\u00e4tt som h\u00e5ller sajten uppe under hela releasen. Och det intressanta \u00e4r att du inte m\u00e5ste byta hela din lokala workflow f\u00f6r att f\u00e5 nyttan: m\u00e5nga k\u00f6r Trellis enbart f\u00f6r deployment av Bedrock-baserade sajter, \u00e4ven n\u00e4r de utvecklar lokalt i Valet, Lando, DDEV eller liknande.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vad \u201dzero downtime\u201d betyder i praktiken<\/h2>\n\n\n\n<p><em>Zero downtime deployments<\/em> betyder att sajten forts\u00e4tter vara fullt fungerande och \u00e5tkomlig medan du deployar. Nyckeln \u00e4r att den nya versionen byggs f\u00e4rdigt helt isolerat, och f\u00f6rst n\u00e4r allt \u00e4r klart v\u00e4xlar servern \u00f6ver \u2013 momentant.<\/p>\n\n\n\n<p>Kontrasten mot klassisk WordPress-deploy \u00e4r tydlig: n\u00e4r du skriver \u00f6ver filer i place (via FTP, en sync, eller ett host-verktyg) finns en period d\u00e4r servern kan l\u00e4sa in en ny PHP-fil men en gammal dependency, eller en ny template men gamla assets. Det r\u00e4cker f\u00f6r att skapa intermittent fel som \u00e4r sv\u00e5ra att reproducera.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Varf\u00f6r traditionella WordPress-deployer ofta strular<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>FTP-uppladdning:<\/strong> manuellt, l\u00e5ngsamt och serverar ofta en mix av gamla och nya filer under uppladdningen.<\/li>\n\n\n<li><strong>Fil-synk (t.ex. <code>rsync<\/code>):<\/strong> snabbare \u00e4n FTP, men grundproblemet kvarst\u00e5r \u2013 du skriver \u00f6ver filer medan sajten \u00e4r live.<\/li>\n\n\n<li><strong>Plugin-\/host-baserad deploy:<\/strong> bekv\u00e4mt, men uppdaterar ofta filer i place och saknar smidig rollback om n\u00e5got g\u00e5r snett.<\/li>\n\n<\/ul>\n\n\n\n<p>Gemensamt f\u00f6r uppl\u00e4ggen ovan \u00e4r att de g\u00f6r rollback sv\u00e5rt (eller manuellt) och att anv\u00e4ndare kan hinna m\u00f6ta fel under deploy-f\u00f6nstret.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">S\u00e5 g\u00f6r Trellis: atomiska och immutabla releaser<\/h2>\n\n\n\n<p>Trellis anv\u00e4nder en atomisk strategi: varje deploy skapar en helt ny release-katalog, och den aktiva versionen pekas ut med en symlink (symbolisk l\u00e4nk). N\u00e4r allt \u00e4r f\u00e4rdigbyggt uppdateras syml\u00e4nken \u2013 vilket g\u00e5r i praktiken omedelbart. Inget skrivs \u00f6ver i den aktiva releasen.<\/p>\n\n\n\n<p>Det h\u00e4r \u00e4r \u00e4ven <em>immutabelt<\/em> i betydelsen att en release, n\u00e4r den v\u00e4l \u00e4r deployad, inte modifieras i place. N\u00e4sta deploy skapar en ny katalog. Det g\u00f6r fels\u00f6kning och rollback betydligt tryggare.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Katalogstrukturen p\u00e5 servern<\/h3>\n\n\n\n<p>Efter en deploy med Trellis f\u00e5r du en struktur som brukar se ut ungef\u00e4r s\u00e5 h\u00e4r:<\/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 till aktiv release\n\u251c\u2500\u2500 releases\/            # Alla deployade releaser\n\u2502   \u251c\u2500\u2500 20250930124530\/\n\u2502   \u251c\u2500\u2500 20250930083045\/\n\u2502   \u2514\u2500\u2500 20250930141622\/  # Senaste\n\u251c\u2500\u2500 shared\/              # Delade filer mellan releaser\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 till aktiv 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\">            # Alla deployade releaser<\/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\">  # Senaste<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> shared\/<\/span><span style=\"color:#6A737D\">              # Delade filer mellan releaser<\/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>Webbservern (Nginx\/Apache beroende p\u00e5 setup) servar alltid fr\u00e5n <code>current\/<\/code>. Eftersom <code>current<\/code> bara \u00e4r en symlink kan Trellis byta fr\u00e5n en release till en annan utan ett mellanl\u00e4ge d\u00e4r filer blandas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vad som h\u00e4nder n\u00e4r du k\u00f6r en deploy<\/h3>\n\n\n\n<p>N\u00e4r du k\u00f6r <code>trellis deploy production<\/code> bygger Trellis upp releasen stegvis, separat fr\u00e5n den aktiva sajten:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>Initialize:<\/strong> s\u00e4kerst\u00e4ller att strukturen finns och skapar en ny release-katalog (ofta tidsst\u00e4mplad).<\/li>\n\n\n<li><strong>Update:<\/strong> h\u00e4mtar senaste koden fr\u00e5n ditt Git-repo till en tempor\u00e4r plats (inte live-katalogen).<\/li>\n\n\n<li><strong>Prepare:<\/strong> kopierar \u00f6ver koden till den nya release-katalogen.<\/li>\n\n\n<li><strong>Build:<\/strong> k\u00f6r <code>composer install<\/code> f\u00f6r att installera PHP-dependencies.<\/li>\n\n\n<li><strong>Share:<\/strong> syml\u00e4nkar in delat inneh\u00e5ll (typiskt <code>uploads<\/code>) fr\u00e5n <code>shared\/<\/code> in i releasen.<\/li>\n\n\n<li><strong>Finalize:<\/strong> uppdaterar <code>current<\/code>-syml\u00e4nken s\u00e5 att den pekar p\u00e5 den nya releasen.<\/li>\n\n<\/ol>\n\n\n\n<p>Det \u00e4r i finalize-steget magin h\u00e4nder: ena \u00f6gonblicket pekar <code>current<\/code> p\u00e5 en \u00e4ldre release, n\u00e4sta \u00f6gonblick p\u00e5 den nya. Ingen fil\u00f6verskrivning medan anv\u00e4ndare laddar sidan.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Databasen \u00e4r en separat fr\u00e5ga (migreringar)<\/h2>\n\n\n\n<p>En viktig brasklapp: Trellis hanterar zero downtime f\u00f6r <em>kod och filer<\/em>, men databasschema\u00e4ndringar ing\u00e5r inte automatiskt i en deploy. Trellis-dokumentationen \u00e4r tydlig med att databasmigreringar inte \u00e4r en del av standardfl\u00f6det.<\/p>\n\n\n\n<p>Om du anv\u00e4nder Acorn (Roots ramverk som tar in Laravel-koncept i WordPress) kan du jobba med Laravel migrations och se till att de k\u00f6rs som en del av deploy-processen. Po\u00e4ngen \u00e4r att du beh\u00f6ver planera migreringar s\u00e5 att de \u00e4r bak\u00e5tkompatibla, eller orkestrera dem med samma f\u00f6rsiktighet som i andra system.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rollback p\u00e5 sekunder tack vare syml\u00e4nkar<\/h2>\n\n\n\n<p>Den praktiska vinsten med atomiska, immutabla releaser \u00e4r rollback. Eftersom gamla releaser ligger kvar som kompletta kataloger \u00e4r rollback bara att peka tillbaka <code>current<\/code> till f\u00f6reg\u00e5ende 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>Som standard beh\u00e5ller Trellis de fem senaste releaserna p\u00e5 servern, vilket g\u00f6r att du kan backa snabbt om en deploy r\u00e5kade ta med en regression.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deploy hooks: anpassa utan att hacka fl\u00f6det<\/h2>\n\n\n\n<p>Trellis har hooks (t\u00e4nk \u201dkrokar\u201d i deploy-pipelinen) s\u00e5 att du kan l\u00e4gga in egna steg f\u00f6re\/efter centrala moment. Exempel som n\u00e4mns i Trellis-fl\u00f6det \u00e4r <code>deploy_build_before<\/code>\/<code>deploy_build_after<\/code> och <code>deploy_finalize_before<\/code>\/<code>deploy_finalize_after<\/code>, samt hooks f\u00f6r varje st\u00f6rre steg (initialize, update, prepare, build, share, finalize).<\/p>\n\n\n\n<p>Det \u00f6ppnar f\u00f6r m\u00f6nster som ofta saknas i WordPress-deployer:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Ta backup p\u00e5 databasen f\u00f6re deploy.<\/li>\n\n\n<li>Rensa cache efter deploy (page cache, object cache, CDN purge beroende p\u00e5 setup).<\/li>\n\n\n<li>Skicka deploy-notiser till teamet (t.ex. Slack via webhook).<\/li>\n\n\n<li>K\u00f6ra enkla smoke tests mot den nya releasen innan\/efter att <code>current<\/code> pekas om.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Kom ig\u00e5ng: Trellis f\u00f6r deploy \u00e4ven om du utvecklar lokalt p\u00e5 annat s\u00e4tt<\/h2>\n\n\n\n<p>Ett smidigt s\u00e4tt att b\u00f6rja \u00e4r att anv\u00e4nda Trellis som deploy-motor, men beh\u00e5lla din befintliga lokala milj\u00f6. Uppl\u00e4gget som Roots rekommenderar \u00e4r i korthet:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>S\u00e4tt upp projektet med <a href=\"https:\/\/roots.io\/bedrock\/\">Bedrock<\/a> f\u00f6r en modernare WordPress-struktur.<\/li>\n\n\n<li>Installera och konfigurera <a href=\"https:\/\/roots.io\/trellis\/\">Trellis<\/a> f\u00f6r din servermilj\u00f6\/deploy.<\/li>\n\n\n<li>Fyll i <code>wordpress_sites.yml<\/code> med information om ditt Git-repo och relevanta inst\u00e4llningar.<\/li>\n\n\n<li>K\u00f6r <code>trellis deploy production<\/code>.<\/li>\n\n<\/ol>\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\">F\u00f6rsta deployen tar l\u00e4ngst tid<\/h4>\n\n\n<p>F\u00f6rsta k\u00f6rningen beh\u00f6ver skapa katalogstruktur och installera dependencies. Efterf\u00f6ljande deployer g\u00e5r snabbare \u2013 och framf\u00f6r allt utan att sajten hamnar i ett halvuppdaterat l\u00e4ge.<\/p>\n\n<\/div>\n\n\n\n<p>En annan detalj som ofta uppskattas \u00e4r att Trellis kan deploya till servrar du inte provisionerat med Trellis. Det g\u00f6r det enklare att anv\u00e4nda atomiska deployer \u00e4ven p\u00e5 managed hosts, s\u00e5 l\u00e4nge uppl\u00e4gget till\u00e5ter den typen av release-struktur och syml\u00e4nkar.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Referenser \/ K\u00e4llor<\/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\">Deployments (Trellis docs)<\/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 docs)<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Om du fortfarande deployar WordPress genom att skriva \u00f6ver filer live \u00e4r du ett felsteg fr\u00e5n vita sk\u00e4rmar och sv\u00e5r fels\u00f6kning. Trellis l\u00f6ser det med atomiska releaser, syml\u00e4nkar och rollback p\u00e5 sekunder.<\/p>\n","protected":false},"author":61,"featured_media":130,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[68,74,75,73,10],"class_list":["post-133","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-bedrock","tag-deploy","tag-devops","tag-trellis","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts\/133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/users\/61"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/comments?post=133"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts\/133\/revisions"}],"predecessor-version":[{"id":147,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/posts\/133\/revisions\/147"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/media\/130"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/media?parent=133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/categories?post=133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/sv\/wp-json\/wp\/v2\/tags?post=133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}