{"id":37667,"date":"2019-10-31T22:18:58","date_gmt":"2019-10-31T19:18:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\/"},"modified":"2019-10-31T22:18:58","modified_gmt":"2019-10-31T19:18:58","slug":"podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","title":{"rendered":"St\u00f6d f\u00f6r monorepo och multirepo i werf och vad Docker Registry har med det att g\u00f6ra","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"St\u00f6d f\u00f6r monorepo och multirepo i werf och vad Docker Registry har med det att g\u00f6ra\" src=\"\/wp-content\/uploads\/2019\/09\/7bd2036d8e53b04965212698a209d4c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c4mnet monorepo har diskuterats flera g\u00e5nger och brukar oftast leda till ganska livliga diskussioner. N\u00e4r vi skapar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex> som ett Open Source-verktyg som syftar till att f\u00f6rb\u00e4ttra bygprocesserna f\u00f6r applikationskod fr\u00e5n Git till Docker-avbilder (och deras efterf\u00f6ljande leverans till Kubernetes), t\u00e4nker vi s\u00e4llan p\u00e5 vilket val som \u00e4r b\u00e4st. F\u00f6r oss \u00e4r det prim\u00e4ra att tillhandah\u00e5lla allt n\u00f6dv\u00e4ndigt f\u00f6r anh\u00e4ngare av olika \u00e5sikter (om det inte strider mot sunt f\u00f6rnuft, f\u00f6rst\u00e5s).<\/p>\n<p>Det nyligen tillkomna st\u00f6det f\u00f6r mono-repo i werf \u00e4r ett bra exempel p\u00e5 detta. Men l\u00e5t oss f\u00f6rst f\u00f6rst\u00e5 hur detta st\u00f6d \u00f6verhuvudtaget relaterar till anv\u00e4ndningen av werf och vad Docker Registry har att g\u00f6ra med det\u2026<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Problemomr\u00e5det<\/h2>\n<p>\nL\u00e5t oss f\u00f6rest\u00e4lla oss en situation. F\u00f6retaget har m\u00e5nga utvecklingsteam som arbetar med oberoende projekt. De flesta applikationer k\u00f6rs i Kubernetes och \u00e4r d\u00e4rf\u00f6r containrar. F\u00f6r att lagra containrar och avbilder kr\u00e4vs ett register (registry). I f\u00f6retaget anv\u00e4nds Docker Hub med en enda konto <code>F\u00d6RETAG<\/code>. I likhet med de flesta system f\u00f6r lagring av k\u00e4llkod, <b>till\u00e5ter Docker Hub inte att skapa en inre hierarki av f\u00f6rr\u00e5d<\/b>, s\u00e5som <code>F\u00d6RETAG\/PROJEKT\/BILD<\/code>. I s\u00e5 fall\u2026 hur ska vi lagra icke-monolitiska applikationer i registret utan att skapa ett separat konto f\u00f6r varje projekt? <\/p>\n<p><img decoding=\"async\" alt=\"St\u00f6d f\u00f6r monorepo och multirepo i werf och vad Docker Registry har med det att g\u00f6ra\" src=\"\/wp-content\/uploads\/2019\/09\/b7905fab48723a123bee536e1fe56c5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u00f6jligen k\u00e4nns den beskrivna situationen bekant f\u00f6r n\u00e5gon, men l\u00e5t oss titta p\u00e5 fr\u00e5gan om organisationen av lagring av applikationer generellt, dvs utan att knyta det till det ovan beskrivna exemplet och Docker Hub.<\/p>\n<h3>L\u00f6sningar<\/h3>\n<p>\nOm applikationen <b>\u00e4r monolitisk<\/b>, levereras i en bild, s\u00e5 uppst\u00e5r inga fr\u00e5gor och vi sparar helt enkelt avbilder i projektets containerregister.<\/p>\n<p>N\u00e4r applikationen presenteras i flera komponenter, <b>mikrotj\u00e4nster<\/b>, kr\u00e4vs det att en viss metod v\u00e4ljs. Med ett exempel av en typisk webbapplikation som best\u00e5r av tv\u00e5 avbilder: <code>front-end<\/code> och <code>backend<\/code> \u2014 m\u00f6jliga alternativ \u00e4r:<\/p>\n<ol>\n<li> Spara avbilder i separata inre f\u00f6rr\u00e5d:\n<p><img decoding=\"async\" alt=\"St\u00f6d f\u00f6r monorepo och multirepo i werf och vad Docker Registry har med det att g\u00f6ra\" src=\"\/wp-content\/uploads\/2019\/09\/a05bfdaec10ea7b4542200c6a2bb4939.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Spara allt i ett f\u00f6rr\u00e5d och ta h\u00e4nsyn till bildens namn i taggen, till exempel p\u00e5 f\u00f6ljande s\u00e4tt:\n<p><img decoding=\"async\" alt=\"St\u00f6d f\u00f6r monorepo och multirepo i werf och vad Docker Registry har med det att g\u00f6ra\" src=\"\/wp-content\/uploads\/2019\/09\/83498b5bcdf7a57dfe933295e78fc785.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ol>\n<p>\n<i><b>NB<\/b>: Faktiskt finns det ett ytterligare alternativ med att spara i olika f\u00f6rr\u00e5d, <code>PROJEKT-frontend<\/code> och <code>PROJEKT-backend<\/code>, men vi kommer inte att \u00f6verv\u00e4ga det p\u00e5 grund av sv\u00e5righeterna med st\u00f6d, organisation och f\u00f6rdelning av r\u00e4ttigheter mellan anv\u00e4ndare.<\/i><\/p>\n<h2>St\u00f6d i werf<\/h2>\n<p>\nInitialt begr\u00e4nsade werf sig till inneslutna register \u2014 lyckligtvis st\u00f6der de flesta register den m\u00f6jligheten. Fr\u00e5n och med version <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/releases\/tag\/v1.0.4-alpha.3\">v1.0.4-alpha.3<\/a><\/noindex>, har arbete med register d\u00e4r <b>inb\u00e4ddning inte st\u00f6ds<\/b>, inklusive Docker Hub. Fr\u00e5n och med nu hade anv\u00e4ndaren valet att lagra applikationsbilder.<\/p>\n<p>Implementeringen \u00e4r tillg\u00e4nglig inom alternativet <code>--images-repo-mode=multirepo|monorepo<\/code> (som standard <code>multirepo<\/code>, dvs. lagring i inneslutna register). Det definierar m\u00f6nstren f\u00f6r hur bilder lagras i registret. Det r\u00e4cker att v\u00e4lja r\u00e4tt l\u00e4ge n\u00e4r man anv\u00e4nder huvudkommandon, s\u00e5 f\u00f6rblir allt annat of\u00f6r\u00e4ndrat.<\/p>\n<p>Eftersom de flesta alternativen i werf kan st\u00e4llas in med <b>milj\u00f6variabler<\/b>, \u00e4r lagringsl\u00e4get vanligtvis enkelt att ange globalt f\u00f6r hela projektet i CI\/CD-system. Till exempel, <b>i fallet med GitLab<\/b> r\u00e4cker det med att l\u00e4gga till en milj\u00f6variabel i projektinst\u00e4llningarna: <i>Settings -&gt; CI \/ CD -&gt; Variables: <code>WERF_IMAGES_REPO_MODE: multirepo|monorepo<\/code><\/i>.<\/p>\n<p>N\u00e4r det kommer till publicering av bilder och distribution av applikationer (dessa processer beskrivs i detalj i de motsvarande artiklarna i dokumentationen: <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/publish_process.html\">Publish process<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/deploy_process\/deploy_into_kubernetes.html\">Deploy process<\/a><\/noindex>), s\u00e5 best\u00e4mmer l\u00e4get enbart m\u00f6nstret f\u00f6r hur man kan arbeta med bilden.<\/p>\n<h3>Demon ligger i detaljerna<\/h3>\n<p>\nSkillnaden och den st\u00f6rsta utmaningen vid till\u00e4gg av ett nytt lagringss\u00e4tt \u2014 vid st\u00e4dning av registret <i>(borttagning av m\u00f6jligheter, st\u00f6djs av werf, se i <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/cleaning_process.html\">Cleaning process<\/a><\/noindex>)<\/i>.<\/p>\n<p>Vid st\u00e4dning tar werf h\u00e4nsyn till de bilder som anv\u00e4nds i Kubernetes-kluster, samt de riktlinjer som anv\u00e4ndaren st\u00e4ller in. Policyn baseras p\u00e5 uppdelning av taggar i strategier. F\u00f6r n\u00e4rvarande st\u00f6ds f\u00f6ljande strategier:<\/p>\n<ol>\n<li> 3 strategier relaterade till Git-primitiv, s\u00e5som tagg, gren och commit;<\/li>\n<li> 1 strategi f\u00f6r godtyckliga anv\u00e4ndartaggar.<\/li>\n<\/ol>\n<p>\nInformationen om taggstrategin sparas vid publicering av bilden i etiketter f\u00f6r den slutliga bilden. Sj\u00e4lva v\u00e4rdet \u2014 den s\u00e5 kallade <b>metataggen<\/b> \u2014 \u00e4r n\u00f6dv\u00e4ndig f\u00f6r till\u00e4mpning av vissa riktlinjer. Till exempel, vid borttagning av en gren eller tagg fr\u00e5n Git-repositoriet, \u00e4r det logiskt att ta bort ocks\u00e5 relaterade <i>oanv\u00e4nda<\/i> bilder fr\u00e5n registret, vilket omfattas av vissa av v\u00e5ra riktlinjer.<\/p>\n<p>Vid lagring i ett enda register (<code>monorepo<\/code>), kan f\u00f6rutom metataggen \u00e4ven namnet p\u00e5 bilden lagras i taggen f\u00f6r bilden: <code>PROJEKT:<b>front-end<\/b>-META-TAG<\/code>. F\u00f6r att separera dem anv\u00e4nde vi ingen specifik avskiljare utan lade bara till det n\u00f6dv\u00e4ndiga v\u00e4rdet i etiketten f\u00f6r den slutliga bilden vid publicering.<\/p>\n<p><i><b>NB<\/b>: Om du \u00e4r intresserad av att se allt som beskrivs i k\u00e4llkoden f\u00f6r werf, kan en utg\u00e5ngspunkt vara <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/pull\/1684\/files\">PR 1684<\/a><\/noindex>.<\/i><\/p>\n<p>I denna artikel kommer vi inte att \u00e4gna mer uppm\u00e4rksamhet \u00e5t problematiken och motiveringen bakom v\u00e5r metod: strategier f\u00f6r taggning, datalagring i etiketter och publiceringsprocessen i allm\u00e4nhet \u2014 det har allt beskrivits utf\u00f6rligt i en recent rapport av Dmitrij Stolyarov: \u201c<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 v\u00e5rt verktyg f\u00f6r CI\/CD i Kubernetes<\/a><\/noindex>\u00bb.<\/p>\n<h2>Sammanfattningsvis<\/h2>\n<p>\nAvsaknaden av st\u00f6d f\u00f6r register utan inb\u00e4ddning var inte ett blockerande faktor f\u00f6r oss eller k\u00e4nda anv\u00e4ndare av werf \u2014 eftersom det alltid g\u00e5r att starta ett separat bildregister (eller \u00f6verg\u00e5 till det hypotetiska Container Registry i Google Cloud)\u2026 Men att ta bort en s\u00e5dan begr\u00e4nsning verkade logiskt f\u00f6r att g\u00f6ra verktyget mer anv\u00e4ndarv\u00e4nligt f\u00f6r det bredare DevOps-gemenskapen. N\u00e4r vi genomf\u00f6rde det st\u00f6tte vi p\u00e5 den st\u00f6rsta sv\u00e5righeten i omarbetningen av mekanismen f\u00f6r att rensa containerregistret. Nu n\u00e4r allt \u00e4r klart \u00e4r det trevligt att inse att det har blivit l\u00e4ttare f\u00f6r n\u00e5gon, och vi (som de fr\u00e4msta utvecklarna av projektet) inte f\u00f6rutser n\u00e5gra m\u00e4rkbara sv\u00e5righeter i det framtida underh\u00e5llet av denna funktion.<\/p>\n<p>Forts\u00e4tt att f\u00f6lja oss s\u00e5 kommer vi snart att ber\u00e4tta om andra nyheter inom <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>!<\/p>\n<h2>P.S.<\/h2>\n<p>\nL\u00e4s \u00e4ven i v\u00e5r blogg:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/463613\/\">Att samla Docker-bilder i werf \u00e4r nu ocks\u00e5 m\u00f6jligt med en vanlig Dockerfile<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 v\u00e5rt verktyg f\u00f6r CI\/CD i Kubernetes (\u00f6versikt och videof\u00f6rel\u00e4sning)<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0430\u0441\u044c \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437 \u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043f\u043e\u0440\u044b. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f werf \u043a\u0430\u043a Open Source-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 Git \u0432 Docker-\u043e\u0431\u0440\u0430\u0437\u044b (\u0438 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 Kubernetes), \u043c\u044b \u043c\u0430\u043b\u043e \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0435\u043c \u043d\u0430 \u0442\u0435\u043c\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043b\u0443\u0447\u0448\u0435. \u0414\u043b\u044f \u043d\u0430\u0441 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u043d\u0435\u043d\u0438\u0439 (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28270,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37667","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 monorepo \u0438 multirepo \u0432 werf \u0438 \u043f\u0440\u0438 \u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c Docker Registry | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:18:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:18:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47St\u00f6d f\u00f6r monorepo och multirepo i werf och vad Docker Registry har med det att g\u00f6ra | ProHoster","description":"\u00c4mnet om monorepo.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 monorepo \u0438 multirepo \u0432 werf \u0438 \u043f\u0440\u0438 \u0447\u0451\u043c \u0437\u0434\u0435\u0441\u044c Docker Registry | ProHoster","og:description":"\u0422\u0435\u043c\u0430 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:18:58+00:00","article:modified_time":"2019-10-31T19:18:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37667","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:48:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:22:29","updated":"2026-01-23 18:48:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/37667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=37667"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/37667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/28270"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=37667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=37667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=37667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}