docker.recipes

Gravitee API Management Platform

advanced

Full API management with gateway, management API, and developer portal.

Overview

Gravitee API Management Platform is an open-source, full-featured API management solution that provides comprehensive API lifecycle management capabilities. Originally developed to address the complexity of modern API ecosystems, Gravitee offers a complete suite including an API gateway for traffic routing and policy enforcement, management APIs for configuration and administration, and a developer portal for API documentation and consumption. The platform has gained traction among organizations seeking an alternative to proprietary API management solutions while maintaining enterprise-grade features. This Docker stack combines Gravitee's core components with MongoDB for configuration and user data storage, plus Elasticsearch for analytics and logging. The gravitee-gateway handles API traffic routing, rate limiting, and security policies, while gravitee-management provides the REST APIs for administrative functions. The gravitee-console offers a web-based administrative interface, and gravitee-portal delivers a self-service developer experience for API discovery and consumption. MongoDB stores API definitions, user accounts, application registrations, and subscription data, while Elasticsearch powers the analytics dashboard, API usage metrics, and log aggregation. This combination creates a powerful API management platform suitable for organizations transitioning from monolithic architectures to microservices, companies building API-first products, or enterprises needing centralized API governance and security policies across distributed teams and services.

Key Features

  • API gateway with request/response transformation, routing policies, and traffic shaping capabilities
  • Built-in rate limiting and quota management with MongoDB persistence for distributed enforcement
  • OAuth2, JWT, API key authentication with customizable security policies per API endpoint
  • Real-time API analytics and usage dashboards powered by Elasticsearch aggregations
  • Developer portal with interactive API documentation, subscription management, and application registration
  • Policy studio for creating custom request/response flows using drag-and-drop interface
  • Multi-tenant organization support with role-based access control and environment separation
  • API versioning and lifecycle management with deployment promotion workflows

Common Use Cases

  • 1Enterprise API gateway for microservices architecture with centralized security and monitoring
  • 2Public API monetization platform with developer onboarding and subscription management
  • 3Internal API governance for large organizations with multiple development teams
  • 4Legacy system modernization with API abstraction layer and gradual migration support
  • 5Partner ecosystem management with controlled API access and usage analytics
  • 6Regulatory compliance scenarios requiring detailed API audit trails and access logging
  • 7Multi-cloud API strategy with consistent policy enforcement across environments

Prerequisites

  • Docker host with minimum 6GB RAM (2GB for Elasticsearch, 2GB for Gravitee components, 2GB for system)
  • Available ports 8082-8085 for Gravitee services and 9200, 27017 for data stores
  • MONGO_PASSWORD environment variable configured for MongoDB authentication
  • Basic understanding of API management concepts like policies, plans, and applications
  • Network connectivity for Gravitee license validation and plugin downloads
  • SSD storage recommended for Elasticsearch performance and MongoDB operations

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 mongodb:
3 image: mongo:6
4 environment:
5 MONGO_INITDB_ROOT_USERNAME: admin
6 MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
7 volumes:
8 - mongo_data:/data/db
9 networks:
10 - gravitee_net
11
12 elasticsearch:
13 image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
14 environment:
15 - discovery.type=single-node
16 - xpack.security.enabled=false
17 - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
18 volumes:
19 - es_data:/usr/share/elasticsearch/data
20 networks:
21 - gravitee_net
22
23 gravitee-gateway:
24 image: graviteeio/apim-gateway:latest
25 ports:
26 - "8082:8082"
27 environment:
28 - gravitee_management_mongodb_uri=mongodb://admin:${MONGO_PASSWORD}@mongodb:27017/gravitee?authSource=admin
29 - gravitee_ratelimit_mongodb_uri=mongodb://admin:${MONGO_PASSWORD}@mongodb:27017/gravitee?authSource=admin
30 - gravitee_reporters_elasticsearch_endpoints_0=http://elasticsearch:9200
31 depends_on:
32 - mongodb
33 - elasticsearch
34 networks:
35 - gravitee_net
36
37 gravitee-management:
38 image: graviteeio/apim-management-api:latest
39 ports:
40 - "8083:8083"
41 environment:
42 - gravitee_management_mongodb_uri=mongodb://admin:${MONGO_PASSWORD}@mongodb:27017/gravitee?authSource=admin
43 - gravitee_analytics_elasticsearch_endpoints_0=http://elasticsearch:9200
44 depends_on:
45 - mongodb
46 - elasticsearch
47 networks:
48 - gravitee_net
49
50 gravitee-console:
51 image: graviteeio/apim-management-ui:latest
52 ports:
53 - "8084:8080"
54 environment:
55 - MGMT_API_URL=http://localhost:8083/management/organizations/DEFAULT/environments/DEFAULT/
56 depends_on:
57 - gravitee-management
58 networks:
59 - gravitee_net
60
61 gravitee-portal:
62 image: graviteeio/apim-portal-ui:latest
63 ports:
64 - "8085:8080"
65 environment:
66 - PORTAL_API_URL=http://localhost:8083/portal/environments/DEFAULT
67 depends_on:
68 - gravitee-management
69 networks:
70 - gravitee_net
71
72volumes:
73 mongo_data:
74 es_data:
75
76networks:
77 gravitee_net:

.env Template

.env
1# Gravitee APIM
2MONGO_PASSWORD=secure_mongo_password
3
4# Gateway at http://localhost:8082
5# Console at http://localhost:8084
6# Portal at http://localhost:8085
7# Default: admin/admin

Usage Notes

  1. 1Gateway at http://localhost:8082
  2. 2Admin Console at http://localhost:8084
  3. 3Developer Portal at http://localhost:8085
  4. 4Default credentials: admin/admin
  5. 5Full API lifecycle management

Individual Services(6 services)

Copy individual services to mix and match with your existing compose files.

mongodb
mongodb:
  image: mongo:6
  environment:
    MONGO_INITDB_ROOT_USERNAME: admin
    MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
  volumes:
    - mongo_data:/data/db
  networks:
    - gravitee_net
elasticsearch
elasticsearch:
  image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
  environment:
    - discovery.type=single-node
    - xpack.security.enabled=false
    - ES_JAVA_OPTS=-Xms512m -Xmx512m
  volumes:
    - es_data:/usr/share/elasticsearch/data
  networks:
    - gravitee_net
gravitee-gateway
gravitee-gateway:
  image: graviteeio/apim-gateway:latest
  ports:
    - "8082:8082"
  environment:
    - gravitee_management_mongodb_uri=mongodb://admin:${MONGO_PASSWORD}@mongodb:27017/gravitee?authSource=admin
    - gravitee_ratelimit_mongodb_uri=mongodb://admin:${MONGO_PASSWORD}@mongodb:27017/gravitee?authSource=admin
    - gravitee_reporters_elasticsearch_endpoints_0=http://elasticsearch:9200
  depends_on:
    - mongodb
    - elasticsearch
  networks:
    - gravitee_net
gravitee-management
gravitee-management:
  image: graviteeio/apim-management-api:latest
  ports:
    - "8083:8083"
  environment:
    - gravitee_management_mongodb_uri=mongodb://admin:${MONGO_PASSWORD}@mongodb:27017/gravitee?authSource=admin
    - gravitee_analytics_elasticsearch_endpoints_0=http://elasticsearch:9200
  depends_on:
    - mongodb
    - elasticsearch
  networks:
    - gravitee_net
gravitee-console
gravitee-console:
  image: graviteeio/apim-management-ui:latest
  ports:
    - "8084:8080"
  environment:
    - MGMT_API_URL=http://localhost:8083/management/organizations/DEFAULT/environments/DEFAULT/
  depends_on:
    - gravitee-management
  networks:
    - gravitee_net
gravitee-portal
gravitee-portal:
  image: graviteeio/apim-portal-ui:latest
  ports:
    - "8085:8080"
  environment:
    - PORTAL_API_URL=http://localhost:8083/portal/environments/DEFAULT
  depends_on:
    - gravitee-management
  networks:
    - gravitee_net

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 mongodb:
5 image: mongo:6
6 environment:
7 MONGO_INITDB_ROOT_USERNAME: admin
8 MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
9 volumes:
10 - mongo_data:/data/db
11 networks:
12 - gravitee_net
13
14 elasticsearch:
15 image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
16 environment:
17 - discovery.type=single-node
18 - xpack.security.enabled=false
19 - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
20 volumes:
21 - es_data:/usr/share/elasticsearch/data
22 networks:
23 - gravitee_net
24
25 gravitee-gateway:
26 image: graviteeio/apim-gateway:latest
27 ports:
28 - "8082:8082"
29 environment:
30 - gravitee_management_mongodb_uri=mongodb://admin:${MONGO_PASSWORD}@mongodb:27017/gravitee?authSource=admin
31 - gravitee_ratelimit_mongodb_uri=mongodb://admin:${MONGO_PASSWORD}@mongodb:27017/gravitee?authSource=admin
32 - gravitee_reporters_elasticsearch_endpoints_0=http://elasticsearch:9200
33 depends_on:
34 - mongodb
35 - elasticsearch
36 networks:
37 - gravitee_net
38
39 gravitee-management:
40 image: graviteeio/apim-management-api:latest
41 ports:
42 - "8083:8083"
43 environment:
44 - gravitee_management_mongodb_uri=mongodb://admin:${MONGO_PASSWORD}@mongodb:27017/gravitee?authSource=admin
45 - gravitee_analytics_elasticsearch_endpoints_0=http://elasticsearch:9200
46 depends_on:
47 - mongodb
48 - elasticsearch
49 networks:
50 - gravitee_net
51
52 gravitee-console:
53 image: graviteeio/apim-management-ui:latest
54 ports:
55 - "8084:8080"
56 environment:
57 - MGMT_API_URL=http://localhost:8083/management/organizations/DEFAULT/environments/DEFAULT/
58 depends_on:
59 - gravitee-management
60 networks:
61 - gravitee_net
62
63 gravitee-portal:
64 image: graviteeio/apim-portal-ui:latest
65 ports:
66 - "8085:8080"
67 environment:
68 - PORTAL_API_URL=http://localhost:8083/portal/environments/DEFAULT
69 depends_on:
70 - gravitee-management
71 networks:
72 - gravitee_net
73
74volumes:
75 mongo_data:
76 es_data:
77
78networks:
79 gravitee_net:
80EOF
81
82# 2. Create the .env file
83cat > .env << 'EOF'
84# Gravitee APIM
85MONGO_PASSWORD=secure_mongo_password
86
87# Gateway at http://localhost:8082
88# Console at http://localhost:8084
89# Portal at http://localhost:8085
90# Default: admin/admin
91EOF
92
93# 3. Start the services
94docker compose up -d
95
96# 4. View logs
97docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/gravitee-apim/run | bash

Troubleshooting

  • Gravitee Gateway returns 500 errors: Verify MongoDB connection string includes authSource=admin parameter
  • Management Console shows 'Cannot connect to Management API': Ensure MGMT_API_URL uses localhost not container name for browser access
  • Elasticsearch cluster health red: Increase vm.max_map_count on Docker host with 'sysctl -w vm.max_map_count=262144'
  • Portal UI displays API documentation incorrectly: Check PORTAL_API_URL environment variable matches management API external URL
  • MongoDB authentication failures: Confirm MONGO_PASSWORD environment variable matches across all Gravitee services
  • Gateway policies not applying: Restart gravitee-gateway after policy changes and verify MongoDB connectivity for policy synchronization

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space