{"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\/fr\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry","title":{"rendered":"Support monorepo et multirepo dans werf et quel rapport avec Docker Registry","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Support monorepo et multirepo dans werf et quel rapport avec Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/7bd2036d8e53b04965212698a209d4c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe sujet du monorepo a d\u00e9j\u00e0 \u00e9t\u00e9 discut\u00e9 \u00e0 plusieurs reprises et, en g\u00e9n\u00e9ral, suscite des d\u00e9bats assez anim\u00e9s. En cr\u00e9ant <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex> un outil Open Source destin\u00e9 \u00e0 am\u00e9liorer lesprocessus de construction de code d'applications \u00e0 partir de Git en images Docker (et leur livraison subs\u00e9quente dans Kubernetes), nous r\u00e9fl\u00e9chissons peu \u00e0 la question de savoir quel choix est le meilleur. Pour nous, il est prioritaire de fournir tout ce qu'il faut pour les partisans de diff\u00e9rents avis (si cela ne contredit pas le bon sens, bien s\u00fbr).<\/p>\n<p>La r\u00e9cente prise en charge du mono-repo dans werf en est un bon exemple. Mais d'abord, clarifions comment cette prise en charge est li\u00e9e \u00e0 l'utilisation de werf et quel est le rapport avec Docker Registry...<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Probl\u00e9matique<\/h2>\n<p>\nImaginons une telle situation. Dans une entreprise, plusieurs \u00e9quipes de d\u00e9veloppeurs travaillent sur des projets ind\u00e9pendants. La majorit\u00e9 des applications fonctionnent dans Kubernetes, et donc \u2014 sont conteneuris\u00e9es. Pour stocker les conteneurs et les images, il faut un registre (registry). Dans cette entreprise, Docker Hub est utilis\u00e9 avec un seul compte <code>COMPANY<\/code>. Par analogie avec la plupart des syst\u00e8mes de stockage de code source, <b>Docker Hub ne permet pas de cr\u00e9er une hi\u00e9rarchie imbriqu\u00e9e de d\u00e9p\u00f4ts<\/b>, comme <code>COMPANY\/PROJECT\/IMAGE<\/code>. Dans ce cas... comment g\u00e9rer cette limitation pour stocker des applications non monolithiques dans le registre sans cr\u00e9er un compte s\u00e9par\u00e9 pour chaque projet ? <\/p>\n<p><img decoding=\"async\" alt=\"Support monorepo et multirepo dans werf et quel rapport avec Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/b7905fab48723a123bee536e1fe56c5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPeut-\u00eatre que la situation d\u00e9crite est famili\u00e8re \u00e0 certains, mais examinons la question de l'organisation du stockage des applications en g\u00e9n\u00e9ral, c'est-\u00e0-dire sans se limiter \u00e0 l'exemple mentionn\u00e9 ci-dessus et \u00e0 Docker Hub.<\/p>\n<h3>Voies de solution<\/h3>\n<p>\nSi l'application <b>est monolithique<\/b>, livr\u00e9e dans une seule image, il n'y a pas de questions et nous sauvegardons simplement les images dans le registre des conteneurs du projet.<\/p>\n<p>Quand l'application est pr\u00e9sent\u00e9e sous la forme de plusieurs composants, <b>microservices<\/b>, il faut choisir une approche d\u00e9finie. Prenons l'exemple d'une application web typique, compos\u00e9e de deux images : <code>frontend<\/code> et <code>backend<\/code> \u2014 les options possibles sont :<\/p>\n<ol>\n<li> Stocker les images dans des d\u00e9p\u00f4ts imbriqu\u00e9s s\u00e9par\u00e9s :\n<p><img decoding=\"async\" alt=\"Support monorepo et multirepo dans werf et quel rapport avec Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/a05bfdaec10ea7b4542200c6a2bb4939.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Tout conserver dans un seul d\u00e9p\u00f4t, en consid\u00e9rant le nom de l'image dans le tag, par exemple, comme suit :\n<p><img decoding=\"async\" alt=\"Support monorepo et multirepo dans werf et quel rapport avec Docker Registry\" src=\"\/wp-content\/uploads\/2019\/09\/83498b5bcdf7a57dfe933295e78fc785.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<\/ol>\n<p>\n<i><b>NB<\/b>: En fait, il existe encore une option avec le stockage dans diff\u00e9rents d\u00e9p\u00f4ts, <code>PROJECT-frontend<\/code> et <code>PROJECT-backend<\/code>, mais nous ne la consid\u00e9rerons pas en raison de la complexit\u00e9 de la prise en charge, de l'organisation et de la distribution des droits entre les utilisateurs.<\/i><\/p>\n<h2>Prise en charge dans werf<\/h2>\n<p>\n\u00c0 l'origine, werf se limitait aux d\u00e9p\u00f4ts imbriqu\u00e9s, ce qui est pratique \u00e9tant donn\u00e9 que la plupart des registres supportent cette fonctionnalit\u00e9. \u00c0 partir de la 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>, le support des registres o\u00f9 <b>l'imbrication n'est pas prise en charge<\/b>, y compris Docker Hub, a \u00e9t\u00e9 ajout\u00e9. D\u00e8s lors, l'utilisateur a eu le choix de la mani\u00e8re de stocker les images de l'application.<\/p>\n<p>L'impl\u00e9mentation est disponible via l'option <code>--images-repo-mode=multirepo|monorepo<\/code> (par d\u00e9faut, <code>multirepo<\/code>, c'est-\u00e0-dire le stockage dans des d\u00e9p\u00f4ts imbriqu\u00e9s). Elle d\u00e9finit les mod\u00e8les selon lesquels les images sont stock\u00e9es dans le registre. Il suffit de choisir le mode appropri\u00e9 lors de l'utilisation des commandes principales, tout le reste restant inchang\u00e9.<\/p>\n<p>\u00c9tant donn\u00e9 que la plupart des options de werf peuvent \u00eatre d\u00e9finies par <b>des variables d'environnement<\/b>, dans les syst\u00e8mes CI\/CD, le mode de stockage est g\u00e9n\u00e9ralement facilement configur\u00e9 de mani\u00e8re globale pour l'ensemble du projet. Par exemple, <b>dans le cas de GitLab,<\/b> il suffit d'ajouter une variable d'environnement dans les param\u00e8tres du projet : <i>R\u00e9glages -&gt; CI \/ CD -&gt; Variables : <code>WERF_IMAGES_REPO_MODE: multirepo|monorepo<\/code><\/i>.<\/p>\n<p>Concernant la publication des images et le d\u00e9ploiement des applications (ces processus sont expliqu\u00e9s en d\u00e9tail dans les articles correspondants de la documentation : <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/publish_process.html\">Processus de publication<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/deploy_process\/deploy_into_kubernetes.html\">Processus de d\u00e9ploiement<\/a><\/noindex>), le mode d\u00e9termine exclusivement le mod\u00e8le utilis\u00e9 pour travailler avec l'image.<\/p>\n<h3>Le diable est dans les d\u00e9tails<\/h3>\n<p>\nLa diff\u00e9rence et la principale difficult\u00e9 lors de l'ajout d'un nouveau mode de stockage se trouvent dans le processus de nettoyage du registre <i>(pour plus d'informations sur les capacit\u00e9s de nettoyage prises en charge par werf, voir <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/documentation\/reference\/cleaning_process.html\">Processus de nettoyage<\/a><\/noindex>)<\/i>.<\/p>\n<p>Lors du nettoyage, werf prend en compte les images utilis\u00e9es dans les clusters Kubernetes, ainsi que les politiques d\u00e9finies par l'utilisateur. La base des politiques repose sur la division des balises en strat\u00e9gies. Les strat\u00e9gies actuellement prises en charge sont :<\/p>\n<ol>\n<li> 3 strat\u00e9gies li\u00e9es aux primitives Git, telles que la balise, la branche et le commit ;<\/li>\n<li> 1 strat\u00e9gie pour les balises utilisateur arbitraires.<\/li>\n<\/ol>\n<p>\nLes informations concernant la strat\u00e9gie de balise sont conserv\u00e9es lors de la publication de l'image dans les labels de l'image finale. La valeur elle-m\u00eame \u2014 le soi-disant <b>m\u00e9tatag<\/b> \u2014 est n\u00e9cessaire pour l'application de certaines politiques. Par exemple, il est logique de supprimer les <i>images<\/i> non utilis\u00e9es du registre lors de la suppression d'une branche ou d'une balise dans le d\u00e9p\u00f4t Git, ce que couvre une partie de nos politiques.<\/p>\n<p>Lors de la sauvegarde dans un m\u00eame d\u00e9p\u00f4t (<code>monorepo<\/code>), outre le m\u00e9tatag, le nom de l'image peut \u00e9galement \u00eatre stock\u00e9 dans la balise de l'image : <code>PROJET :<b>frontend<\/b>-META-TAG<\/code>. Pour les s\u00e9parer, nous n'avons pas introduit de s\u00e9parateur sp\u00e9cifique, mais avons simplement ajout\u00e9 la valeur n\u00e9cessaire dans l'\u00e9tiquette de l'image finale lors de la publication.<\/p>\n<p><i><b>NB<\/b>Si vous souhaitez voir tout ce qui est d\u00e9crit dans le code source de werf, le point de d\u00e9part peut \u00eatre <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\/pull\/1684\/files\">PR 1684<\/a><\/noindex>.<\/i><\/p>\n<p>Dans cet article, nous ne nous attarderons pas davantage sur la probl\u00e9matique et la justification de notre approche : des strat\u00e9gies d'\u00e9tiquetage, du stockage des donn\u00e9es dans les \u00e9tiquettes et du processus de publication en g\u00e9n\u00e9ral \u2014 tout cela a \u00e9t\u00e9 d\u00e9crit en d\u00e9tail dans le r\u00e9cent rapport de Dmitri Stolyarov : \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf \u2014 notre outil pour CI\/CD dans Kubernetes<\/a><\/noindex>\u00bb.<\/p>\n<h2>En r\u00e9sum\u00e9<\/h2>\n<p>\nL'absence de prise en charge des registres non imbriqu\u00e9s n'\u00e9tait pas un facteur bloquant pour nous ou pour les utilisateurs de werf que nous connaissons \u2014 il est toujours possible de cr\u00e9er un registre d'images s\u00e9par\u00e9 (ou de passer \u00e0 un registre de conteneurs dans Google Cloud)... Cependant, lever une telle limitation semblait logique pour rendre l'outil plus pratique pour une communaut\u00e9 DevOps plus large. En r\u00e9alisant cela, nous avons \u00e9t\u00e9 confront\u00e9s \u00e0 la principale difficult\u00e9 de la refonte du m\u00e9canisme de nettoyage du registre de conteneurs. Maintenant que tout est pr\u00eat, c'est agr\u00e9able de savoir que cela a facilit\u00e9 les choses pour quelqu'un, et nous (en tant que principaux d\u00e9veloppeurs du projet) ne pr\u00e9voyons pas de difficult\u00e9s majeures dans le support futur de cette fonctionnalit\u00e9.<\/p>\n<p>Restez avec nous et tr\u00e8s bient\u00f4t nous parlerons des autres nouveaut\u00e9s dans <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/werf\">werf<\/a><\/noindex>!<\/p>\n<h2>P.S.<\/h2>\n<p>\nLisez aussi dans notre blog :<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/463613\/\">Il est d\u00e9sormais possible de cr\u00e9er des images Docker dans werf en utilisant un Dockerfile classique.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/460351\/\">werf est notre outil pour CI\/CD dans Kubernetes (aper\u00e7u et vid\u00e9o de la pr\u00e9sentation).<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source : <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.2 - 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\/fr\/blog\/administrirovanie\/podderzhka-monorepo-i-multirepo-v-werf-i-pri-chyom-zdes-docker-registry\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Support de monorepo et multirepo dans werf et quel est le lien avec Docker Registry | ProHoster","description":"Le th\u00e8me du monorepo.","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/37667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=37667"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37667\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/28270"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=37667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=37667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=37667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}