Содержание
Установка и настройка OSRM
Подготовка сервера
В данной статье рассматривается развертывание сервера OSRM с помощью Docker. Рассматривать варианты установки непосредственно на виртуальную машину или физический сервер я не буду, т.к не вижу в этом смысла.
Для развертывания сервиса не требуется ничего специфичного: устанавливаем wget, обновляем пакеты, устанавливаем нужное ядро (если требуется) и устанавливаем докер. На этом подготовка сервера завершена.
Загрузка DockerImage
Для загрузки Docker-образа используем команду:
docker pull osrm/osrm-backend>
Загрузка карт
Карты берем тут.
wget -P /opt/osrm/data http://download.geofabrik.de/russia-latest.osm.pbf
Я буду использовать директорию /opt/osrm/data.
Подготовка графов
После окончания процесса загрузки необходимо распаковать файл средствами OSRM и проиндексировать его. Это можно сделать 2мя способами. Тем, который указан в официальной документации и альтернативным. Я опишу оба (второй - мой авторский).
Способ первый (официальный)
- Распаковываем графы из базовой карты:
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
- После разделения графа на ячейки используйте утилиту osrm-customize для расчета весов маршрутов:
docker run -t -v $(pwd):/data osrm/osrm-backend:latest osrm-customize /data/russia-latest.osrm
- Запуск контейнера осуществляется следующей командой:
docker run -t -i -p 5000:5000 -v $(pwd):/data -d osrm/osrm-backend osrm-routed — algorithm mld /data/russia-latest.osrm
После всех проделанных манипуляций мы получим 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/
- Теперь выполняем команды последовательно:
- Распаковываем архив:
osrm-extract -p /opt/car.lua /data/russia-latest.osm.pbf
И ждем окончания процесса.
- Разбираем карту на графы рекурсивно:
osrm-partition /data/russia-latest.osrm
Снова ждем окончания.
- Настраиваем ячейки:
osrm-customize /data/russia-latest.osrm
Дожидаемся окончания.
- Выходим из консоли контейнера:
exit
- Удаляем ненужный теперь контейнер:
docker rm <container-name or container-id>
- Разворачиваем продактовый контейнер:
docker run -t -i -p 5000:5000 -v $(pwd):/data -d osrm/osrm-backend osrm-routed — algorithm mld /data/russia-latest.osrm
На этом настройка завершена.