{"id":39476,"date":"2019-10-31T22:33:41","date_gmt":"2019-10-31T19:33:41","guid":{"rendered":"https:\/\/prohoster.info\/blog\/legkoe-upravlenie-konfiguratsiyami-mikroservisov-s-pomoshhyu-microconfig-io\/"},"modified":"2019-10-31T22:33:41","modified_gmt":"2019-10-31T19:33:41","slug":"legkoe-upravlenie-konfiguratsiyami-mikroservisov-s-pomoshhyu-microconfig-io","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/legkoe-upravlenie-konfiguratsiyami-mikroservisov-s-pomoshhyu-microconfig-io","title":{"rendered":"F\u00e1cil gesti\u00f3n de configuraciones de microservicios con microconfig.io","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Uno de los principales problemas al desarrollar y posteriormente operar microservicios es la correcta y cuidadosa configuraci\u00f3n de sus instancias. En esto, a mi parecer, puede ayudar un nuevo marco. <noindex><a rel=\"nofollow\" href=\"http:\/\/microconfig.io\">microconfig.io<\/a><\/noindex>. Permite resolver de manera bastante elegante algunas tareas rutinarias de configuraci\u00f3n de aplicaciones. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nSi tienes muchos microservicios, y cada uno de ellos viene con su propio archivo\/archivos de configuraci\u00f3n, hay una alta probabilidad de cometer un error en uno de ellos, que sin la debida habilidad y un sistema de registro puede ser muy dif\u00edcil de detectar. La tarea principal que se plantea el marco es minimizar los par\u00e1metros redundantes de configuraci\u00f3n de la instancia, reduciendo as\u00ed la probabilidad de introducir errores.<\/p>\n<p>Veamos un ejemplo. Supongamos que hay una aplicaci\u00f3n simple con un archivo de configuraci\u00f3n. <b>yaml<\/b>Esto puede ser cualquier microservicio en cualquier lenguaje. Veamos c\u00f3mo se puede aplicar el marco a este servicio. <\/p>\n<p>Pero antes, para mayor comodidad, crearemos un proyecto vac\u00edo en Idea IDE, habiendo instalado previamente el complemento microconfig.io. <\/p>\n<p><img decoding=\"async\" alt=\"F\u00e1cil gesti\u00f3n de configuraciones de microservicios con microconfig.io\" src=\"\/wp-content\/uploads\/2019\/10\/e2809b31309a80cf6909cf554081e895.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nConfiguramos la configuraci\u00f3n de lanzamiento del complemento; se puede usar la configuraci\u00f3n predeterminada, como en la captura de pantalla de arriba.<\/p>\n<p>Nuestro servicio se llama order, entonces en el nuevo proyecto crearemos una estructura similar:<\/p>\n<p><img decoding=\"async\" alt=\"F\u00e1cil gesti\u00f3n de configuraciones de microservicios con microconfig.io\" src=\"\/wp-content\/uploads\/2019\/10\/a1edb8aa2e5dae3867cfff78276ebb8d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn la carpeta con el nombre del servicio colocamos el archivo de configuraci\u00f3n - <b>application.yaml<\/b>. Todos los microservicios se ejecutan en alg\u00fan entorno, por lo que, adem\u00e1s de crear la configuraci\u00f3n del propio servicio, es necesario describir el entorno: para esto crearemos una carpeta <b>envs<\/b> y agregaremos en ella un archivo con el nombre de nuestro entorno de trabajo. De esta manera, el marco crear\u00e1 archivos de configuraci\u00f3n para los servicios en el entorno <b>dev<\/b>, ya que en la configuraci\u00f3n del complemento se ha establecido precisamente este par\u00e1metro.<\/p>\n<p>Estructura del archivo <b>dev.yaml<\/b> ser\u00e1 bastante simple: <\/p>\n<pre><code class=\"plaintext\">mainorder:\n    components:\n         - order<\/code><\/pre>\n<p>\nEl marco trabaja con configuraciones que est\u00e1n agrupadas. Para nuestro servicio elegiremos un nombre para el grupo <b>mainorder<\/b>. El marco encuentra cada uno de estos grupos de aplicaciones en el archivo de entornos y crea configuraciones para todos ellos que se encuentran en las carpetas correspondientes. <\/p>\n<p>En el propio archivo de configuraci\u00f3n del servicio <b>order<\/b> indiquemos por ahora solo un par\u00e1metro: <\/p>\n<pre><code class=\"plaintext\">spring.application.name: order<\/code><\/pre>\n<p>\nAhora ejecutaremos el complemento, y generar\u00e1 la configuraci\u00f3n necesaria para nuestro servicio seg\u00fan la ruta especificada en las propiedades:<\/p>\n<p><img decoding=\"async\" alt=\"F\u00e1cil gesti\u00f3n de configuraciones de microservicios con microconfig.io\" src=\"\/wp-content\/uploads\/2019\/10\/9099990c05fd3c6ef0549f231dc84fb5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe puede <noindex><a rel=\"nofollow\" href=\"https:\/\/microconfig.io\/#\/?id=running-the-config-build\">prescindir<\/a><\/noindex> y sin necesidad de instalar un plugin, simplemente descargando la distribuci\u00f3n del framework y ejecut\u00e1ndolo desde la l\u00ednea de comandos.<br \/>\nEsta soluci\u00f3n es adecuada para su uso en un servidor de compilaci\u00f3n.<\/p>\n<p>Cabe destacar que el framework entiende perfectamente <b>property<\/b> la sintaxis, es decir, archivos de propiedades comunes que se pueden utilizar junto con <b>yaml<\/b> configuraciones.<\/p>\n<p>Agreguemos otro servicio <b>payment<\/b> y al mismo tiempo complejizaremos el existente.<br \/>\nEn <b>order<\/b>:<\/p>\n<pre><code class=\"plaintext\">eureka:\n instance.preferIpAddress: true\n client:\n   serviceUrl:\n     defaultZone: http:\/\/192.89.89.111:6782\/eureka\/\nserver.port: 9999\nspring.application.name: order\ndb.url: 192.168.0.100<\/code><\/pre>\n<p>\nEn <b>payment<\/b>:<\/p>\n<pre><code class=\"plaintext\">eureka:\n instance.preferIpAddress: true\n client:\n   serviceUrl:\n     defaultZone: http:\/\/192.89.89.111:6782\/eureka\/\nserver.port: 9998\nspring.application.name: payments\ndb.url: 192.168.0.100<\/code><\/pre>\n<p>\nEl principal problema de estas configuraciones es la gran cantidad de c\u00f3digo repetido en la configuraci\u00f3n de los servicios. Veamos c\u00f3mo el framework puede ayudar a eliminarlo. Comencemos con lo m\u00e1s obvio: la presencia de la configuraci\u00f3n <b>eureka<\/b> en la descripci\u00f3n de cada microservicio. Crearemos un nuevo directorio con un archivo de configuraci\u00f3n y a\u00f1adiremos una nueva configuraci\u00f3n:<\/p>\n<p><img decoding=\"async\" alt=\"F\u00e1cil gesti\u00f3n de configuraciones de microservicios con microconfig.io\" src=\"\/wp-content\/uploads\/2019\/10\/8b7467a3bd5b22cac5b44c0681ac17fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nY en cada uno de nuestros proyectos ahora a\u00f1adiremos la l\u00ednea <i>#include eureka<\/i>.<\/p>\n<p>El framework encontrar\u00e1 autom\u00e1ticamente la configuraci\u00f3n de eureka y la copiar\u00e1 en los archivos de configuraci\u00f3n de los servicios, mientras que no se crear\u00e1 una configuraci\u00f3n de eureka separada, ya que no la especificaremos en el archivo de entorno <b>dev.yaml<\/b>. El servicio <b>order<\/b>:<\/p>\n<pre><code class=\"1c\">#include eureka\nserver.port: 9999\nspring.application.name: order\ndb.url: 192.168.0.100<\/code><\/pre>\n<p>\nTambi\u00e9n podemos extraer la configuraci\u00f3n de la base de datos en una configuraci\u00f3n separada, cambiando la l\u00ednea de importaci\u00f3n a <i>#include eureka, oracle<\/i>.<\/p>\n<p>Cabe destacar que cada cambio al regenerar los archivos de configuraci\u00f3n es rastreado por el framework y se coloca en un archivo especial junto al archivo de configuraci\u00f3n principal. La entrada en su registro se ve as\u00ed: \u201cStored 1 property changes to <b>order\/diff-application.yaml<\/b>\u201d. Esto permite detectar r\u00e1pidamente cambios en archivos de configuraci\u00f3n grandes.<\/p>\n<p>Extraer partes comunes de la configuraci\u00f3n ayuda a eliminar mucho c\u00f3digo repetido innecesario, pero no permite crear configuraciones flexibles para diferentes entornos: los endpoints de nuestros servicios son \u00fanicos y est\u00e1n codificados, lo cual es malo. Intentemos eliminarlo.<\/p>\n<p>Una buena soluci\u00f3n ser\u00eda mantener todos los endpoints en una sola configuraci\u00f3n a la que los dem\u00e1s pudieran referirse. Para ello, el framework ha implementado el soporte de placeholders. As\u00ed es como cambiar\u00e1 el archivo de configuraci\u00f3n <b>eureka<\/b>:<\/p>\n<pre><code class=\"plaintext\"> client:\n   serviceUrl:\n     defaultZone: http:\/\/${endpoints@eurekaip}:6782\/eureka\/<\/code><\/pre>\n<p>\nAhora veamos c\u00f3mo funciona este placeholder. El sistema encuentra el componente llamado <b>endpoints<\/b> y busca en \u00e9l el valor <b>eurekaip<\/b>, luego lo integra en nuestra configuraci\u00f3n. Pero, \u00bfc\u00f3mo manejar diferentes entornos? Para ello, crearemos un archivo de configuraci\u00f3n en <b>endpoints<\/b> el siguiente formato <b>application.dev.yaml<\/b>. El framework, de acuerdo con la extensi\u00f3n del archivo, decide a qu\u00e9 entorno pertenece esta configuraci\u00f3n y la carga:<\/p>\n<p><img decoding=\"async\" alt=\"F\u00e1cil gesti\u00f3n de configuraciones de microservicios con microconfig.io\" src=\"\/wp-content\/uploads\/2019\/10\/c46cf097a0efb1d578a126858077a76b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nContenido del archivo dev:<\/p>\n<pre><code class=\"plaintext\">eurekaip: 192.89.89.111\ndbip: 192.168.0.100<\/code><\/pre>\n<p>\nPodemos crear una configuraci\u00f3n similar para los puertos de nuestros servicios:<\/p>\n<pre><code class=\"plaintext\">server.port: ${ports@order}.<\/code><\/pre>\n<p>\nTodas las configuraciones importantes se encuentran en un solo lugar, reduciendo as\u00ed la posibilidad de errores debido a par\u00e1metros dispersos en archivos de configuraci\u00f3n.<\/p>\n<p>El framework proporciona muchos placeholders ya listos, por ejemplo, se puede obtener el nombre del directorio donde se encuentra el archivo de configuraci\u00f3n y asignarlo:<\/p>\n<pre><code class=\"1c\">#include eureka, oracle\nserver.port: ${ports@order}\nspring.application.name: ${this@name}<\/code><\/pre>\n<p>\nGracias a esto, no es necesario indicar adicionalmente el nombre de la aplicaci\u00f3n en la configuraci\u00f3n y tambi\u00e9n se puede extraer en un m\u00f3dulo general, por ejemplo, en la misma eureka:<\/p>\n<pre><code class=\"plaintext\">client:\n   serviceUrl:\n     defaultZone: http:\/\/${endpoints@eurekaip}:6782\/eureka\/\n spring.application.name: ${this@name}<\/code><\/pre>\n<p>\nEl archivo de configuraci\u00f3n <b>order<\/b> se reducir\u00e1 a una l\u00ednea:<\/p>\n<pre><code class=\"1c\">#include eureka, oracle\nserver.port: ${ports@order}<\/code><\/pre>\n<p>\nSi alguna configuraci\u00f3n de la configuraci\u00f3n principal no nos es necesaria, podemos indicarla en nuestra configuraci\u00f3n y ser\u00e1 la que se aplique al generar. Es decir, si por alguna raz\u00f3n necesitamos un nombre \u00fanico para el servicio order, simplemente dejaremos el par\u00e1metro <b>spring.application.name<\/b>.<\/p>\n<p>Supongamos que en el servicio es necesario agregar configuraciones de registro personalizadas, que se almacenan en un archivo separado, por ejemplo, <b>logback.xml<\/b>. Crearemos un grupo de configuraciones separado para ello:<\/p>\n<p><img decoding=\"async\" alt=\"F\u00e1cil gesti\u00f3n de configuraciones de microservicios con microconfig.io\" src=\"\/wp-content\/uploads\/2019\/10\/103a58dab32ebc57ea1d8457b6bcf3d7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn la configuraci\u00f3n b\u00e1sica, indicaremos al framework d\u00f3nde colocar el archivo de configuraci\u00f3n de registro necesario mediante el placeholder <b>@ConfigDir<\/b>:<\/p>\n<pre><code class=\"plaintext\">microconfig.template.logback.fromFile: ${logback@configDir}\/logback.xml<\/code><\/pre>\n<p>\nEn el archivo <b>logback.xml<\/b> configuramos los appenders est\u00e1ndar, que a su vez pueden contener placeholders, que el framework modificar\u00e1 durante la generaci\u00f3n de configuraciones, por ejemplo:<\/p>\n<pre><code class=\"1c\">logs\/${this@name}.log<\/code><\/pre>\n<p>\nAl agregar en la configuraci\u00f3n de los servicios la importaci\u00f3n <b>logback<\/b>, autom\u00e1ticamente obtenemos el registro configurado para cada servicio:<\/p>\n<pre><code class=\"1c\">#include eureka, oracle, logback\nserver.port: ${ports@order}<\/code><\/pre>\n<p>\nEs hora de familiarizarnos m\u00e1s a fondo con todos los placeholders disponibles en el framework:<\/p>\n<p><b>${this@env}<\/b> \u2014 devuelve el nombre del entorno actual.<br \/>\n<b>${&#8230;@name} <\/b> \u2014 devuelve el nombre del componente.<br \/>\n<b>${&#8230;@configDir}<\/b> \u2014 devuelve la ruta completa al directorio de configuraci\u00f3n del componente.<br \/>\n<b>${&#8230;@resultDir}<\/b> \u2014 devuelve la ruta completa al directorio de destino del componente (los archivos obtenidos se colocar\u00e1n en este directorio).<br \/>\n<b>${this@configRoot}<\/b> \u2014 devuelve la ruta completa al directorio ra\u00edz del almacenamiento de configuraciones.<\/p>\n<p>Adem\u00e1s, el sistema permite obtener variables de entorno, como la ruta a java:<br \/>\n<b>${env@JAVA_HOME}<\/b><br \/>\nO, dado que el marco est\u00e1 escrito en <b>JAVA<\/b>, podemos obtener variables del sistema de manera similar a la llamada <b>System::getProperty<\/b> usando una construcci\u00f3n de este tipo:<br \/>\n<b>${system@os.name}<\/b><br \/>\nCabe mencionar el soporte para el lenguaje de expresiones <b>Spring EL<\/b>. En la configuraci\u00f3n se aplican expresiones como las siguientes:<\/p>\n<pre><code class=\"1c\">connection.timeoutInMs: #{5 * 60 * 1000}\ndatasource.maximum-pool-size: #{${this@datasource.minimum-pool-size} + 10} <\/code><\/pre>\n<p>\ny se pueden usar variables locales en archivos de configuraci\u00f3n mediante la expresi\u00f3n <b>#var<\/b>:<\/p>\n<pre><code class=\"1c\">#var feedRoot: ${system@user.home}\/feed\nfolder:\n root: ${this@feedRoot}\n success: ${this@feedRoot}\/archive\n error: ${this@feedRoot}\/error<\/code><\/pre>\n<p>\nPor lo tanto, el marco se presenta como una herramienta bastante potente para la configuraci\u00f3n precisa y flexible de microservicios. El marco cumple su tarea principal: eliminar el copiado y pegado de las configuraciones, consolidar ajustes y, como consecuencia, minimizar posibles errores, permitiendo adem\u00e1s combinar configuraciones f\u00e1cilmente y modificar para diferentes entornos.<\/p>\n<p>Si est\u00e1 interesado en este marco, le recomiendo visitar su p\u00e1gina oficial y familiarizarse con el completo <noindex><a rel=\"nofollow\" href=\"https:\/\/microconfig.io\">documentaci\u00f3n<\/a><\/noindex>, o investigar el c\u00f3digo fuente <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/microconfig\/microconfig\">aqu\u00ed<\/a><\/noindex>.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/473078\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u0430\u044f \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043d\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a microconfig.io. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043c\u043d\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c\/\u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0442\u043e \u0432\u0435\u043b\u0438\u043a\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":39477,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-39476","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=\"\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u0430\u044f \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432.\" \/>\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\/es\/blog\/administrirovanie\/legkoe-upravlenie-konfiguratsiyami-mikroservisov-s-pomoshhyu-microconfig-io\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\u041b\u0435\u0433\u043a\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e microconfig.io | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u0430\u044f \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/legkoe-upravlenie-konfiguratsiyami-mikroservisov-s-pomoshhyu-microconfig-io\" \/>\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:33:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:33:41+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\udd47Gesti\u00f3n f\u00e1cil de configuraciones de microservicios con microconfig.io | ProHoster","description":"Uno de los principales problemas en el desarrollo y la posterior explotaci\u00f3n de microservicios es la configuraci\u00f3n adecuada y ordenada de sus instancias.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/legkoe-upravlenie-konfiguratsiyami-mikroservisov-s-pomoshhyu-microconfig-io","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\u041b\u0435\u0433\u043a\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e microconfig.io | ProHoster","og:description":"\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u0430\u044f \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/legkoe-upravlenie-konfiguratsiyami-mikroservisov-s-pomoshhyu-microconfig-io","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:33:41+00:00","article:modified_time":"2019-10-31T19:33:41+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"39476","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-24 02:05:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:48:28","updated":"2026-01-24 02:05:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/39476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=39476"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/39476\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/39477"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=39476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=39476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=39476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}