Gravitee.io 是一个相对比较完整的api gateway 平台,包含了api 相对比较完整的生命周期管理
同时在访问控制以及日志监控上也做的比较好,是一款可以尝试试用的api gateway 平台

环境准备

  • docker-compose 文件
 
version: '3'
networks:
  default:
services:
  nginx:
    image: nginx:1.15-alpine
    container_name: gio_platform_nginx
    restart: always
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/ssl/gio-selfsigned.crt:/etc/ssl/certs/gio-selfsigned.crt
      - ./nginx/ssl/gio-selfsigned.key:/etc/ssl/private/gio-selfsigned.key
      - ./nginx/ssl/gio.pem:/etc/ssl/certs/gio.pem
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - apim_gateway
      - apim_portal
      - apim_management
      - am_gateway
      - am_management
      - am_webui
  mongodb:
    image: mongo:3.4
    restart: always
    container_name: gio_platform_mongo
    ports:
      - 27017:27017
    environment:
      - MONGO_INITDB_DATABASE=gravitee
    volumes:
      - ./mongo/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
      - ./data/mongo:/data/db
      - ./logs/mongodb:/var/log/mongodb
  elasticsearch:
    image: elasticsearch:6.4.0
    container_name: gio_platform_elasticsearch
    restart: always
    ports:
      - 9200:9200
    environment:
      - http.host=0.0.0.0
      - transport.host=0.0.0.0
      - xpack.security.enabled=false
      - xpack.monitoring.enabled=false
      - cluster.name=elasticsearch
    ulimits:
      nofile: 65536
    volumes:
      - ./data/elasticsearch:/usr/share/elasticsearch/data
      - ./logs/elasticsearch:/var/log/elasticsearch
  apim_gateway:
    image: graviteeio/gateway:latest
    container_name: gio_platform_apim_gateway
    restart: always
    volumes: 
      - ./logs/apim-gateway:/opt/graviteeio-gateway/logs
    environment:
      - gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
      - gravitee_ratelimit_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
      - gravitee_reporters_elasticsearch_endpoints_0=http://elasticsearch:9200
    depends_on:
      - mongodb
      - elasticsearch
  apim_portal:
    image: graviteeio/management-ui:latest
    container_name: gio_platform_apim_portal
    restart: always
    environment:
      - MGMT_API_URL=https:\/\/localhost\/apim\/management\/
    depends_on:
      - apim_management
  apim_management:
    image: graviteeio/management-api:latest
    container_name: gio_platform_apim_mgmt_api
    restart: always
    volumes:
      - ./logs/apim-management-api:/opt/graviteeio-management-api/logs
    environment:
      - gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
      - gravitee_ratelimit_mongodb_uri=mongodb://mongodb:27017/gravitee?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
      - gravitee_analytics_elasticsearch_endpoints_0=http://elasticsearch:9200
      - gravitee_jwt_cookiepath=/apim/management
      - gravitee_jwt_cookiesecure=true
    depends_on:
      - mongodb
      - elasticsearch
  am_gateway:
    image: graviteeio/am-gateway:2
    container_name: gio_platform_am_gateway
    restart: always
    volumes:
      - ./logs/am-gateway:/opt/graviteeio-am-gateway/logs
    environment:
      - gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee-am?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
      - gravitee_oauth2_mongodb_uri=mongodb://mongodb:27017/gravitee-am?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
    depends_on:
      - mongodb
  am_management:
    image: graviteeio/am-management-api:2
    container_name: gio_platform_am_management
    restart: always
    volumes:
      - ./logs/am-management-api:/opt/graviteeio-am-management-api/logs
    environment:
      - gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee-am?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
      - gravitee_oauth2_mongodb_uri=mongodb://mongodb:27017/gravitee-am?serverSelectionTimeoutMS=5000&connectTimeoutMS=5000&socketTimeoutMS=5000
      - gravitee_jwt_cookiepath=/am/management
      - gravitee_jwt_cookiesecure=true
    depends_on:
      - mongodb
  am_webui:
    image: graviteeio/am-management-ui:2
    container_name: gio_platform_am_webui
    restart: always
    environment:
      - MGMT_API_URL=https:\/\/localhost\/am\/
      - MGMT_UI_URL=https:\/\/localhost\/am\/ui\/
    volumes:
      - ./logs/am-webui:/var/log/nginx
    depends_on:
      - am_management
 
 
  • 简单说明
    docker compose 文件包含了api gateway 以及访问管理以及日志的基础组件,访问入口通过nginx,同时官方
    也提供了一个基于trafic 的demo,也挺不错
    nginx.conf 主要是proxy 的配置,同时添加了https 证书的处理(自签名的),nginx 配置文件处理了对于重定向
    的配置,好多配置对于我们来说还是有借鉴意义的。
    因为使用了mongo 所以在初始化数据库的时候进行了一些索引的创建,详细的配置可以参考github

运行

  • 运行
 
docker-compose up -d
 

UI 效果 账户admin admin

访问控制管理UI 账户 admin adminadmin

试用

  • 创建api


中间的一些步骤按照提示操作即可

同时可以需要进行api 的发布以及启动,界面上还是很全的,直接参考提示操作即可

  • 使用api

需要创建app

然后需要创建api 的订阅,我们可以进行审核处理

说明

Gravitee.io 对于api 的管理功能比较全,后边会写一些关于如果使用的简单demo

参考资料

https://docs.gravitee.io/apim_quickstart_publish.html
https://docs.gravitee.io/apim_quickstart_consume.html
https://github.com/gravitee-io/gravitee-docker

Gravitee.io docker-compose运行的更多相关文章

  1. dotnet跨平台 - 使用Nginx+Docker Compose运行.NETCore项目

    参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...

  2. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  3. Docker深入浅出系列 | Docker Compose多容器实战

    目录 前期准备 Docker Compose是什么 为什么要用Docker Compose Docker Compose使用场景 Docker Compose安装 Compose Yaml文件结构 C ...

  4. Docker 容器编排利器 Docker Compose

    Compose 简介 通过前面几篇文章的学习,我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器.然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如 ...

  5. Docker小白到实战之Docker Compose在手,一键足矣

    前言 Docker可以将应用程序及环境很方便的以容器的形式启动,但当应用程序依赖的服务比较多,或是遇到一个大系统拆分的服务很多时,如果还一个一个的根据镜像启动容器,那就有点累人了,到这有很多小伙伴会说 ...

  6. Docker Compose 容器编排 NET Core 6+MySQL 8+Nginx + Redis

    环境: CentOS 8.5.2111Docker 20.10.10Docker-Compose 2.1.0 服务: db  redis  web nginx NET Core 6+MySQL 8+N ...

  7. Docker从入门到精通(八)——Docker Compose

    恭喜大家,学到这里,对于 docker 的基础玩法大家应该都会了,下面会介绍 docker的一些编排工具. 1.为什么需要 Docker Compose? 官网镇楼:https://www.runoo ...

  8. docker Compose 部署springboot+vue前端端分离项目

    温馨提示:如果有自己的服务器最好不过了,这样部署网项目就可以上线了.没有的话,只能使用localhost 本机访问啦,记得替换 ngixn 中的ip地址.域名为localhost. (一) 准备工作 ...

  9. Docker:Docker Compose 详解

    Docker Compose 概述与安装? 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架 ...

  10. 使用 pycharm调试docker环境运行的Odoo

    2019日 星期一 安装docker windows系统,参考 docker官方文档 Mac系统,参考 docker官方文档 构建自定义ODOO镜像 标准ODOO镜像可能不包含特别的python模块, ...

随机推荐

  1. 字符与字符串3——char 的大小

    字符变量占用内存的大小,也就是char类型声明的变量,这个变量占多少字节. 一字节 char c = 'A'; printf("%d,%d\n", sizeof(c),sizeof ...

  2. 如何在Ubuntu中安装中文输入法

    在使用ubuntu系统时,有的时候总觉得英文输入法不方便操作,总希望能有中文输入法可以辅助操作,那怎样才能在ubuntu中安装中文输入法呢?下面有一种简单的方法可以安装中文输入法. 如何在ubuntu ...

  3. 二. Python基础(2)--语法

    二. Python基础(2)--语法 1.实现一个简单的登录系统 '''# 形式1 n = 1 while n < 4:     name = input("请输入姓名\n" ...

  4. Configuring Ubuntu for deep learning with Python in Ubuntu16.04

    博主最近浏览到一个网站PyImageSearch,看到里面的项目还不错,就顺手配置一下环境,试着去跑下里面的模型. 首先,需要配置好需要运行模型的环境,其实主要的步骤分为以下三步: 1. 安装Ubun ...

  5. springboot 打包部署

    springboot内置有tomcat所以我们测试的时候没有加入自己的容器 那么我们的 springboot 怎么发布呢? 1.打成 jar 2.打成 war 这种方式我就不说了,网上有教程,我觉得j ...

  6. L298 猴子进化过程

    The evolution of monkeys remains a mystery Why monkeys and apes took separate evolutionary paths has ...

  7. mysql字段添加修改删除

    MySQL添加字段和修改字段   MySQL添加字段的方法并不复杂,下面将为您详细介绍MYSQL添加字段和修改字段等操作的实现方法,希望对您学习MySQL添加字段方面会有所帮助. 1添加表字段 alt ...

  8. 《统计学习方法》笔记(9):EM算法和隐马尔科夫模型

    EM也称期望极大算法(Expectation Maximization),是一种用来对含有隐含变量的概率模型进行极大似然估计的迭代算法.该算法可应用于隐马尔科夫模型的参数估计. 1.含有隐含参数的概率 ...

  9. 构造方法调用另一个构造方法,用this

    using System; class Person { public int age; public string name; public Person(int age, string name) ...

  10. for循环遍历改用map函数

    # for url in urls:# url = response.urljoin(url)# print(url)urls = map(lambda url:response.urljoin(ur ...