Установка и настройка OSRM

Подготовка сервера

В данной статье рассматривается развертывание сервера OSRM с помощью Docker. Рассматривать варианты установки непосредственно на виртуальную машину или физический сервер я не буду, т.к не вижу в этом смысла.
Для развертывания сервиса не требуется ничего специфичного: устанавливаем wget, обновляем пакеты, устанавливаем нужное ядро (если требуется) и устанавливаем докер. На этом подготовка сервера завершена.

Загрузка DockerImage

Для загрузки Docker-образа используем команду:

 docker pull osrm/osrm-backend>

Загрузка карт

Карты берем тут.

wget -P /opt/osrm/data http://download.geofabrik.de/russia-latest.osm.pbf
Качаем файл с расширением pbf.
Я буду использовать директорию /opt/osrm/data.

Подготовка графов

После окончания процесса загрузки необходимо распаковать файл средствами OSRM и проиндексировать его. Это можно сделать 2мя способами. Тем, который указан в официальной документации и альтернативным. Я опишу оба (второй - мой авторский).

Способ первый (официальный)

  • Распаковываем графы из базовой карты:
Обратите внимание, что на данном этапе серверу потребуется большое количество оперативной памяти (в моем случае более 10ГБ)!!!
docker run -t -v $(pwd):/data osrm/osrm-backend:latest osrm-extract -p /opt/car.lua /data/russia-latest.osm.pbf
Этот и последующие процессы могут занять значительное время, все зависит от объема скачанной карты.

Стоит обратить внимание, что -v $(pwd):/data делает доступным текущий каталог в контейнере докер, если вы находитесь в директории, где нет файла .pbf, или по каким-то иным причинам хотите указать другой каталог - замените $(pwd) на нужный вам каталог.

  • Затем необходимо рекурсивно разбить граф на ячейки с помощью утилиты osrm-partition для этого используйте следующую команду:
docker run -t -v $(pwd):/data osrm/osrm-backend:latest osrm-partition /data/russia-latest.osrm
Обратите внимание, что команда применяется уже не к файлу russia-latest.osm.pbf, а к файлу russia-latest.osrm. Это очень важно!
  • После разделения графа на ячейки используйте утилиту osrm-customize для расчета весов маршрутов:
docker run -t -v $(pwd):/data osrm/osrm-backend:latest osrm-customize /data/russia-latest.osrm
Для алгоритма CH этапы разделения osrm-partition и настройки osrm-customize заменяются добавлением кратчайших путей из иерархии алгоритма сжатия osrm-contract.
  • Запуск контейнера осуществляется следующей командой:
docker run -t -i -p 5000:5000 -v $(pwd):/data -d osrm/osrm-backend osrm-routed — algorithm mld /data/russia-latest.osrm
Контейнер можно запустить самостоятельно без Kubernetes или Docker-compose

После всех проделанных манипуляций мы получим Docker-container, с работающим backend сервером OSRM.

Способ второй (собственный)

Способ описанный разработчиком конечно же работает, но он имеет один значительный минус, который мне не понравился, а так же у меня были вопросы и не все получалось сразу, поэтому я пошел своим путем. Для этого я зашел на github проекта и посмотрел что там в docker-file, который собирает образ. Это позволило мне разобраться что и где лежит внутри контейнера.
Так я узнал, что файлы графа хранятся в /data, а сами утилиты для работы с картой и построения графов в /usr/local/bin/. Отсюда можно сделать простой и логичный вывод - вовсе не обязательно плодить кучу мертвых контейнеров, которые потом лучше всего вычистить, можно все сделать в одном контейнере и потом просто удалить его.
Для реализации моего способа мы делаем следующее:

  • Создаем контейнер, в который сможем зайти в shell:
docker run -it -v "${PWD}:/data" osrm/osrm-backend bash
  • Оказавшись внутри контейнера переходим в каталог /usr/local/bin/
cd /usr/local/bin/
  • Теперь выполняем команды последовательно:
  1. Распаковываем архив:
    osrm-extract -p /opt/car.lua /data/russia-latest.osm.pbf

    И ждем окончания процесса.

  2. Разбираем карту на графы рекурсивно:
    osrm-partition /data/russia-latest.osrm

    Снова ждем окончания.

  3. Настраиваем ячейки:
    osrm-customize /data/russia-latest.osrm

    Дожидаемся окончания.

  4. Выходим из консоли контейнера:
    exit
  5. Удаляем ненужный теперь контейнер:
    docker rm <container-name or container-id>
  6. Разворачиваем продактовый контейнер:
    docker run -t -i -p 5000:5000 -v $(pwd):/data -d osrm/osrm-backend osrm-routed — algorithm mld /data/russia-latest.osrm

На этом настройка завершена.

main/linux/osrm-install.txt · Последнее изменение: 2024/10/28 08:51 — davlanas
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0