* add support for OpenAPI validation (#717) * update copyright years * fix ES ref * update CLI
pygeoapi Docker How To
Docker Image geopython/pygeoapi:latest and versions are available from DockerHub.
Each Docker Image contains a default configuration default.config.yml with the project's test data and OGC API dataset collections.
You can override this default config via Docker Volume mapping or by extending the Docker Image and copying in your config. See an example for the geoapi demo server for the latter method.
https://github.com/geopython/demo.pygeoapi.io/tree/master/services Depending on your config you may need specific backends to be available.
Background
The version tagged latest is automatically built whenever code in the master branch of this GitHub repo changes (autobuild). This also cascades to updating the pygeoapi demo service.
So the chain is:
(git push to master) --> (DockerHub Image autobuild) --> (demo server redeploy)
There are a number of examples at several examples.
Installation
Install Docker (Ubuntu)
sudo apt-get install apt-transport-https
sudo apt-get install ca-certificates
sudo apt-get install curl
sudo apt-get install gnupg-agent
sudo apt-get install software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
Pull dockerhub repo
docker pull geopython/pygeoapi
Create your own my.config.yml (https://github.com/geopython/pygeoapi/blob/master/docker/examples/simple/my.config.yml) in home directory
Run/Create Container
$ sudo docker run --name geoapi -p 5000:80 -v $(pwd)/my.config.yml:/pygeoapi/local.config.yml -it geopython/pygeoapi
Go to http://localhost:5000/ and should be up and running.
Running - Basics
By default this Image will start a pygeoapi Docker Container
using gunicorn on internal port 80.
To run with default built-in config and data:
docker run -p 5000:80 -it geopython/pygeoapi run
# or simply
docker run -p 5000:80 -it geopython/pygeoapi
# then browse to http://localhost:5000/
You can also run all unit tests to verify:
docker run -it geopython/pygeoapi test
Running - Overriding the default config
Normally you would override the default.config.yml with your own pygeoapi config.
This can be effected best via Docker Volume Mapping.
For example if your config is in my.config.yml:
docker run -p 5000:80 -v $(pwd)/my.config.yml:/pygeoapi/local.config.yml -it geopython/pygeoapi
But better/cleaner is to use docker-compose. Something like:
version: "3"
services:
pygeoapi:
image: geopython/pygeoapi:latest
volumes:
- ./my.config.yml:/pygeoapi/local.config.yml
Or you can create a Dockerfile extending the base Image and COPY in your config:
FROM geopython/pygeoapi:latest
COPY ./my.config.yml /pygeoapi/local.config.yml
See how the demo server is setup this way at https://github.com/geopython/demo.pygeoapi.io/tree/master/services/pygeoapi_master
Running - Running on a sub-path
By default the pygeoapi Docker Image will run from the root path /.
If you need to run from a sub-path and have all internal URLs correct
you need to set SCRIPT_NAME environment variable.
For example to run with my.config.yml on http://localhost:5000/mypygeoapi:
docker run -p 5000:80 -e SCRIPT_NAME='/mypygeoapi' -v $(pwd)/my.config.yml:/pygeoapi/local.config.yml -it geopython/pygeoapi
# browse to http://localhost:5000/mypygeoapi
Or within a docker-compose.yml full example:
version: "3"
services:
pygeoapi:
image: geopython/pygeoapi:latest
volumes:
- ./my.config.yml:/pygeoapi/local.config.yml
ports:
- "5000:80"
environment:
- SCRIPT_NAME=/pygeoapi
See pygeoapi demo service for an full example.