A performant API Gateway based on Openresty and Nginx.
To build the docker image locally use:
make docker
To SSH into the newly built image use ( note that this is not the running image):
make docker-ssh
make docker-run
The main API Gateway process is exposed to port 8080. To test that the Gateway works see its health-check
:
$ curl http://<docker_host_ip>:8080/health-check API-Platform is running!
If you're up for a quick performance test, you can play with Apache Benchmark via Docker:
docker run jordi/ab ab -k -n 200000 -c 500 http://<docker_host_ip>:8080/health-check
To run docker mounting the local api-gateway-config
directory into /etc/api-gateway/
issue:
$ make docker-debug
In debug mode docker container starts with -e "LOG_LEVEL=debug"
which will give you a little more debugging information.
To enable the full debug logging in nginx ( using a build configured --with-debug
) there will be a separate container.
When done stop the image:
make docker-stop
make docker-attach
Make an HTTP POST on http://<marathon-host>/v2/apps
with the following payload. For optimal performance leave the network
on HOST
mode. To learn more about the network modes visit the Docker documentation.
{ "id": "api-gateway", "container": { "type": "DOCKER", "docker": { "image": "apiplatform/apigateway:latest", "forcePullImage": true, "network": "HOST" } }, "cpus": 4, "mem": 4096.0, "env": { "MARATHON_HOST": "http://<marathon_host>:<marathon_port>" }, "constraints": [ [ "hostname", "UNIQUE" ] ], "acceptedResourceRoles": ["slave_public"], "ports": [ 80 ], "healthChecks": [ { "protocol": "HTTP", "portIndex": 0, "path": "/health-check", "gracePeriodSeconds": 3, "intervalSeconds": 10, "timeoutSeconds": 10 } ], "instances": 1 }
To enable auto-discovery in a Mesos with Marathon framework define the following Environment Variables:
MARATHON_URL=http://<marathon-url-1> MARATHON_TASKS=ws-.* ( NOT USED NOW. TBD IF THERE'S A NEED TO FILTER OUT SOME TASKS )
So the Docker command is now :
docker run --name="apigateway" \ -p 8080:80 \ -e "MARATHON_HOST=http://<marathon_host>:<port>/" \ -e "LOG_LEVEL=info" \ apiplatform/apigateway:latest