{"id":323894,"date":"2021-05-27T21:00:31","date_gmt":"2021-05-27T21:00:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=323894"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=323894","title":{"rendered":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 APIM Gravitee"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p><em>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0432\u0441\u0451 \u0435\u0449\u0451 \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0442\u043e\u043d. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439&nbsp;&nbsp;<\/em><a href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/543324\/\"><em><u>\u0441\u0442\u0430\u0442\u044c\u0435<\/u><\/em><\/a><em>&nbsp;\u044f \u043f\u0440\u043e\u0432\u0435\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u0437\u043e\u0440 APIM Gravitee \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c \u0442\u0438\u043f\u0430 API Management. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443,&nbsp;\u043a\u0430\u043a \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 APIM Gravitee (<\/em><a href=\"https:\/\/www.gravitee.io\/\"><em><u>https:\/\/www.gravitee.io<\/u><\/em><\/a><em>), \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 docker compose file, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c APIM Gravitee \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e API. \u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/em><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/301\/197\/9b6\/3011979b69a5d32e83947635d72e97b9.png\" width=\"1430\" height=\"910\"><figcaption><\/figcaption><\/figure>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h3>\n<p>\u0414\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443<\/p>\n<p>\u0412\u0441\u0435 \u0432 \u0434\u043e\u043a\u0435\u0440\u0435, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 MongoDB \u0438 Elasticsearch. \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b MongoDB \u0438 Elasticsearch \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b Docker. \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b Gateway \u0438 Management API: logback.xml \u0438 gravitee.yml.<\/p>\n<h4>docker-compose.yml<\/h4>\n<p>\u0421\u0440\u0435\u0434\u0443 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u0433\u043e\u0432 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f&nbsp;<a href=\"https:\/\/github.com\/gravitee-io\/gravitee-docker\/blob\/master\/apim\/3.x\/docker-compose.yml\"><u>docker-compose file<\/u><\/a>, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u043d\u0430&nbsp;<a href=\"https:\/\/github.com\/gravitee-io\"><u>github<\/u><\/a>. \u041f\u0440\u0430\u0432\u0434\u0430,&nbsp;\u0432\u043d\u0435\u0441\u0435\u043c&nbsp;\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e&nbsp;\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0432.<\/p>\n<pre><code>docker-compose.yml  # Copyright (C) 2015 The Gravitee team (&lt;http:\/\/gravitee.io&gt;)  # Licensed under the Apache License, Version 2.0 (the \"License\");  # you may not use this file except in compliance with the License.  # You may obtain a copy of the License at  #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;http:\/\/www.apache.org\/licenses\/LICENSE-2.0&gt;  # Unless required by applicable law or agreed to in writing, software  # distributed under the License is distributed on an \"AS IS\" BASIS,  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  # See the License for the specific language governing permissions and  # limitations under the License.  #  version: '3.5' networks: &nbsp;&nbsp;frontend: &nbsp;&nbsp;&nbsp;&nbsp;name: frontend &nbsp;&nbsp;storage: &nbsp;&nbsp;&nbsp;name: storage volumes: &nbsp;&nbsp;data-elasticsearch: &nbsp;&nbsp;data-mongo: services: &nbsp;&nbsp;mongodb: &nbsp;&nbsp;&nbsp;&nbsp;image: mongo:${MONGODB_VERSION:-3.6} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_mongodb &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-mongo:\/data\/db &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-mongodb:\/var\/log\/mongodb &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;elasticsearch: &nbsp;&nbsp;&nbsp;&nbsp;image: docker.elastic.co\/elasticsearch\/elasticsearch:${ELASTIC_VERSION:-7.7.0} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-elasticsearch:\/usr\/share\/elasticsearch\/data &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- http.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- transport.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.security.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.monitoring.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- cluster.name=elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- bootstrap.memory_lock=true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- discovery.type=single-node &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"ES_JAVA_OPTS=-Xms512m -Xmx512m\" &nbsp;&nbsp;&nbsp;&nbsp;ulimits: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memlock: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soft: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hard: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nofile: 65536 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;gateway: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-gateway:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_gateway &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8082:8082\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-gateway:\/opt\/graviteeio-gateway\/logs &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_management_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_ratelimit_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_reporters_elasticsearch_endpoints_0=http:\/\/elasticsearch:9200 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend &nbsp;&nbsp;management_api: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-management-api:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_management_api &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8083:8083\" &nbsp;&nbsp;&nbsp;&nbsp;links: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-management-api:\/opt\/graviteeio-management-api\/logs &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_management_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_analytics_elasticsearch_endpoints_0=http:\/\/elasticsearch:9200 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend &nbsp;&nbsp;management_ui: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-management-ui:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_management_ui &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;  - \"8084:8080\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- management_api &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- MGMT_API_URL=http:\/\/localhost:8083\/management\/organizations\/DEFAULT\/environments\/DEFAULT\/ &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-management-ui:\/var\/log\/nginx &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend &nbsp;&nbsp;portal_ui: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-portal-ui:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_portal_ui &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8085:8080\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- management_api &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- PORTAL_API_URL=http:\/\/localhost:8083\/portal\/environments\/DEFAULT &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-portal-ui:\/var\/log\/nginx &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441:&lt;o:p&gt;<\/p>\n<ol>\n<li>\n<p>MongoDB &#8212; \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b, API, Application, \u0433\u0440\u0443\u043f\u043f, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0430\u0443\u0434\u0438\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>Elasticsearch(Open Distro for Elasticsearch) &#8212; \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u043e\u0432, \u043c\u0435\u0442\u0440\u0438\u043a, \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<\/li>\n<\/ol>\n<h4>MongoDB<\/h4>\n<p>docker-compose.yml:mongodb<\/p>\n<pre><code>mongodb: &nbsp;&nbsp;&nbsp;&nbsp;image: mongo:${MONGODB_VERSION:-3.6} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_mongodb &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-mongo:\/data\/db &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-mongodb:\/var\/log\/mongodb &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage<\/code><\/pre>\n<p>\u0421 MongoDB \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 3.6, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043d\u043e\u0435, \u0441 volume \u0434\u043b\u044f \u043b\u043e\u0433\u043e\u0432 \u0441\u0430\u043c\u043e\u0439 MongoDB \u0438 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 MongoDB.&lt;o:p&gt;<\/p>\n<h4>Elasticsearch<\/h4>\n<p>docker-compose.yml:elasticsearch<\/p>\n<pre><code>elasticsearch: &nbsp;&nbsp;&nbsp;&nbsp;image: docker.elastic.co\/elasticsearch\/elasticsearch:${ELASTIC_VERSION:-7.7.0} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-elasticsearch:\/usr\/share\/elasticsearch\/data &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- http.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- transport.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.security.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.monitoring.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- cluster.name=elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- bootstrap.memory_lock=true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- discovery.type=single-node &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"ES_JAVA_OPTS=-Xms512m -Xmx512m\" &nbsp;&nbsp;&nbsp;&nbsp;ulimits &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memlock: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soft: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hard: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nofile: 65536 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage<\/code><\/pre>\n<p>&nbsp;&nbsp;elasticsearch:<\/p>\n<pre><code>elasticsearch: &nbsp;&nbsp;&nbsp;&nbsp;image: docker.elastic.co\/elasticsearch\/elasticsearch:${ELASTIC_VERSION:-7.7.0} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-elasticsearch:\/usr\/share\/elasticsearch\/data&lt;o:p&gt; &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- http.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- transport.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.security.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.monitoring.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- cluster.name=elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- bootstrap.memory_lock=true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- discovery.type=single-node &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"ES_JAVA_OPTS=-Xms512m -Xmx512m\" &nbsp;&nbsp;&nbsp;&nbsp;ulimits: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memlock: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soft: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hard: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nofile: 65536 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage<\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;\u0421 Elasticsearch \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 7.7.0, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043d\u043e\u0435, \u0441 volume \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Elasticsearch. \u0421\u0440\u0430\u0437\u0443 \u0441\u0442\u043e\u0438\u0442 \u0443\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 xpack.security.enabled=false \u0438 xpack.monitoring.enabled=false, \u0442\u0430\u043a \u043a\u0430\u043a \u0445\u043e\u0442\u044c \u043e\u043d\u0438 \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043a\u0430\u043a false, Elasticsearch \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 XPack \u0438 \u043f\u0430\u0434\u0430\u0435\u0442. \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043b\u0438 \u044d\u0442\u043e\u0442 \u0431\u0430\u0433 \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0445, \u0438\u043b\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c. \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u044e ulimits, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b Elasticsearch \u0432 docker.&lt;o:p&gt;<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0443\u0436\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430:<\/p>\n<ol>\n<li>\n<p>Gateway<\/p>\n<\/li>\n<li>\n<p>Management API<\/p>\n<\/li>\n<li>\n<p>Management UI<\/p>\n<\/li>\n<li>\n<p>Portal UI<\/p>\n<\/li>\n<\/ol>\n<h4>Gateway\/APIM Gateway<\/h4>\n<pre><code>docker-compose.yml:gateway &nbsp;&nbsp;gateway: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-gateway:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_gateway &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8082:8082\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-gateway:\/opt\/graviteeio-gateway\/logs  &nbsp;&nbsp;&nbsp;&nbsp;environment:     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_management_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_ratelimit_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_reporters_elasticsearch_endpoints_0=http:\/\/elasticsearch:9200 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend<\/code><\/pre>\n<p>\u0421 Gateway \u0432\u0441\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u2014 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 3, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043d\u043e\u0435. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u043d\u0430&nbsp;<a href=\"http:\/\/hub.docker.com\/\">hub.docker.com<\/a>, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0443 \u0432\u0435\u0440\u0441\u0438\u0439 3 \u0438 latest \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0445\u0435\u0448\u0438. \u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b MongoDB \u0438&nbsp;Elasticsearch. \u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 Gateway \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f \u0438 \u0437\u0430\u0431\u0440\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c API \u0438\u0437 mongodb, \u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0432\u044f\u0437\u044c \u0441 mongodb \u0438 elasticsearch \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430. \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u043b\u043e\u0433\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u044b\u043f\u0430\u0442\u044c\u0441\u044f, \u043d\u043e \u0441\u0430\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u0437\u0430\u043a\u0430\u0447\u0430\u043b \u0432 \u0441\u0435\u0431\u044f Gateway. \u0412 \u0441\u0435\u043a\u0446\u0438\u0438 environment \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u0430\u043c\u043e\u0433\u043e Gateway, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a: gravitee.yml. \u041a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u0433\u0438, \u0442\u0435\u043d\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Open Distro for Elasticsearch \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u0433\u043e Elasticsearch. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u0433\u0438, \u0442\u0435\u043d\u0430\u043d\u0442\u044b \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0448\u043b\u044e\u0437\u0430.<\/p>\n<pre><code>environment: &nbsp;&nbsp;- gravitee_tags=service-tag #&nbsp;\u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c&nbsp;\u0442\u0435\u0433: service-tag &nbsp;&nbsp;- gravitee_tenant=service-space #&nbsp;\u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c&nbsp;\u0442\u0435\u043d\u0430\u043d\u0442: service-space &nbsp;&nbsp;- gravitee_services_core_http_enabled=true # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u044b\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 Gateway &nbsp;&nbsp;- gravitee_services_core_http_port=18082 # \u043f\u043e\u0440\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 &nbsp;&nbsp;- gravitee_services_core_http_host=0.0.0.0 # \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u0430&nbsp; &nbsp;&nbsp;- gravitee_services_core_http_authentication_type=basic # \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043b\u0438\u0431\u043e \u043d\u0435\u0442, \u043b\u0438\u0431\u043e basic - \u043b\u043e\u0433\u0438\u043d + \u043f\u0430\u0440\u043e\u043b\u044c &nbsp;&nbsp;- gravitee_services_core_http_authentication_type_users_admin=password #&nbsp;\u043b\u043e\u0433\u0438\u043d: admin,&nbsp;\u043f\u0430\u0440\u043e\u043b\u044c: password \u0427\u0442\u043e\u0431\u044b \u043a \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u0432\u043d\u0435, \u043d\u0430\u0434\u043e \u0435\u0449\u0451 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0440\u0442 18082. ports: &nbsp;&nbsp;- \"18082:18082\" Management API\/APIM API docker-compose.yml:management_api &nbsp;&nbsp;management_api: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-management-api:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_management_api &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8083:8083\" &nbsp;&nbsp;&nbsp;&nbsp;links: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-management-api:\/opt\/graviteeio-management-api\/logs &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_management_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000   - gravitee_analytics_elasticsearch_endpoints_0=http:\/\/elasticsearch:9200  &nbsp;&nbsp;&nbsp;&nbsp;networks:    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend<\/code><\/pre>\n<p>Management&nbsp;API&nbsp;\u2014 \u044d\u0442\u043e \u044f\u0434\u0440\u043e \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0443\u0436\u0431\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438&nbsp;API, \u043b\u043e\u0433\u0438, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432&nbsp;Management&nbsp;UI&nbsp;\u0438&nbsp;Portal&nbsp;UI. \u0417\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 MongoDB \u0438 Elasticsearch. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u043a\u0446\u0438\u044e environment \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u043c \u043d\u0430\u0448\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<pre><code>environment: &nbsp;&nbsp;- gravitee_email_enable=true # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0438\u0441\u044c\u043c\u0430 &nbsp;&nbsp;- gravitee_email_host=smtp.domain.example # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0438\u0441\u044c\u043c\u0430 &nbsp;&nbsp;- gravitee_email_port=25 # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 &nbsp;&nbsp;- gravitee_email_username=domain.example\/gravitee #&nbsp;\u043b\u043e\u0433\u0438\u043d&nbsp;\u0434\u043b\u044f&nbsp;\u0441\u0435\u0440\u0432\u0435\u0440\u0430 &nbsp;&nbsp;- gravitee_email_password=password #&nbsp;\u043f\u0430\u0440\u043e\u043b\u044c&nbsp;\u0434\u043b\u044f&nbsp;\u043b\u043e\u0433\u0438\u043d\u0430&nbsp;\u043e\u0442&nbsp;\u0441\u0435\u0440\u0432\u0435\u0440\u0430 &nbsp;&nbsp;- gravitee_email_from=noreply@domain.example # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0442 \u0447\u044c\u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0438\u0441\u044c\u043c\u0430&nbsp; &nbsp;&nbsp;- gravitee_email_subject=\"[Gravitee.io] %s\" #&nbsp;\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c&nbsp;\u0442\u0435\u043c\u0443&nbsp;\u043f\u0438\u0441\u044c\u043c\u0430<\/code><\/pre>\n<h4>Management UI\/APIM Console<\/h4>\n<pre><code>docker-compose.yml:apim_console &nbsp;&nbsp;management_ui: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-management-ui:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_management_ui &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8084:8080\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- management_api &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- MGMT_API_URL=http:\/\/localhost:8083\/management\/organizations\/DEFAULT\/environments\/DEFAULT\/   &nbsp;&nbsp;&nbsp;&nbsp;volumes:   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-management-ui:\/var\/log\/nginx &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend<\/code><\/pre>\n<p>Management UI \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c. \u0412\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a REST API. \u041f\u043e \u043e\u043f\u044b\u0442\u0443 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 MGMT_API_URL \u0432\u043c\u0435\u0441\u0442\u043e&nbsp;<a href=\"http:\/\/localhost\/\">localhost<\/a>&nbsp;\u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c IP \u0430\u0434\u0440\u0435\u0441 \u0438\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0433\u0434\u0435 \u0432\u044b \u044d\u0442\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0438\u043d\u0430\u0447\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442 Management API.<\/p>\n<pre><code>Portal UI\/APIM Portal docker-compose.yml:apim_portal &nbsp;&nbsp;portal_ui: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-portal-ui:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_portal_ui &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8085:8080\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- management_api &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- PORTAL_API_URL=http:\/\/localhost:8083\/portal\/environments\/DEFAULT &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-portal-ui:\/var\/log\/nginx &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend<\/code><\/pre>\n<p>Portal UI \u2014 \u044d\u0442\u043e \u043f\u043e\u0440\u0442\u0430\u043b \u0434\u043b\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432. \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043b\u043e\u0433\u0430\u043c, \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u043c API. \u041f\u043e \u043e\u043f\u044b\u0442\u0443 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 PORTAL_API_URL \u0432\u043c\u0435\u0441\u0442\u043e&nbsp;<a href=\"http:\/\/localhost\/\">localhost<\/a>&nbsp;\u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441 \u0438\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0433\u0434\u0435 \u0432\u044b \u044d\u0442\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u0438\u043d\u0430\u0447\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442 Management API.&lt;o:p&gt;<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0432\u0435\u0441\u044c \u0444\u0430\u0439\u043b \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>docker-compose.yml<\/p>\n<pre><code># Copyright (C) 2015 The Gravitee team (&lt;http:\/\/gravitee.io&gt;) # Licensed under the Apache License, Version 2.0 (the \"License\"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at #         &lt;http:\/\/www.apache.org\/licenses\/LICENSE-2.0&gt; # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an \"AS IS\" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. version: '3.5' networks:   frontend:     name: frontend   storage:     name: storage volumes:   data-elasticsearch:   data-mongo: services:   mongodb:     image: mongo:${MONGODB_VERSION:-3.6}     container_name: gio_apim_mongodb     restart: always     volumes:       - data-mongo:\/data\/db       - .\/logs\/apim-mongodb:\/var\/log\/mongodb     networks:       - storage   elasticsearch:     image: docker.elastic.co\/elasticsearch\/elasticsearch:${ELASTIC_VERSION:-7.7.0}     container_name: gio_apim_elasticsearch     restart: always     volumes:       - data-elasticsearch:\/usr\/share\/elasticsearch\/data     environment:       - http.host=0.0.0.0       - transport.host=0.0.0.0       - cluster.name=elasticsearch       - bootstrap.memory_lock=true       - discovery.type=single-node       - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"     ulimits:       memlock:         soft: -1         hard: -1       nofile: 65536     networks:       - storage   gateway:     image: graviteeio\/apim-gateway:${APIM_VERSION:-3}     container_name: gio_apim_gateway     restart: always     ports:       - \"8082:8082\"       - \"18082:18082\"     depends_on:       - mongodb       - elasticsearch     volumes:       - .\/logs\/apim-gateway:\/opt\/graviteeio-gateway\/logs     environment:       - gravitee_management_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000       - gravitee_ratelimit_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000       - gravitee_reporters_elasticsearch_endpoints_0=http:\/\/elasticsearch:9200          - gravitee_tags=service-tag # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0435\u0433: service-tag          - gravitee_tenant=service-space # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0435\u043d\u0430\u043d\u0442: service-space          - gravitee_services_core_http_enabled=true # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u044b\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 Gateway          - gravitee_services_core_http_port=18082 # \u043f\u043e\u0440\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430          - gravitee_services_core_http_host=0.0.0.0 # \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u0430           - gravitee_services_core_http_authentication_type=basic # \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043b\u0438\u0431\u043e \u043d\u0435\u0442, \u043b\u0438\u0431\u043e basic - \u043b\u043e\u0433\u0438\u043d + \u043f\u0430\u0440\u043e\u043b\u044c          - gravitee_services_core_http_authentication_type_users_admin=password # \u043b\u043e\u0433\u0438\u043d: admin, \u043f\u0430\u0440\u043e\u043b\u044c: password     networks:       - storage       - frontend   management_api:     image: graviteeio\/apim-management-api:${APIM_VERSION:-3}     container_name: gio_apim_management_api     restart: always     ports:       - \"8083:8083\"     links:       - mongodb       - elasticsearch     depends_on:       - mongodb       - elasticsearch     volumes:       - .\/logs\/apim-management-api:\/opt\/graviteeio-management-api\/logs     environment:       - gravitee_management_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000       - gravitee_analytics_elasticsearch_endpoints_0=http:\/\/elasticsearch:9200          - gravitee_email_enable=true # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0438\u0441\u044c\u043c\u0430          - gravitee_email_host=smtp.domain.example # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0438\u0441\u044c\u043c\u0430          - gravitee_email_port=25 # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430          - gravitee_email_username=domain.example\/gravitee # \u043b\u043e\u0433\u0438\u043d \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430          - gravitee_email_password=password # \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043d\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430          - gravitee_email_from=noreply@domain.example # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0442 \u0447\u044c\u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0438\u0441\u044c\u043c\u0430           - gravitee_email_subject=\"[Gravitee.io] %s\" # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043c\u0443 \u043f\u0438\u0441\u044c\u043c\u0430     networks:       - storage       - frontend   management_ui:     image: graviteeio\/apim-management-ui:${APIM_VERSION:-3}     container_name: gio_apim_management_ui     restart: always     ports:       - \"8084:8080\"     depends_on:       - management_api     environment:       - MGMT_API_URL=http:\/\/localhost:8083\/management\/organizations\/DEFAULT\/environments\/DEFAULT\/     volumes:       - .\/logs\/apim-management-ui:\/var\/log\/nginx     networks:       - frontend   portal_ui:     image: graviteeio\/apim-portal-ui:${APIM_VERSION:-3}     container_name: gio_apim_portal_ui     restart: always     ports:       - \"8085:8080\"     depends_on:       - management_api     environment:       - PORTAL_API_URL=http:\/\/localhost:8083\/portal\/environments\/DEFAULT     volumes:       - .\/logs\/apim-portal-ui:\/var\/log\/nginx     networks:       - frontend<\/code><\/pre>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c<\/h3>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c\u0438:<\/p>\n<p>vCPU: 4<\/p>\n<p>RAM: 4 GB<\/p>\n<p>HDD: 50-100 GB<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b Elasticsearch, MongoDB \u0438 Gravitee Gateway \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e 0.5 vCPU, \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0443\u0447\u0448\u0435. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e &#8212; RAM. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043f\u043e \u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443. \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u0432 MongoDB \u0435\u0449\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043b\u043e\u0433\u0438 \u0430\u0443\u0434\u0438\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 100 MB. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u043e\u0432 \u0432 Elasticsearch.<\/p>\n<pre><code>docker-compose up -d # \u0435\u0441\u043b\u0438 \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u043b\u043e\u0433\u0438 docker-compose up # \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u043b\u043e\u0433\u0438 \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043b\u043e\u0433\u0430\u0445 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code>gio_apim_management_api_dev | 19:57:12.615 [graviteeio-node] INFO  i.g.r.a.s.node.GraviteeApisNode - Gravitee.io - Rest APIs id[5728f320-ba2b-4a39-a8f3-20ba2bda39ac] version[3.5.3] pid[1] build[23#2f1cec123ad1fae2ef96f1242dddc0846592d222] jvm[AdoptOpenJDK\/OpenJDK 64-Bit Server VM\/11.0.10+9] started in 31512 ms.<\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443: http:\/\/\u0432\u0430\u0448_\u0430\u0434\u0440\u0435\u0441:8084\/.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e Elasticsearch \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043b\u044c\u0448\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u043f\u0443\u0433\u0430\u0439\u0442\u0435\u0441\u044c \u0435\u0441\u043b\u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0442\u0430\u043a\u043e\u0435 &#171;\u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435&#187;:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/108\/f0e\/8dc\/108f0e8dc629d5ab1c514a17c46c2582.png\" width=\"977\" height=\"118\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0435 \u0443\u0448\u043b\u0430, \u0442\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u043a\u0430\u043f\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043b\u043e\u0433\u0438 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u0437\u0430 \u043e\u0448\u0438\u0431\u043a\u0438. \u0412\u0438\u0434\u0438\u043c \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u043e!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9a4\/d68\/dfc\/9a4d68dfc231d93b91feb8671c5d688c.png\" width=\"687\" height=\"898\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0432\u043e\u0434\u0438\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c: admin\/admin \u0438 \u043c\u044b \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/72b\/38a\/107\/72b38a1070dad231530e8bce9d165d7b.png\" width=\"1430\" height=\"809\"><figcaption><\/figcaption><\/figure>\n<h3>\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430<\/h3>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0430\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043c\u0435\u043d\u044e&nbsp;<strong>Settings \u2192 PORTAL \u2192 Settings<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/28d\/5af\/49b\/28d5af49bfad01cadcd3e0f0167bc33c.png\" width=\"1430\" height=\"809\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432: Keyless, API_KEY, Oauth2 \u0438\u043b\u0438 JWT. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438\u0445 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0430 \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c Google Analytics. \u0412\u0440\u0435\u043c\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0437\u0430\u0434\u0430\u0447\u0430\u043c \u0438 \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c. \u0413\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0438 \u043c\u043d\u043e\u0433\u043e \u0435\u0449\u0451 \u0447\u0435\u0433\u043e \u043f\u043e \u043c\u0435\u043b\u043e\u0447\u0438.<\/p>\n<h4>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 tags \u0438 tenant<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c&nbsp;\u0432&nbsp;\u043c\u0435\u043d\u044e&nbsp;<strong>Settings \u2192 GATEWAY \u2192 Shardings Tags<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cf0\/568\/fed\/cf0568fed50f026dc48b9a31130f8671.png\" width=\"1430\" height=\"559\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u0433\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0448\u043b\u044e\u0437\u044b. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;+&#187; \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0435\u0433 \u0438 \u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/33c\/83a\/995\/33c83a995cc20a51ccafb1c5fc86f820.png\" width=\"1430\" height=\"525\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c. \u0422\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u0435\u0433 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0437\u0430 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u0438 \u0448\u043b\u044e\u0437\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0435\u0433\u0430\u043c\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c&nbsp;\u0432&nbsp;\u043c\u0435\u043d\u044e&nbsp;<strong>Settings \u2192 GATEWAY \u2192 Tenants<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d8\/ea1\/927\/2d8ea1927d8626ec77f302cfd22a8346.png\" width=\"1430\" height=\"864\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0442\u0435\u043d\u0430\u043d\u0442\u043e\u0432. \u0422\u043e\u043b\u044c\u043a\u043e \u0442\u0443\u0442 \u043d\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0438 &#171;+&#187;, \u043d\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0440\u0435\u043d\u044c\u043a\u0430\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c &#171;New tenant&#187;, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u0434\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u0435\u043d\u0430\u043d\u0442\u0430. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043d\u0430\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d \u0432 Open Distro for Elasticsearch, \u0438 \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u044b\u0434\u0430\u043d\u044b \u043f\u0440\u0430\u0432\u0430.<\/p>\n<h4>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432&nbsp;<strong>Settings \u2192 USER MANAGEMENT \u2192 Users<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/639\/fd2\/edc\/639fd2edcf26d03b2e55b2d39ea55fe8.png\" width=\"1430\" height=\"809\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0430 \u043f\u043e email. \u0418\u043d\u0430\u0447\u0435 \u043d\u043e\u0432\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0430 \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u0441\u0431\u0440\u043e\u0441 \u043f\u0430\u0440\u043e\u043b\u044f. \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043d\u043e \u044d\u0442\u043e \u043f\u0440\u044f\u043c \u0445\u0430\u0440\u0434\u043a\u043e\u0434-\u0445\u0430\u0440\u0434\u043a\u043e\u0434!<\/p>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a Management API: gravitee.yml \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a:<\/p>\n<pre><code>security:   providers:  # authentication providers     - type: memory       # password encoding\/hashing algorithm. One of:       # - bcrypt : passwords are hashed with bcrypt (supports only $2a$ algorithm)       # - none : passwords are not hashed\/encrypted       # default value is bcrypt       password-encoding-algo: bcrypt       users:         - user:           username: admin           password: $2a$10$Ihk05VSds5rUSgMdsMVi9OKMIx2yUvMz7y9VP3rJmQeizZLrhLMyq           roles: ORGANIZATION:ADMIN,ENVIRONMENT:ADMIN <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c&nbsp;\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b&nbsp;\u0442\u0438\u043f\u044b&nbsp;\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449&nbsp;\u0434\u043b\u044f&nbsp;\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439: memory, gravitee&nbsp;\u0438&nbsp;ldap.&nbsp;\u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430&nbsp;memory\u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a:&nbsp;gravitee.yml. \u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430&nbsp;gravitee&nbsp;&nbsp;\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432&nbsp;MongoDB. \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0430\u0440\u043e\u043b\u0435\u0439, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f BCrypt \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c $2a$. \u0412 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: admin \u0441 \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c: admin \u0438 \u0435\u0433\u043e \u0440\u043e\u043b\u0438. \u0415\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 UI, \u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 MongoDB \u0438 \u0442\u0438\u043f \u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 gravitee.<\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432&nbsp;<strong>Settings \u2192 USER MANAGEMENT \u2192 Groups<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/03e\/358\/af8\/03e358af8533af99da20c8a4535b9300.png\" width=\"1430\" height=\"809\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/591\/5f0\/062\/5915f00620eacd41fde1a378539ec3ad.png\" width=\"1430\" height=\"806\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 &#171;+&#187; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u044d\u0442\u0443 \u0433\u0440\u0443\u043f\u043f\u0443.<\/p>\n<h4>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0448\u043b\u044e\u0437\u043e\u0432<\/h4>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0432 \u043c\u0435\u043d\u044e Gateways \u0443 \u043d\u0430\u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0448\u043b\u044e\u0437\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0448\u043b\u044e\u0437\u0430. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, Sharding tags \u0438 Tenant. \u0418\u0445 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0447\u0443\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0448\u043b\u044e\u0437\u0430. \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0443 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 Elasticsearch \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/88a\/a8e\/4c1\/88aa8e4c1d9890ce23db573fa3c7b7bf.png\" width=\"1430\" height=\"806\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0f6\/26e\/995\/0f626e99562e7fe4eb311ac03896e9c8.png\" width=\"1430\" height=\"809\"><figcaption><\/figcaption><\/figure>\n<h3>\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e API<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e API \u043d\u0430\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c backend \u0441 API.<\/p>\n<h4>BackEnd \u0441 API, \u0431\u0430\u043b\u0435\u0440\u0438\u043d\u0430\u043c\u0438 \u0438 Swagger.<\/h4>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c FastAPI \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435 backend \u0441 API.<\/p>\n<pre><code>#!\/bin\/env python3 import uvicorn from fastapi import FastAPI app = FastAPI() @app.get('\/') @app.get('\/{name}') def read_root(name: str = None):     \"\"\"     Hello world     :return: str = Hello world     \"\"\"     if name:         return {\"Hello\": name}     return {\"Hello\": \"World\"} @app.get(\"\/items\/{item_id}\") @app.post(\"\/items\/{item_id}\") @app.put(\"\/items\/{item_id}\") def gpp_item(item_id: str):     \"\"\"     Get items     :param item_id: id     :return: dict     \"\"\"     return {\"item_id\": item_id} if __name__ == \"__main__\":     uvicorn.run(app, host=\"0.0.0.0\", port=8000)<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0438&nbsp;API&nbsp;\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0441 \u0442\u0440\u0443\u0434\u043e\u043c, \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0433\u043e! \u041c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>python3 main.py<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0439\u0434\u0435\u043c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440&nbsp;<u>http:\/\/backend_server:8000\/,<\/u>&nbsp;\u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0438\u0440\u0443! \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0432\u043e\u0451 \u0438\u043c\u044f, \u0442\u0438\u043f\u0430 \u0442\u0430\u043a:&nbsp;<u>http:\/\/backend_server:8000\/Anton<\/u>, \u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u0430\u0441! \u0415\u0441\u043b\u0438 \u0436\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0432\u0441\u044e \u043c\u043e\u0449\u044c&nbsp;FastAPI, \u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441:&nbsp;<a href=\"http:\/\/backend_server:8000\/docs\"><u>http:\/\/backend_server:8000\/docs<\/u><\/a>&nbsp;\u0438\u043b\u0438&nbsp;<a href=\"http:\/\/backend_server:8000\/redoc\"><u>http:\/\/backend_server:8000\/redoc<\/u><\/a>&nbsp;. \u041d\u0430 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u043e\u0435 API \u0438 \u0442\u0430\u043a\u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 swagger \u0444\u0430\u0439\u043b. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c URL \u0434\u043e swagger \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u043d\u0430\u0448 \u043f\u043b\u0430\u043d \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0411\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u0440\u0435\u0437 \u0438\u043c\u043f\u043e\u0440\u0442 swagger \u0444\u0430\u0439\u043b\u0430!<\/p>\n<p>\u041d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 Gravitee \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 &#171;+&#187;, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c &#171;IMPORT FROM LINK&#187;, \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c URL \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;IMPORT&#187;.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ba\/ce5\/e76\/8bace5e76f348abccf4484a25ea4d428.png\" width=\"1430\" height=\"809\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6cf\/c2f\/a4b\/6cfc2fa4b7aa497ffdbac9b2742a5b2d.png\" width=\"650\" height=\"1078\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;IMPORT&#187;!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/676\/3f9\/015\/6763f90158d495ae24a65a9dedb7377c.png\" width=\"1430\" height=\"809\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 API! \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u043f\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u043c&#8230;<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/61d\/817\/1f4\/61d8171f468ccb2507a43b1af59da7bb.png\" width=\"468\" height=\"192\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;START THE API&#187; \u0447\u0442\u043e\u0431\u044b API \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 &#171;Plans&#187; \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;+&#187;.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/951\/cd3\/7ff\/951cd37ff720c99eb89f4cd323cc4e03.png\" width=\"1430\" height=\"1032\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043b\u0430\u043d.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9d5\/9a0\/768\/9d59a076895df307273bd8adfc192eb2.png\" width=\"1430\" height=\"986\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0438\u043f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c Keyless (public) \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;NEXT&#187;.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/133\/654\/878\/13365487890caff9f63d5acd860f0b22.png\" width=\"1430\" height=\"583\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u043f\u0443\u0442\u044f\u043c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;NEXT&#187;.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e33\/c9c\/7d3\/e33c9c7d3318094415ae5e8ee0b184b2.png\" width=\"1430\" height=\"580\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u043d\u0430\u043c \u0442\u043e\u0436\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;SAVE&#187;.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5c5\/0ae\/1d6\/5c50ae1d6deac51cb0bf56f2d9d8b660.png\" width=\"1430\" height=\"583\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043b\u0430\u043d \u0441\u043e\u0437\u0434\u0430\u043d, \u043d\u043e \u043f\u043e\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 &#171;Staging&#187;<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4fb\/ccc\/fdb\/4fbcccfdbf2bacb8fc1fba7af0d370f9.png\" width=\"1430\" height=\"614\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u043d\u0430 &#8212; \u0441\u0438\u043d\u0435\u0435 \u043e\u0431\u043b\u0430\u0447\u043a\u043e \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u043e\u0439 \u0432\u0432\u0435\u0440\u0445! \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u043e\u0439 &#171;PUBLISH&#187;<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5a2\/66d\/3be\/5a266d3bedf9580b7f008b16c73d07fa.png\" width=\"456\" height=\"172\"><figcaption><\/figcaption><\/figure>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u043d \u0438 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0436\u0435\u043b\u0442\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u043a\u0443 \u0441 \u043f\u0440\u0438\u0437\u044b\u0432\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e API.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b7e\/327\/fa3\/b7e327fa37f8b32878b215582a8b5950.png\" width=\"1280\" height=\"546\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c &#171;deploy your API&#187; \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 &#171;OK&#187;<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6e8\/673\/d36\/6e8673d3617e3aa98b95adc8f99ca59f.png\" width=\"180\" height=\"82\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432&nbsp;<strong>APIs \u2192 Proxy \u2192 Entrypoints<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d25\/664\/840\/d25664840d2f8672880c157a45d9f835.png\" width=\"1430\" height=\"806\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e API \u0438 URL \u043f\u0443\u0442\u0438. \u0423 \u043d\u0430\u0441 \u0443\u043a\u0430\u0437\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0442\u044c &#171;\/fastapi&#187;. \u041c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c &#171;virtual-hosts&#187; \u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 IP. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438.<\/p>\n<p>\u0412&nbsp;<strong>APIs \u2192 Proxy \u2192 GENERAL \u2192 CORS<\/strong>&nbsp;\u043c\u043e\u0436\u043d\u043e&nbsp;\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438&nbsp;\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438&nbsp;Cross-origin resource sharing.<\/p>\n<p>\u0412&nbsp;<strong>APIs \u2192 Proxy \u2192 GENERAL \u2192 Deployments<\/strong>&nbsp;\u043d\u0430\u0434\u043e&nbsp;\u0443\u043a\u0430\u0437\u0430\u0442\u044c&nbsp;\u0432\u0441\u0435&nbsp;sharding tags,&nbsp;\u043a\u043e\u0442\u043e\u0440\u044b\u0435&nbsp;\u0431\u0443\u0434\u0443\u0442&nbsp;\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f&nbsp;\u044d\u0442\u0438\u043cAPI.<\/p>\n<p>\u0412&nbsp;<strong>APIs \u2192 Proxy \u2192 BACKEND SERVICES \u2192 Endpoints<\/strong>&nbsp;\u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 API \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e7\/032\/44a\/4e703244a3d4812175526e94d694f04c.png\" width=\"1430\" height=\"806\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 Endpoint, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 \u043d\u0438\u0436\u043d\u044e\u044e \u0448\u0435\u0441\u0442\u0435\u0440\u0435\u043d\u043a\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e0\/382\/670\/4e0382670895ad6aad4ab08b010ae591.png\" width=\"1430\" height=\"870\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c &#171;Target&#187; \u043d\u0430 http:\/\/backend_server:8000\/, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c tenant, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438 \u0434\u0435\u043f\u043b\u043e\u0438\u043c!<\/p>\n<p>\u0412&nbsp;<strong>APIs \u2192 Proxy \u2192 Deployments<\/strong>&nbsp;\u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435 sharding tags, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 API. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u043d \u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 Sharding tags \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0435\u0433 &#171;service-tag&#187;.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/360\/1f3\/239\/3601f32391c2437d9bb39febb2ff8685.png\" width=\"1430\" height=\"812\"><figcaption><\/figcaption><\/figure>\n<p>\u0412&nbsp;<strong>APIs \u2192 Design<\/strong>&nbsp;\u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p>\u0412&nbsp;<strong>APIs \u2192 Analytics<\/strong>&nbsp;<strong>\u2192 Overview<\/strong>&nbsp;\u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e API.<\/p>\n<p>\u0412&nbsp;<strong>APIs \u2192 Analytics<\/strong>&nbsp;<strong>\u2192 Logs<\/strong>&nbsp;\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043b\u043e\u0433\u0438 \u0438 \u043f\u043e\u0442\u043e\u043c \u0438\u0445 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c.<\/p>\n<p>\u0412&nbsp;<strong>APIs \u2192 Audit<\/strong>&nbsp;\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 API.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043a\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u043d\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0442\u0443\u0442 \u0441\u0434\u0435\u043b\u0430\u043b\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0448 \u0448\u043b\u044e\u0437 \u0438 API.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430&nbsp;<a href=\"http:\/\/gravitee_host:8082\/fastapi\/\"><u>http:\/\/gravitee_host:8082\/fastapi\/<\/u><\/a>&nbsp; , \u0438 \u0432\u0430\u043c \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0438\u0440\u0443:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e2f\/22b\/9b5\/e2f22b9b53af788f05f22f35e874e60f.png\" width=\"444\" height=\"116\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0441\u0440\u0430\u0437\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432&nbsp;<strong>APIs \u2192 Analytics<\/strong>&nbsp;<strong>\u2192 Overview\/Logs<\/strong>&nbsp;\u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u0441\u044e\u0434\u0430 \u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0432 \u0436\u0438\u0432\u044b\u0445! \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 APIM Gravitee, \u043a\u0430\u043a \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 API \u0438\u0437 swagger \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0448\u043b\u044e\u0437\u043e\u0432, \u0442\u043e\u0447\u0435\u043a \u0432\u0445\u043e\u0434\u0430 \u0438 \u0432\u044b\u0445\u043e\u0434\u0430, \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043e\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043b\u043e\u0433\u043e\u0432 \u043c\u043d\u043e\u0433\u043e. \u0412 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432\u0441\u0435\u0433\u043e \u0438 \u043d\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0448\u044c. \u0422\u0430\u043a \u0447\u0442\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u044b APIM Gravitee. \u0412 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c\u0435 \u0435\u0441\u0442\u044c \u043a\u0430\u043d\u0430\u043b \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435:&nbsp;<a href=\"https:\/\/t.me\/gravitee_ru\"><u>https:\/\/t.me\/gravitee_ru<\/u><\/a>, \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e \u043d\u044e\u0430\u043d\u0441\u0430\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0443\u0434\u0430.&nbsp;<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/559686\/\"> https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/559686\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p><em>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0432\u0441\u0451 \u0435\u0449\u0451 \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0442\u043e\u043d. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439&nbsp;&nbsp;<\/em><a href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/543324\/\"><em><u>\u0441\u0442\u0430\u0442\u044c\u0435<\/u><\/em><\/a><em>&nbsp;\u044f \u043f\u0440\u043e\u0432\u0435\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u0437\u043e\u0440 APIM Gravitee \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c \u0442\u0438\u043f\u0430 API Management. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443,&nbsp;\u043a\u0430\u043a \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 APIM Gravitee (<\/em><a href=\"https:\/\/www.gravitee.io\/\"><em><u>https:\/\/www.gravitee.io<\/u><\/em><\/a><em>), \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 docker compose file, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c APIM Gravitee \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e API. \u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/em><\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h3>\n<p>\u0414\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443<\/p>\n<p>\u0412\u0441\u0435 \u0432 \u0434\u043e\u043a\u0435\u0440\u0435, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 MongoDB \u0438 Elasticsearch. \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b MongoDB \u0438 Elasticsearch \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b Docker. \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b Gateway \u0438 Management API: logback.xml \u0438 gravitee.yml.<\/p>\n<h4>docker-compose.yml<\/h4>\n<p>\u0421\u0440\u0435\u0434\u0443 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u0433\u043e\u0432 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f&nbsp;<a href=\"https:\/\/github.com\/gravitee-io\/gravitee-docker\/blob\/master\/apim\/3.x\/docker-compose.yml\"><u>docker-compose file<\/u><\/a>, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u043d\u0430&nbsp;<a href=\"https:\/\/github.com\/gravitee-io\"><u>github<\/u><\/a>. \u041f\u0440\u0430\u0432\u0434\u0430,&nbsp;\u0432\u043d\u0435\u0441\u0435\u043c&nbsp;\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e&nbsp;\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0432.<\/p>\n<pre><code>docker-compose.yml  # Copyright (C) 2015 The Gravitee team (&lt;http:\/\/gravitee.io&gt;)  # Licensed under the Apache License, Version 2.0 (the \"License\");  # you may not use this file except in compliance with the License.  # You may obtain a copy of the License at  #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;http:\/\/www.apache.org\/licenses\/LICENSE-2.0&gt;  # Unless required by applicable law or agreed to in writing, software  # distributed under the License is distributed on an \"AS IS\" BASIS,  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  # See the License for the specific language governing permissions and  # limitations under the License.  #  version: '3.5' networks: &nbsp;&nbsp;frontend: &nbsp;&nbsp;&nbsp;&nbsp;name: frontend &nbsp;&nbsp;storage: &nbsp;&nbsp;&nbsp;name: storage volumes: &nbsp;&nbsp;data-elasticsearch: &nbsp;&nbsp;data-mongo: services: &nbsp;&nbsp;mongodb: &nbsp;&nbsp;&nbsp;&nbsp;image: mongo:${MONGODB_VERSION:-3.6} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_mongodb &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-mongo:\/data\/db &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-mongodb:\/var\/log\/mongodb &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;elasticsearch: &nbsp;&nbsp;&nbsp;&nbsp;image: docker.elastic.co\/elasticsearch\/elasticsearch:${ELASTIC_VERSION:-7.7.0} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-elasticsearch:\/usr\/share\/elasticsearch\/data &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- http.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- transport.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.security.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.monitoring.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- cluster.name=elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- bootstrap.memory_lock=true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- discovery.type=single-node &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"ES_JAVA_OPTS=-Xms512m -Xmx512m\" &nbsp;&nbsp;&nbsp;&nbsp;ulimits: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memlock: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soft: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hard: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nofile: 65536 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;gateway: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-gateway:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_gateway &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8082:8082\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-gateway:\/opt\/graviteeio-gateway\/logs &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_management_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_ratelimit_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_reporters_elasticsearch_endpoints_0=http:\/\/elasticsearch:9200 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend &nbsp;&nbsp;management_api: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-management-api:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_management_api &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8083:8083\" &nbsp;&nbsp;&nbsp;&nbsp;links: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-management-api:\/opt\/graviteeio-management-api\/logs &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_management_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_analytics_elasticsearch_endpoints_0=http:\/\/elasticsearch:9200 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend &nbsp;&nbsp;management_ui: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-management-ui:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_management_ui &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;  - \"8084:8080\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- management_api &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- MGMT_API_URL=http:\/\/localhost:8083\/management\/organizations\/DEFAULT\/environments\/DEFAULT\/ &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-management-ui:\/var\/log\/nginx &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend &nbsp;&nbsp;portal_ui: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-portal-ui:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_portal_ui &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8085:8080\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- management_api &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- PORTAL_API_URL=http:\/\/localhost:8083\/portal\/environments\/DEFAULT &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-portal-ui:\/var\/log\/nginx &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441:&lt;o:p&gt;<\/p>\n<ol>\n<li>\n<p>MongoDB &#8212; \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b, API, Application, \u0433\u0440\u0443\u043f\u043f, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0430\u0443\u0434\u0438\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>Elasticsearch(Open Distro for Elasticsearch) &#8212; \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u043e\u0432, \u043c\u0435\u0442\u0440\u0438\u043a, \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<\/li>\n<\/ol>\n<h4>MongoDB<\/h4>\n<p>docker-compose.yml:mongodb<\/p>\n<pre><code>mongodb: &nbsp;&nbsp;&nbsp;&nbsp;image: mongo:${MONGODB_VERSION:-3.6} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_mongodb &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-mongo:\/data\/db &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-mongodb:\/var\/log\/mongodb &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage<\/code><\/pre>\n<p>\u0421 MongoDB \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 3.6, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043d\u043e\u0435, \u0441 volume \u0434\u043b\u044f \u043b\u043e\u0433\u043e\u0432 \u0441\u0430\u043c\u043e\u0439 MongoDB \u0438 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 MongoDB.&lt;o:p&gt;<\/p>\n<h4>Elasticsearch<\/h4>\n<p>docker-compose.yml:elasticsearch<\/p>\n<pre><code>elasticsearch: &nbsp;&nbsp;&nbsp;&nbsp;image: docker.elastic.co\/elasticsearch\/elasticsearch:${ELASTIC_VERSION:-7.7.0} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-elasticsearch:\/usr\/share\/elasticsearch\/data &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- http.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- transport.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.security.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.monitoring.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- cluster.name=elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- bootstrap.memory_lock=true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- discovery.type=single-node &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"ES_JAVA_OPTS=-Xms512m -Xmx512m\" &nbsp;&nbsp;&nbsp;&nbsp;ulimits &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memlock: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soft: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hard: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nofile: 65536 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage<\/code><\/pre>\n<p>&nbsp;&nbsp;elasticsearch:<\/p>\n<pre><code>elasticsearch: &nbsp;&nbsp;&nbsp;&nbsp;image: docker.elastic.co\/elasticsearch\/elasticsearch:${ELASTIC_VERSION:-7.7.0} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- data-elasticsearch:\/usr\/share\/elasticsearch\/data&lt;o:p&gt; &nbsp;&nbsp;&nbsp;&nbsp;environment: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- http.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- transport.host=0.0.0.0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.security.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- xpack.monitoring.enabled=false &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- cluster.name=elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- bootstrap.memory_lock=true &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- discovery.type=single-node &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"ES_JAVA_OPTS=-Xms512m -Xmx512m\" &nbsp;&nbsp;&nbsp;&nbsp;ulimits: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memlock: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;soft: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hard: -1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nofile: 65536 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage<\/code><\/pre>\n<p>&nbsp;&nbsp;&nbsp;\u0421 Elasticsearch \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 7.7.0, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043d\u043e\u0435, \u0441 volume \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Elasticsearch. \u0421\u0440\u0430\u0437\u0443 \u0441\u0442\u043e\u0438\u0442 \u0443\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 xpack.security.enabled=false \u0438 xpack.monitoring.enabled=false, \u0442\u0430\u043a \u043a\u0430\u043a \u0445\u043e\u0442\u044c \u043e\u043d\u0438 \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043a\u0430\u043a false, Elasticsearch \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 XPack \u0438 \u043f\u0430\u0434\u0430\u0435\u0442. \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043b\u0438 \u044d\u0442\u043e\u0442 \u0431\u0430\u0433 \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0445, \u0438\u043b\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c. \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u044e ulimits, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b Elasticsearch \u0432 docker.&lt;o:p&gt;<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0443\u0436\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430:<\/p>\n<ol>\n<li>\n<p>Gateway<\/p>\n<\/li>\n<li>\n<p>Management API<\/p>\n<\/li>\n<li>\n<p>Management UI<\/p>\n<\/li>\n<li>\n<p>Portal UI<\/p>\n<\/li>\n<\/ol>\n<h4>Gateway\/APIM Gateway<\/h4>\n<pre><code>docker-compose.yml:gateway &nbsp;&nbsp;gateway: &nbsp;&nbsp;&nbsp;&nbsp;image: graviteeio\/apim-gateway:${APIM_VERSION:-3} &nbsp;&nbsp;&nbsp;&nbsp;container_name: gio_apim_gateway &nbsp;&nbsp;&nbsp;&nbsp;restart: always &nbsp;&nbsp;&nbsp;&nbsp;ports: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8082:8082\" &nbsp;&nbsp;&nbsp;&nbsp;depends_on: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- mongodb &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- elasticsearch &nbsp;&nbsp;&nbsp;&nbsp;volumes: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- .\/logs\/apim-gateway:\/opt\/graviteeio-gateway\/logs  &nbsp;&nbsp;&nbsp;&nbsp;environment:     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_management_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_ratelimit_mongodb_uri=mongodb:\/\/mongodb:27017\/gravitee?serverSelectionTimeoutMS=5000&amp;connectTimeoutMS=5000&amp;socketTimeoutMS=5000 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- gravitee_reporters_elasticsearch_endpoints_0=http:\/\/elasticsearch:9200 &nbsp;&nbsp;&nbsp;&nbsp;networks: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- storage &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- frontend<\/code><\/pre>\n<p>\u0421 Gateway \u0432\u0441\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u2014 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 3, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043d\u043e\u0435. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u043d\u0430&nbsp;<a href=\"http:\/\/hub.docker.com\/\">hub.docker.com<\/a>, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0443 \u0432\u0435\u0440\u0441\u0438\u0439 3 \u0438 latest \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0445\u0435\u0448\u0438. \u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b MongoDB \u0438&nbsp;Elasticsearch. \u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 Gateway \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f \u0438 \u0437\u0430\u0431\u0440\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c API \u0438\u0437 mongodb, \u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0432\u044f\u0437\u044c \u0441 mongodb \u0438 elasticsearch \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430. \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u043b\u043e\u0433\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u044b\u043f\u0430\u0442\u044c\u0441\u044f, \u043d\u043e \u0441\u0430\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u0437\u0430\u043a\u0430\u0447\u0430\u043b \u0432 \u0441\u0435\u0431\u044f Gateway. \u0412 \u0441\u0435\u043a\u0446\u0438\u0438 environment \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u0430\u043c\u043e\u0433\u043e Gateway, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a: gravitee.yml. \u041a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u0433\u0438, \u0442\u0435\u043d\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Open Distro for Elasticsearch \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u043e\u0433\u043e Elasticsearch. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u0433\u0438, \u0442\u0435\u043d\u0430\u043d\u0442\u044b \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0448\u043b\u044e\u0437\u0430.<\/p>\n<pre><code>environment: &nbsp;&nbsp;- gravitee_tags=service-tag #&nbsp;\u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c&nbsp;\u0442\u0435\u0433: service-tag &nbsp;&nbsp;- gravitee_tenant=service-space #&nbsp;\u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c&nbsp;\u0442\u0435\u043d\u0430\u043d\u0442: service-space &nbsp;&nbsp;- gravitee_services_core_http_enabled=true # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u044b\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 Gateway &nbsp;&nbsp;- gravitee_services_core_http_port=18082 # \u043f\u043e\u0440\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 &nbsp;&nbsp;- gravitee_services_core_http_host=0.0.0.0 # \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u0430&nbsp; &nbsp;&nbsp;- gravitee_services_core_http_authentication_type=basic # \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043b\u0438\u0431\u043e \u043d\u0435\u0442, \u043b\u0438\u0431\u043e basic - \u043b\u043e\u0433\u0438\u043d + \u043f\u0430\u0440\u043e\u043b\u044c &nbsp;&nbsp;- gravitee_services_core_http_authentication_type_users_admin=password #&nbsp;\u043b\u043e\u0433\u0438\u043d: admin,&nbsp;\u043f\u0430\u0440\u043e\u043b\u044c: password \u0427\u0442\u043e\u0431\u044b \u043a \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u0432\u043d\u0435, \u043d\u0430\u0434\u043e \u0435\u0449\u0451 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0440\u0442 18082. ports: &nbsp;&nbsp;-<\/code><\/pre>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-323894","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/323894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=323894"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/323894\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=323894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=323894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=323894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}