Je eigen geocoder API met Docker

Voor een van mijn projecten heb ik een API nodig voor het automatisch aanvullen van geografische gegevens. Dus als iemand bijvoorbeeld "Hudsonlaan Gou" dat het "Hudsonlaan, Zuid Holland Gouda" teruggeeft in een opgemaakte manier inclusief de geografische locatie.

Google en andere dienstverleners bieden dit soort API's aan. Maar uiteindelijk gaat dat gepaard met kosten per request. Tegenwoordig is niets gemakkelijker dan het zelf uitvoeren. Je hebt wat Docker kennis nodig, maar als je die hebt, kun je een geocoder API draaien in minder dan 10 minuten.

In deze blogpost leg ik uit hoe je met Docker een geocoder API opzet op basis van Open Street Map data. Ik zal elke stap uitleggen. En ik verzeker je dat het gemakkelijk te doen is.

Ok, laten we beginnen. Wat info:

A. De benodigde sources

Ik heb een project aan GitHub toegevoegd

  1. Kloon dit Photon Github project: git clone https://github.com/tonsnoei/photon-docker

B. (Optioneel) Bouw uw eigen docker image

Je kunt deze stap overslaan. Maar, als in de toekomst de gebruikte Docker image om een of andere reden verloren gaat, dan kun je hem hiermee zelf bouwen:

  1. Maak een Docker hub account aan op de [Docker Hub website] (https://hub.docker.com)
  2. Ga naar de directory waar je het GitHub project hebt geplaatst en voer de volgende commando's uit:
  3. (Optioneel) Open de Dockerfile en controleer de photon.jar bestandsversie die wordt gebruikt.
  4. (Optioneel) Controleer de beschikbare laatste release hier https://github.com/komoot/photon/releases/ en verander de Dockerfile dienovereenkomstig aan
  5. Bouw de docker image van Photon API docker build -t <DOCKER HUB USERNAME>/docker-photon:latest -f Dockerfile .
  6. Push de docker image naar de docker hub: docker push <DOCKER HUB USERNAME>/docker-photon:latest.
  7. Wijzig het docker-compose.yml bestand om deze nieuwe docker image te gebruiken:
 1version: '2'
 2services:
 3  photon:
 4    build:
 5      context: .
 6      dockerfile: Dockerfile
 7>>> image: tonsnoei/photon-geocoder:latest
 8    volumes:
 9      - data:/photon/photon_data
10    ports:
11      - 2322:2322
12
13volumes:
14  data:
15    driver: local

C. Bereid je docker voor

  1. Zorg dat je in de map bent waar https://github.com/tonsnoei/photon-docker is gekloond.
  2. Maak een directory "data" aan: mkdir data
  3. Via de standaardsetup is de hele wereld beschikbaar binnen de API. Dit betekent dat je een relatief zware server nodig hebt. Dit betekent minstens 4 cores met minstens 16Gb RAM.
  4. Als je slechts één land wilt hosten, kun je het bestand [entrypoint.sh](https://github. com/tonsnoei/photon-docker/blob/master/entrypoint.sh) aanpassen om alleen een extract van 1 land te gebruiken. Extracten zijn hier te vinden. De uitleg ove het wijzigen van het entrypoint.sh is te vinden in het bestand entrypoint.sh.
  5. Voer uit: docker-compose build. Dit zorgt ervoor dat de docker image opnieuw wordt aangemaakt op basis van de
    Dockerfile. Dit is vooral belangrijk wanneer je wijzigingen hebt aangebracht in de entrypoint.sh.
  6. Nu je helemaal klaar bent, voer je uit: docker-compose up -d && docker-compose logs -f.
  7. Het zal nu beginnen met het downloaden van het extract van het web als eerste stap.
  8. Als je de docker container halverwege stopt tijdens het downloaden van de gegevens, maak dan eerst de data directory leeg voordat je verder gaat.
  9. Nadat het extract is gedownload, zal de API beschikbaar zijn via http://localhost:2322/api?q=amsterdam
  10. Als je een ander regio-extract wilt gebruiken:
    1. Stop de docker container: docker-compose down
    2. Wijzig het bestand entrypoint.sh
    3. Voer docker-compose build uit.
    4. Voer docker-compose up -d && docker-compose logs -f uit

Om dit op een productieomgeving uit te voeren, gebruik je een reverse proxy zoals Nginx of Traefik om het HTTP(S)-verkeer af te handelen.

Dat was het. Veel plezier.

Vertalingen: