├── .circleci └── config.yml ├── .github └── workflows │ └── dockerhub-description.yml ├── Dockerfile ├── LICENSE ├── README.md ├── archive ├── 1.10 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.11 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.12 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.13 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.14 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.15 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.16 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.17 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.18 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.19 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── 1.20 │ ├── Dockerfile │ └── docker-entrypoint.sh └── 1.9 │ ├── Dockerfile │ └── docker-entrypoint.sh ├── docker-entrypoint.sh ├── kubernetes ├── osrm-car-canary.yaml └── osrm-car.yaml └── tests ├── osrm_backend.postman_collection.json └── wait-for-http.sh /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | executors: 3 | docker-executor: 4 | environment: 5 | IMAGE_NAME: peterevans/osrm-backend-k8s 6 | OSRM_PBF_URL: http://download.geofabrik.de/asia/maldives-latest.osm.pbf 7 | docker: 8 | - image: circleci/buildpack-deps:stretch 9 | jobs: 10 | build: 11 | executor: docker-executor 12 | environment: 13 | IMAGE_TAG: latest 14 | DOCKERFILE_PATH: . 15 | steps: 16 | - checkout 17 | - setup_remote_docker 18 | - run: 19 | name: Build Docker image 20 | command: | 21 | docker build -t $IMAGE_NAME:$IMAGE_TAG $DOCKERFILE_PATH --label "org.opencontainers.image.version=${CIRCLE_TAG/v/''}" 22 | - run: 23 | name: Cache Docker image 24 | command: docker save -o $IMAGE_TAG.tar $IMAGE_NAME 25 | - persist_to_workspace: 26 | root: . 27 | paths: 28 | - ./*.tar 29 | test: 30 | executor: docker-executor 31 | steps: 32 | - checkout 33 | - attach_workspace: 34 | at: /tmp/workspace 35 | - setup_remote_docker 36 | - run: 37 | name: Load cached Docker image 38 | command: | 39 | docker load -i /tmp/workspace/latest.tar 40 | - run: 41 | name: Test Docker image 42 | command: | 43 | docker run -d -e OSRM_PBF_URL=$OSRM_PBF_URL --name osrm-backend-k8s $IMAGE_NAME:latest 44 | # Dummy container to store tests 45 | docker create -v /etc/newman --name tests alpine:3.4 /bin/true 46 | docker cp tests/. tests:/etc/newman 47 | # Run tests 48 | docker run --network container:osrm-backend-k8s jwilder/dockerize -wait http://localhost:5000/nearest/v1/healthz/0,0 -timeout 120s -wait-retry-interval 5s 49 | docker run --network container:osrm-backend-k8s --volumes-from tests -t postman/newman:4.4.0-alpine run osrm_backend.postman_collection.json 50 | publish-tag: 51 | executor: docker-executor 52 | steps: 53 | - attach_workspace: 54 | at: /tmp/workspace 55 | - setup_remote_docker 56 | - run: 57 | name: Load cached Docker image 58 | command: | 59 | docker load -i /tmp/workspace/latest.tar 60 | - run: 61 | name: Publish Docker Image to Docker Hub 62 | command: | 63 | echo "$DOCKERHUB_PASSWORD" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin 64 | IMAGE_TAG=${CIRCLE_TAG/v/''} 65 | docker tag $IMAGE_NAME:latest $IMAGE_NAME:$IMAGE_TAG 66 | docker push $IMAGE_NAME:latest 67 | docker push $IMAGE_NAME:$IMAGE_TAG 68 | # If the minor version can be extracted then tag and push 69 | MINOR_VERSION=$(echo $CIRCLE_TAG | sed -n "s/^v\([0-9]*.[0-9]*\).[0-9]*$/\1/p") 70 | if [[ ${#MINOR_VERSION} -gt 0 ]]; then 71 | docker tag $IMAGE_NAME:latest $IMAGE_NAME:$MINOR_VERSION 72 | docker push $IMAGE_NAME:$MINOR_VERSION 73 | fi 74 | workflows: 75 | version: 2 76 | build: 77 | jobs: 78 | - build 79 | - test: 80 | requires: 81 | - build 82 | build-and-publish-tags: 83 | jobs: 84 | - build: 85 | filters: 86 | tags: 87 | only: /^v.*/ 88 | branches: 89 | ignore: /.*/ 90 | - test: 91 | requires: 92 | - build 93 | filters: 94 | tags: 95 | only: /^v.*/ 96 | branches: 97 | ignore: /.*/ 98 | - publish-tag: 99 | context: org-global 100 | requires: 101 | - test 102 | filters: 103 | tags: 104 | only: /^v.*/ 105 | branches: 106 | ignore: /.*/ -------------------------------------------------------------------------------- /.github/workflows/dockerhub-description.yml: -------------------------------------------------------------------------------- 1 | name: Update Docker Hub Description 2 | on: 3 | push: 4 | branches: 5 | - master 6 | paths: 7 | - README.md 8 | - .github/workflows/dockerhub-description.yml 9 | jobs: 10 | dockerHubDescription: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v1 14 | - name: Docker Hub Description 15 | uses: peter-evans/dockerhub-description@v2.1.0 16 | env: 17 | DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} 18 | DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} 19 | DOCKERHUB_REPOSITORY: peterevans/osrm-backend-k8s 20 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.23 2 | 3 | LABEL \ 4 | maintainer="Peter Evans " \ 5 | org.opencontainers.image.title="osrm-backend-k8s" \ 6 | org.opencontainers.image.description="Open Source Routing Machine (OSRM) osrm-backend for Kubernetes on Google Container Engine (GKE)." \ 7 | org.opencontainers.image.authors="Peter Evans " \ 8 | org.opencontainers.image.url="https://github.com/peter-evans/osrm-backend-k8s" \ 9 | org.opencontainers.image.vendor="https://peterevans.dev" \ 10 | org.opencontainers.image.licenses="MIT" 11 | 12 | ENV OSRM_VERSION 5.22.0 13 | 14 | # Let the container know that there is no TTY 15 | ARG DEBIAN_FRONTEND=noninteractive 16 | 17 | # Install packages 18 | RUN apt-get -y update \ 19 | && apt-get install -y -qq --no-install-recommends \ 20 | build-essential \ 21 | cmake \ 22 | curl \ 23 | libbz2-dev \ 24 | libstxxl-dev \ 25 | libstxxl1v5 \ 26 | libxml2-dev \ 27 | libzip-dev \ 28 | libboost-all-dev \ 29 | lua5.2 \ 30 | liblua5.2-dev \ 31 | libtbb-dev \ 32 | libluabind-dev \ 33 | pkg-config \ 34 | gcc \ 35 | python-dev \ 36 | python-setuptools \ 37 | && apt-get clean \ 38 | && easy_install -U pip \ 39 | && pip install -U crcmod \ 40 | && rm -rf /var/lib/apt/lists/* \ 41 | && rm -rf /tmp/* /var/tmp/* 42 | 43 | # Build osrm-backend 44 | RUN mkdir /osrm-src \ 45 | && cd /osrm-src \ 46 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 47 | && tar xzf v$OSRM_VERSION.tar.gz \ 48 | && cd osrm-backend-$OSRM_VERSION \ 49 | && mkdir build \ 50 | && cd build \ 51 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 52 | && cmake --build . \ 53 | && cmake --build . --target install \ 54 | && mkdir /osrm-data \ 55 | && mkdir /osrm-profiles \ 56 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 57 | && rm -rf /osrm-src 58 | 59 | # Set the entrypoint 60 | COPY docker-entrypoint.sh / 61 | RUN chmod +x /docker-entrypoint.sh 62 | ENTRYPOINT ["/docker-entrypoint.sh"] 63 | 64 | EXPOSE 5000 65 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Open Source Cartography 4 | Copyright (c) 2016 Peter Evans 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # osrm-backend for Kubernetes 2 | [![](https://images.microbadger.com/badges/image/peterevans/osrm-backend-k8s.svg)](https://microbadger.com/images/peterevans/osrm-backend-k8s) 3 | [![CircleCI](https://circleci.com/gh/peter-evans/osrm-backend-k8s/tree/master.svg?style=svg)](https://circleci.com/gh/peter-evans/osrm-backend-k8s/tree/master) 4 | 5 | Open Source Routing Machine (OSRM) [osrm-backend](https://github.com/Project-OSRM/osrm-backend) for Kubernetes on Google Container Engine (GKE). 6 | 7 | This Docker image and sample Kubernetes configuration files are one solution to persisting [osrm-backend](https://github.com/Project-OSRM/osrm-backend) data and providing immutable deployments. 8 | 9 | If you are looking for a more general purpose docker image, see [osrm-backend-docker](https://github.com/peter-evans/osrm-backend-docker). 10 | 11 | ## Supported tags and respective `Dockerfile` links 12 | 13 | - [`1.21.1`, `1.21`, `latest` (*1.21/Dockerfile*)](https://github.com/peter-evans/osrm-backend-k8s/tree/master) 14 | - [`1.20.0`, `1.20` (*1.20/Dockerfile*)](https://github.com/peter-evans/osrm-backend-k8s/tree/master/archive/1.20) 15 | - [`1.19.0`, `1.19` (*1.19/Dockerfile*)](https://github.com/peter-evans/osrm-backend-k8s/tree/master/archive/1.19) 16 | - [`1.18.0`, `1.18` (*1.18/Dockerfile*)](https://github.com/peter-evans/osrm-backend-k8s/tree/master/archive/1.18) 17 | - [`1.17.1`, `1.17` (*1.17/Dockerfile*)](https://github.com/peter-evans/osrm-backend-k8s/tree/master/archive/1.17) 18 | 19 | For earlier versions see [releases](https://github.com/peter-evans/osrm-backend-k8s/releases) and the available [tags on Docker Hub](https://hub.docker.com/r/peterevans/osrm-backend-k8s/tags/). 20 | 21 | ## Usage 22 | The Docker image can be run standalone without Kubernetes: 23 | 24 | ```bash 25 | docker run -d -p 5000:5000 \ 26 | -e OSRM_PBF_URL='http://download.geofabrik.de/asia/maldives-latest.osm.pbf' \ 27 | --name osrm-backend peterevans/osrm-backend-k8s:latest 28 | ``` 29 | Tail the logs to verify the graph has been built and osrm-backend is serving requests: 30 | ``` 31 | docker logs -f 32 | ``` 33 | Then point your web browser to [http://localhost:5000/](http://localhost:5000/) 34 | 35 | ## Kubernetes Deployment 36 | The [osrm-backend](https://github.com/Project-OSRM/osrm-backend) builds a data graph from a PBF file. This process can take over an hour for a single country. 37 | If a pod in a deployment fails, waiting over an hour for a new pod to start could lead to loss of service. 38 | 39 | The sample Kubernetes files provide a means of persisting a data graph in storage that is used by all pods in the deployment. 40 | Each pod having their own copy of the graph is desirable in order to have no single point of failure. 41 | 42 | #### Explanation 43 | Initial deployment flow: 44 | 45 | 1. Create a secret that contains the JSON key of a Google Cloud IAM service account that has read/write permissions to Google Storage. 46 | 2. Deploy the canary deployment. 47 | 3. Wait for the graph to be built and uploaded to Google Storage. 48 | 4. Delete the canary deployment. 49 | 5. Deploy the stable track deployment. 50 | 51 | To update the live deployment with a new graph: 52 | 53 | 1. Deploy the canary deployment alongside the stable track deployment. 54 | 2. Wait for the graph to be built and uploaded to Google Storage. 55 | 3. Delete the canary deployment. 56 | 4. Perform a rolling update on the stable track deployment to create pods using the new graph. 57 | 58 | #### Creating the secret 59 | 60 | ```bash 61 | # Google Cloud project ID and service account details 62 | PROJECT_ID=my-project 63 | SA_NAME=my-service-account 64 | SA_DISPLAY_NAME="My Service Account" 65 | SA_EMAIL=$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com 66 | KEY_FILE=service-account-key.json 67 | 68 | # Create a new GCP IAM service account 69 | gcloud iam service-accounts create $SA_NAME --display-name "$SA_DISPLAY_NAME" 70 | 71 | # Create and download a new key for the service account 72 | gcloud iam service-accounts keys create $KEY_FILE --iam-account $SA_EMAIL 73 | 74 | # Give the service account the "Storage Object Viewer" and "Storage Object Creator" IAM roles 75 | gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$SA_EMAIL --role roles/storage.objectViewer 76 | gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$SA_EMAIL --role roles/storage.objectCreator 77 | 78 | # Create a secret containing the service account key file 79 | kubectl create secret generic osrm-storage-secret --from-file=$KEY_FILE 80 | ``` 81 | 82 | #### Deployment configuration 83 | Before deploying, edit the `env` section of both the canary deployment and stable track deployment. 84 | 85 | - `OSRM_MODE` - `CREATE` from PBF data, or `RESTORE` from Google Storage. 86 | - `OSRM_PBF_URL` - URL to PBF data file. (Optional when `OSRM_MODE=RESTORE`) 87 | - `OSRM_GRAPH_PROFILE` - Graph profile; `car`,`bicycle` or `foot`. (Optional when `OSRM_MODE=RESTORE`) 88 | - `OSRM_DATA_LABEL` - A meaningful and **unique** label for the data. e.g. maldives-car-20161209 89 | - `OSRM_SA_KEY_PATH` - Path to the JSON service account key. This needs to match the `mountPath` of the volume mounted secret. 90 | - `OSRM_PROJECT_ID` - Google Cloud project ID. 91 | - `OSRM_GS_BUCKET` - Google Storage bucket. 92 | 93 | ## License 94 | 95 | MIT License - see the [LICENSE](LICENSE) file for details -------------------------------------------------------------------------------- /archive/1.10/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.7 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.11.0 6 | 7 | # Let the container know that there is no TTY 8 | ENV DEBIAN_FRONTEND noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | && apt-get clean \ 28 | && rm -rf /var/lib/apt/lists/* \ 29 | && rm -rf /tmp/* /var/tmp/* 30 | 31 | # Build osrm-backend 32 | RUN mkdir /osrm-src \ 33 | && cd /osrm-src \ 34 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 35 | && tar xzf v$OSRM_VERSION.tar.gz \ 36 | && cd osrm-backend-$OSRM_VERSION \ 37 | && mkdir build \ 38 | && cd build \ 39 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 40 | && cmake --build . \ 41 | && cmake --build . --target install \ 42 | && mkdir /osrm-data \ 43 | && mkdir /osrm-profiles \ 44 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 45 | && rm -rf /osrm-src 46 | 47 | # Set the entrypoint 48 | COPY docker-entrypoint.sh / 49 | RUN chmod +x /docker-entrypoint.sh 50 | ENTRYPOINT ["/docker-entrypoint.sh"] 51 | 52 | EXPOSE 5000 53 | -------------------------------------------------------------------------------- /archive/1.10/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.11/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.8 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.12.0 6 | 7 | # Let the container know that there is no TTY 8 | ENV DEBIAN_FRONTEND noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | && apt-get clean \ 28 | && rm -rf /var/lib/apt/lists/* \ 29 | && rm -rf /tmp/* /var/tmp/* 30 | 31 | # Build osrm-backend 32 | RUN mkdir /osrm-src \ 33 | && cd /osrm-src \ 34 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 35 | && tar xzf v$OSRM_VERSION.tar.gz \ 36 | && cd osrm-backend-$OSRM_VERSION \ 37 | && mkdir build \ 38 | && cd build \ 39 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 40 | && cmake --build . \ 41 | && cmake --build . --target install \ 42 | && mkdir /osrm-data \ 43 | && mkdir /osrm-profiles \ 44 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 45 | && rm -rf /osrm-src 46 | 47 | # Set the entrypoint 48 | COPY docker-entrypoint.sh / 49 | RUN chmod +x /docker-entrypoint.sh 50 | ENTRYPOINT ["/docker-entrypoint.sh"] 51 | 52 | EXPOSE 5000 53 | -------------------------------------------------------------------------------- /archive/1.11/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.12/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.9 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.13.0 6 | 7 | # Let the container know that there is no TTY 8 | ENV DEBIAN_FRONTEND noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | && apt-get clean \ 28 | && rm -rf /var/lib/apt/lists/* \ 29 | && rm -rf /tmp/* /var/tmp/* 30 | 31 | # Build osrm-backend 32 | RUN mkdir /osrm-src \ 33 | && cd /osrm-src \ 34 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 35 | && tar xzf v$OSRM_VERSION.tar.gz \ 36 | && cd osrm-backend-$OSRM_VERSION \ 37 | && mkdir build \ 38 | && cd build \ 39 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 40 | && cmake --build . \ 41 | && cmake --build . --target install \ 42 | && mkdir /osrm-data \ 43 | && mkdir /osrm-profiles \ 44 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 45 | && rm -rf /osrm-src 46 | 47 | # Set the entrypoint 48 | COPY docker-entrypoint.sh / 49 | RUN chmod +x /docker-entrypoint.sh 50 | ENTRYPOINT ["/docker-entrypoint.sh"] 51 | 52 | EXPOSE 5000 53 | -------------------------------------------------------------------------------- /archive/1.12/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.13/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.10 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.14.3 6 | 7 | # Let the container know that there is no TTY 8 | ENV DEBIAN_FRONTEND noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | && apt-get clean \ 28 | && rm -rf /var/lib/apt/lists/* \ 29 | && rm -rf /tmp/* /var/tmp/* 30 | 31 | # Build osrm-backend 32 | RUN mkdir /osrm-src \ 33 | && cd /osrm-src \ 34 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 35 | && tar xzf v$OSRM_VERSION.tar.gz \ 36 | && cd osrm-backend-$OSRM_VERSION \ 37 | && mkdir build \ 38 | && cd build \ 39 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 40 | && cmake --build . \ 41 | && cmake --build . --target install \ 42 | && mkdir /osrm-data \ 43 | && mkdir /osrm-profiles \ 44 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 45 | && rm -rf /osrm-src 46 | 47 | # Set the entrypoint 48 | COPY docker-entrypoint.sh / 49 | RUN chmod +x /docker-entrypoint.sh 50 | ENTRYPOINT ["/docker-entrypoint.sh"] 51 | 52 | EXPOSE 5000 53 | -------------------------------------------------------------------------------- /archive/1.13/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.14/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.11 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.15.3 6 | 7 | # Let the container know that there is no TTY 8 | ENV DEBIAN_FRONTEND noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | && apt-get clean \ 28 | && rm -rf /var/lib/apt/lists/* \ 29 | && rm -rf /tmp/* /var/tmp/* 30 | 31 | # Build osrm-backend 32 | RUN mkdir /osrm-src \ 33 | && cd /osrm-src \ 34 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 35 | && tar xzf v$OSRM_VERSION.tar.gz \ 36 | && cd osrm-backend-$OSRM_VERSION \ 37 | && mkdir build \ 38 | && cd build \ 39 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 40 | && cmake --build . \ 41 | && cmake --build . --target install \ 42 | && mkdir /osrm-data \ 43 | && mkdir /osrm-profiles \ 44 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 45 | && rm -rf /osrm-src 46 | 47 | # Set the entrypoint 48 | COPY docker-entrypoint.sh / 49 | RUN chmod +x /docker-entrypoint.sh 50 | ENTRYPOINT ["/docker-entrypoint.sh"] 51 | 52 | EXPOSE 5000 53 | -------------------------------------------------------------------------------- /archive/1.14/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.15/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.12 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.16.6 6 | 7 | # Let the container know that there is no TTY 8 | ENV DEBIAN_FRONTEND noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | gcc \ 28 | python-dev \ 29 | python-setuptools \ 30 | && apt-get clean \ 31 | && easy_install -U pip \ 32 | && pip install -U crcmod \ 33 | && rm -rf /var/lib/apt/lists/* \ 34 | && rm -rf /tmp/* /var/tmp/* 35 | 36 | # Build osrm-backend 37 | RUN mkdir /osrm-src \ 38 | && cd /osrm-src \ 39 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 40 | && tar xzf v$OSRM_VERSION.tar.gz \ 41 | && cd osrm-backend-$OSRM_VERSION \ 42 | && mkdir build \ 43 | && cd build \ 44 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 45 | && cmake --build . \ 46 | && cmake --build . --target install \ 47 | && mkdir /osrm-data \ 48 | && mkdir /osrm-profiles \ 49 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 50 | && rm -rf /osrm-src 51 | 52 | # Set the entrypoint 53 | COPY docker-entrypoint.sh / 54 | RUN chmod +x /docker-entrypoint.sh 55 | ENTRYPOINT ["/docker-entrypoint.sh"] 56 | 57 | EXPOSE 5000 58 | -------------------------------------------------------------------------------- /archive/1.15/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.16/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.13 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.17.3 6 | 7 | # Let the container know that there is no TTY 8 | ENV DEBIAN_FRONTEND noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | gcc \ 28 | python-dev \ 29 | python-setuptools \ 30 | && apt-get clean \ 31 | && easy_install -U pip \ 32 | && pip install -U crcmod \ 33 | && rm -rf /var/lib/apt/lists/* \ 34 | && rm -rf /tmp/* /var/tmp/* 35 | 36 | # Build osrm-backend 37 | RUN mkdir /osrm-src \ 38 | && cd /osrm-src \ 39 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 40 | && tar xzf v$OSRM_VERSION.tar.gz \ 41 | && cd osrm-backend-$OSRM_VERSION \ 42 | && mkdir build \ 43 | && cd build \ 44 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 45 | && cmake --build . \ 46 | && cmake --build . --target install \ 47 | && mkdir /osrm-data \ 48 | && mkdir /osrm-profiles \ 49 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 50 | && rm -rf /osrm-src 51 | 52 | # Set the entrypoint 53 | COPY docker-entrypoint.sh / 54 | RUN chmod +x /docker-entrypoint.sh 55 | ENTRYPOINT ["/docker-entrypoint.sh"] 56 | 57 | EXPOSE 5000 58 | -------------------------------------------------------------------------------- /archive/1.16/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.17/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.19 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.18.0 6 | 7 | # Let the container know that there is no TTY 8 | ARG DEBIAN_FRONTEND=noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | gcc \ 28 | python-dev \ 29 | python-setuptools \ 30 | && apt-get clean \ 31 | && easy_install -U pip \ 32 | && pip install -U crcmod \ 33 | && rm -rf /var/lib/apt/lists/* \ 34 | && rm -rf /tmp/* /var/tmp/* 35 | 36 | # Build osrm-backend 37 | RUN mkdir /osrm-src \ 38 | && cd /osrm-src \ 39 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 40 | && tar xzf v$OSRM_VERSION.tar.gz \ 41 | && cd osrm-backend-$OSRM_VERSION \ 42 | && mkdir build \ 43 | && cd build \ 44 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 45 | && cmake --build . \ 46 | && cmake --build . --target install \ 47 | && mkdir /osrm-data \ 48 | && mkdir /osrm-profiles \ 49 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 50 | && rm -rf /osrm-src 51 | 52 | # Set the entrypoint 53 | COPY docker-entrypoint.sh / 54 | RUN chmod +x /docker-entrypoint.sh 55 | ENTRYPOINT ["/docker-entrypoint.sh"] 56 | 57 | EXPOSE 5000 58 | -------------------------------------------------------------------------------- /archive/1.17/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl -L $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.18/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.19 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.19.0 6 | 7 | # Let the container know that there is no TTY 8 | ARG DEBIAN_FRONTEND=noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | gcc \ 28 | python-dev \ 29 | python-setuptools \ 30 | && apt-get clean \ 31 | && easy_install -U pip \ 32 | && pip install -U crcmod \ 33 | && rm -rf /var/lib/apt/lists/* \ 34 | && rm -rf /tmp/* /var/tmp/* 35 | 36 | # Build osrm-backend 37 | RUN mkdir /osrm-src \ 38 | && cd /osrm-src \ 39 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 40 | && tar xzf v$OSRM_VERSION.tar.gz \ 41 | && cd osrm-backend-$OSRM_VERSION \ 42 | && mkdir build \ 43 | && cd build \ 44 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 45 | && cmake --build . \ 46 | && cmake --build . --target install \ 47 | && mkdir /osrm-data \ 48 | && mkdir /osrm-profiles \ 49 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 50 | && rm -rf /osrm-src 51 | 52 | # Set the entrypoint 53 | COPY docker-entrypoint.sh / 54 | RUN chmod +x /docker-entrypoint.sh 55 | ENTRYPOINT ["/docker-entrypoint.sh"] 56 | 57 | EXPOSE 5000 58 | -------------------------------------------------------------------------------- /archive/1.18/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl -L $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.19/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.21 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.20.0 6 | 7 | # Let the container know that there is no TTY 8 | ARG DEBIAN_FRONTEND=noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | gcc \ 28 | python-dev \ 29 | python-setuptools \ 30 | && apt-get clean \ 31 | && easy_install -U pip \ 32 | && pip install -U crcmod \ 33 | && rm -rf /var/lib/apt/lists/* \ 34 | && rm -rf /tmp/* /var/tmp/* 35 | 36 | # Build osrm-backend 37 | RUN mkdir /osrm-src \ 38 | && cd /osrm-src \ 39 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 40 | && tar xzf v$OSRM_VERSION.tar.gz \ 41 | && cd osrm-backend-$OSRM_VERSION \ 42 | && mkdir build \ 43 | && cd build \ 44 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 45 | && cmake --build . \ 46 | && cmake --build . --target install \ 47 | && mkdir /osrm-data \ 48 | && mkdir /osrm-profiles \ 49 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 50 | && rm -rf /osrm-src 51 | 52 | # Set the entrypoint 53 | COPY docker-entrypoint.sh / 54 | RUN chmod +x /docker-entrypoint.sh 55 | ENTRYPOINT ["/docker-entrypoint.sh"] 56 | 57 | EXPOSE 5000 58 | -------------------------------------------------------------------------------- /archive/1.19/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl -L $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.20/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.21 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.21.0 6 | 7 | # Let the container know that there is no TTY 8 | ARG DEBIAN_FRONTEND=noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | gcc \ 28 | python-dev \ 29 | python-setuptools \ 30 | && apt-get clean \ 31 | && easy_install -U pip \ 32 | && pip install -U crcmod \ 33 | && rm -rf /var/lib/apt/lists/* \ 34 | && rm -rf /tmp/* /var/tmp/* 35 | 36 | # Build osrm-backend 37 | RUN mkdir /osrm-src \ 38 | && cd /osrm-src \ 39 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 40 | && tar xzf v$OSRM_VERSION.tar.gz \ 41 | && cd osrm-backend-$OSRM_VERSION \ 42 | && mkdir build \ 43 | && cd build \ 44 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 45 | && cmake --build . \ 46 | && cmake --build . --target install \ 47 | && mkdir /osrm-data \ 48 | && mkdir /osrm-profiles \ 49 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 50 | && rm -rf /osrm-src 51 | 52 | # Set the entrypoint 53 | COPY docker-entrypoint.sh / 54 | RUN chmod +x /docker-entrypoint.sh 55 | ENTRYPOINT ["/docker-entrypoint.sh"] 56 | 57 | EXPOSE 5000 58 | -------------------------------------------------------------------------------- /archive/1.20/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl -L $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /archive/1.9/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM peterevans/xenial-gcloud:1.2.7 2 | 3 | MAINTAINER Peter Evans 4 | 5 | ENV OSRM_VERSION 5.11.0 6 | 7 | # Let the container know that there is no TTY 8 | ENV DEBIAN_FRONTEND noninteractive 9 | 10 | # Install packages 11 | RUN apt-get -y update \ 12 | && apt-get install -y -qq --no-install-recommends \ 13 | build-essential \ 14 | cmake \ 15 | curl \ 16 | libbz2-dev \ 17 | libstxxl-dev \ 18 | libstxxl1v5 \ 19 | libxml2-dev \ 20 | libzip-dev \ 21 | libboost-all-dev \ 22 | lua5.2 \ 23 | liblua5.2-dev \ 24 | libtbb-dev \ 25 | libluabind-dev \ 26 | pkg-config \ 27 | && apt-get clean \ 28 | && rm -rf /var/lib/apt/lists/* \ 29 | && rm -rf /tmp/* /var/tmp/* 30 | 31 | # Build osrm-backend 32 | RUN mkdir /osrm-src \ 33 | && cd /osrm-src \ 34 | && curl --silent -L https://github.com/Project-OSRM/osrm-backend/archive/v$OSRM_VERSION.tar.gz -o v$OSRM_VERSION.tar.gz \ 35 | && tar xzf v$OSRM_VERSION.tar.gz \ 36 | && cd osrm-backend-$OSRM_VERSION \ 37 | && mkdir build \ 38 | && cd build \ 39 | && cmake .. -DCMAKE_BUILD_TYPE=Release \ 40 | && cmake --build . \ 41 | && cmake --build . --target install \ 42 | && mkdir /osrm-data \ 43 | && mkdir /osrm-profiles \ 44 | && cp -r /osrm-src/osrm-backend-$OSRM_VERSION/profiles/* /osrm-profiles \ 45 | && rm -rf /osrm-src 46 | 47 | # Set the entrypoint 48 | COPY docker-entrypoint.sh / 49 | RUN chmod +x /docker-entrypoint.sh 50 | ENTRYPOINT ["/docker-entrypoint.sh"] 51 | 52 | EXPOSE 5000 53 | -------------------------------------------------------------------------------- /archive/1.9/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | 18 | 19 | _sig() { 20 | kill -TERM $child 2>/dev/null 21 | } 22 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 23 | 24 | 25 | if [ "$OSRM_MODE" == "CREATE" ]; then 26 | 27 | # Retrieve the PBF file 28 | curl $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 29 | 30 | # Build the graph 31 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 32 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 33 | 34 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 35 | 36 | # Activate the service account to access storage 37 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 38 | # Set the Google Cloud project ID 39 | gcloud config set project $OSRM_PROJECT_ID 40 | 41 | # Copy the graph to storage 42 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 43 | 44 | fi 45 | 46 | else 47 | 48 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 49 | 50 | # Activate the service account to access storage 51 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 52 | # Set the Google Cloud project ID 53 | gcloud config set project $OSRM_PROJECT_ID 54 | 55 | # Copy the graph from storage 56 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 57 | 58 | fi 59 | 60 | fi 61 | 62 | # Start serving requests 63 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size 1000 & 64 | child=$! 65 | wait "$child" 66 | -------------------------------------------------------------------------------- /docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$OSRM_MODE" != "CREATE" ] && [ "$OSRM_MODE" != "RESTORE" ]; then 4 | # Default to CREATE 5 | OSRM_MODE="CREATE" 6 | fi 7 | 8 | # Defaults 9 | OSRM_DATA_PATH=${OSRM_DATA_PATH:="/osrm-data"} 10 | OSRM_DATA_LABEL=${OSRM_DATA_LABEL:="data"} 11 | OSRM_GRAPH_PROFILE=${OSRM_GRAPH_PROFILE:="car"} 12 | OSRM_PBF_URL=${OSRM_PBF_URL:="http://download.geofabrik.de/asia/maldives-latest.osm.pbf"} 13 | # Google Storage variables 14 | OSRM_SA_KEY_PATH=${OSRM_SA_KEY_PATH:=""} 15 | OSRM_PROJECT_ID=${OSRM_PROJECT_ID:=""} 16 | OSRM_GS_BUCKET=${OSRM_GS_BUCKET:=""} 17 | OSRM_MAX_TABLE_SIZE=${OSRM_MAX_TABLE_SIZE:="8000"} 18 | 19 | 20 | _sig() { 21 | kill -TERM $child 2>/dev/null 22 | } 23 | trap _sig SIGKILL SIGTERM SIGHUP SIGINT EXIT 24 | 25 | 26 | if [ "$OSRM_MODE" == "CREATE" ]; then 27 | 28 | # Retrieve the PBF file 29 | curl -L $OSRM_PBF_URL --create-dirs -o $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf 30 | 31 | # Build the graph 32 | osrm-extract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osm.pbf -p /osrm-profiles/$OSRM_GRAPH_PROFILE.lua 33 | osrm-contract $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm 34 | 35 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 36 | 37 | # Activate the service account to access storage 38 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 39 | # Set the Google Cloud project ID 40 | gcloud config set project $OSRM_PROJECT_ID 41 | 42 | # Copy the graph to storage 43 | gsutil -m cp $OSRM_DATA_PATH/*.osrm* $OSRM_GS_BUCKET/$OSRM_DATA_LABEL 44 | 45 | fi 46 | 47 | else 48 | 49 | if [ ! -z "$OSRM_SA_KEY_PATH" ] && [ ! -z "$OSRM_PROJECT_ID" ] && [ ! -z "$OSRM_GS_BUCKET" ]; then 50 | 51 | # Activate the service account to access storage 52 | gcloud auth activate-service-account --key-file $OSRM_SA_KEY_PATH 53 | # Set the Google Cloud project ID 54 | gcloud config set project $OSRM_PROJECT_ID 55 | 56 | # Copy the graph from storage 57 | gsutil -m cp $OSRM_GS_BUCKET/$OSRM_DATA_LABEL/*.osrm* $OSRM_DATA_PATH 58 | 59 | fi 60 | 61 | fi 62 | 63 | # Start serving requests 64 | osrm-routed $OSRM_DATA_PATH/$OSRM_DATA_LABEL.osrm --max-table-size $OSRM_MAX_TABLE_SIZE & 65 | child=$! 66 | wait "$child" 67 | -------------------------------------------------------------------------------- /kubernetes/osrm-car-canary.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: osrm-car 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: 5000 9 | protocol: TCP 10 | selector: 11 | app: osrm-car 12 | --- 13 | apiVersion: apps/v1 14 | kind: Deployment 15 | metadata: 16 | name: osrm-car-canary 17 | spec: 18 | replicas: 1 19 | template: 20 | metadata: 21 | labels: 22 | app: osrm-car 23 | track: canary 24 | spec: 25 | volumes: 26 | - name: osrm-secret-volume 27 | secret: 28 | secretName: osrm-storage-secret 29 | containers: 30 | - name: osrm-backend-k8s 31 | image: peterevans/osrm-backend-k8s:latest 32 | env: 33 | - name: OSRM_MODE 34 | value: CREATE 35 | - name: OSRM_PBF_URL 36 | value: "http://download.geofabrik.de/asia/maldives-latest.osm.pbf" 37 | - name: OSRM_DATA_LABEL 38 | value: maldives-car-20161209 39 | - name: OSRM_GRAPH_PROFILE 40 | value: car 41 | - name: OSRM_SA_KEY_PATH 42 | value: "/etc/osrm-secret-volume/service-account-key.json" 43 | - name: OSRM_PROJECT_ID 44 | value: my-project 45 | - name: OSRM_GS_BUCKET 46 | value: "gs://my-bucket" 47 | volumeMounts: 48 | - name: osrm-secret-volume 49 | readOnly: true 50 | mountPath: /etc/osrm-secret-volume 51 | ports: 52 | - containerPort: 5000 53 | readinessProbe: 54 | httpGet: 55 | path: /nearest/v1/healthz/0,0 56 | port: 5000 57 | initialDelaySeconds: 30 58 | timeoutSeconds: 1 59 | -------------------------------------------------------------------------------- /kubernetes/osrm-car.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: osrm-car 5 | spec: 6 | ports: 7 | - port: 80 8 | targetPort: 5000 9 | protocol: TCP 10 | selector: 11 | app: osrm-car 12 | --- 13 | apiVersion: apps/v1 14 | kind: Deployment 15 | metadata: 16 | name: osrm-car 17 | spec: 18 | replicas: 3 19 | template: 20 | metadata: 21 | labels: 22 | app: osrm-car 23 | track: stable 24 | spec: 25 | volumes: 26 | - name: osrm-secret-volume 27 | secret: 28 | secretName: osrm-storage-secret 29 | containers: 30 | - name: osrm-backend-k8s 31 | image: peterevans/osrm-backend-k8s:latest 32 | env: 33 | - name: OSRM_MODE 34 | value: RESTORE 35 | - name: OSRM_DATA_LABEL 36 | value: maldives-car-20161209 37 | - name: OSRM_SA_KEY_PATH 38 | value: "/etc/osrm-secret-volume/service-account-key.json" 39 | - name: OSRM_PROJECT_ID 40 | value: my-project 41 | - name: OSRM_GS_BUCKET 42 | value: "gs://my-bucket" 43 | volumeMounts: 44 | - name: osrm-secret-volume 45 | readOnly: true 46 | mountPath: /etc/osrm-secret-volume 47 | ports: 48 | - containerPort: 5000 49 | readinessProbe: 50 | httpGet: 51 | path: /nearest/v1/healthz/0,0 52 | port: 5000 53 | initialDelaySeconds: 30 54 | timeoutSeconds: 1 55 | -------------------------------------------------------------------------------- /tests/osrm_backend.postman_collection.json: -------------------------------------------------------------------------------- 1 | { 2 | "variables": [], 3 | "info": { 4 | "name": "osrm_backend", 5 | "_postman_id": "c7fd9044-4882-932e-b466-fe0e6d306b6d", 6 | "description": "", 7 | "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json" 8 | }, 9 | "item": [ 10 | { 11 | "name": "http://localhost:5000/route/v1/car/73.539603,1.935541;73.534974,1.897450?alternatives=false&overview=false", 12 | "event": [ 13 | { 14 | "listen": "test", 15 | "script": { 16 | "type": "text/javascript", 17 | "exec": [ 18 | "tests[\"Status code is 200\"] = responseCode.code === 200;", 19 | "", 20 | "var jsonData = JSON.parse(responseBody);", 21 | "tests[\"OSRM response code is 'Ok'\"] = jsonData.code === \"Ok\";" 22 | ] 23 | } 24 | } 25 | ], 26 | "request": { 27 | "url": "http://localhost:5000/route/v1/car/73.539603,1.935541;73.534974,1.897450?alternatives=false&overview=false", 28 | "method": "GET", 29 | "header": [], 30 | "body": {}, 31 | "description": "Tests the route service." 32 | }, 33 | "response": [] 34 | }, 35 | { 36 | "name": "http://localhost:5000/nearest/v1/car/73.539603,1.935541", 37 | "event": [ 38 | { 39 | "listen": "test", 40 | "script": { 41 | "type": "text/javascript", 42 | "exec": [ 43 | "tests[\"Status code is 200\"] = responseCode.code === 200;", 44 | "", 45 | "var jsonData = JSON.parse(responseBody);", 46 | "tests[\"OSRM response code is 'Ok'\"] = jsonData.code === \"Ok\";" 47 | ] 48 | } 49 | } 50 | ], 51 | "request": { 52 | "url": "http://localhost:5000/nearest/v1/car/73.539603,1.935541", 53 | "method": "GET", 54 | "header": [], 55 | "body": {}, 56 | "description": "Tests the nearest service." 57 | }, 58 | "response": [] 59 | } 60 | ] 61 | } -------------------------------------------------------------------------------- /tests/wait-for-http.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | WFH_TIMEOUT=600 4 | WFH_ELAPSED=0 5 | 6 | echo "Waiting for a response from $1" 7 | 8 | until $(curl --output /dev/null --silent --head --fail $1); do 9 | sleep 5 10 | WFH_ELAPSED=$((WFH_ELAPSED+5)) 11 | if [ "$WFH_ELAPSED" -gt "$WFH_TIMEOUT" ]; then 12 | echo "Timed out waiting for a response from $1" 13 | exit 1 14 | fi 15 | done 16 | 17 | echo "Received response from $1" 18 | exit 0 19 | --------------------------------------------------------------------------------