Установка OSRM на Ubuntu 22.04 – Open Source Routing Machine

OSRM (Open Source Routing Machine) — это высокоскоростной движок для прокладки маршрутов по дорожным сетям OpenStreetMap (OSM). В предыдущих руководствах мы рассмотрели, как настроить собственный сервер тайлов OpenStreetMap и добавить функцию поиска адресов с помощью Nominatim. В этом руководстве мы расскажем, как интегрировать на вашу карту OpenStreetMap навигационные возможности с использованием OSRM, который поддерживает маршруты для автомобилей, велосипедистов и пешеходов.

Установите OSRM на Ubuntu 20.04.

Требования на начальном этапе

Чтобы воспользоваться данным руководством, необходимо иметь установленный и функционирующий сервер тайлов OSM. Если его у вас нет, выполните инструкции ниже для установки собственного сервера тайлов OSM.

  • Как настроить сервер тайлов OpenStreetMap на Ubuntu 22.04

Вам также потребуется доступ к геокодировочному сервису, например, Nominatim, для поиска местоположений по адресам.

  • Установка и конфигурация сервера для геокодирования OSM Nominatim на Ubuntu 22.04

После выполнения всех требований, приступайте к настройке сервера OSRM, следуя инструкциям ниже.

Компиляция OSRM из исходных файлов

Установите необходимые пакеты.

sudo apt update sudo apt install build-essential git cmake pkg-config doxygen libboost-all-dev libtbb-dev lua5.2 liblua5.2-dev libluabind-dev libstxxl-dev libstxxl1v5 libxml2 libxml2-dev libosmpbf-dev libbz2-dev libzip-dev libprotobuf-dev

Создайте учетную запись osrm. (Пароль для этого пользователя можно не задавать.)

sudo useradd - d /srv/osrm - s /bin/bash - m osrm

Предоставьте права вашему пользовательскому аккаунту. Замените username на своё реальное имя пользователя в Linux.

sudo apt install acl sudo setfacl - R - m u:username:rwx /srv/osrm/

Перейдите в папку /srv/osrm/.

cd /srv/osrm/

Загрузите исходный код OSRM с его репозитория на GitHub.

git clone https://github.com/Project-OSRM/osrm-backend. git

Создайте папку для компиляции.

mkdir build

Зайдите в этот каталог и настройте окружение для сборки.

cd build cmake /srv/osrm/osrm-backend/

Соберите исходный код. (Если появятся предупреждения TBB: устарело, не обращайте на них внимания.)

make

Соберите OSRM из исходного кода на Ubuntu 20.04.

Загрузите и установите бинарные файлы.

sudo make install

Будут установлены такие бинарные файлы.

  • /usr/local/bin/osrm-extract:
  • /usr/local/bin/osrm-partition:
  • /usr/local/bin/osrm-customize:
  • /usr/local/bin/osrm-contract:
  • /usr/local/bin/osrm-datastore:
  • /usr/local/bin/osrm-routed:

Инсталляция GNU Screen

На следующем этапе потребуется получить дорожные сети из OpenStreetMap, что может занять продолжительное время. Поскольку ваш компьютер может потерять подключение к Интернету, рекомендуется воспользоваться утилитой GNU Screen для поддержания активной сессии. Для этого установите screen на сервере с Ubuntu 22.04:

Читайте также:  Полное руководство по установке Ubuntu Server 20.04 для начинающих и опытных пользователей

sudo apt install screen

После этого выполните команду screen:

screen

При первом запуске отобразится вводный текст, и вам нужно будет просто нажать Enter для завершения. После этого можно будет использовать команды в обычном режиме.

Создание данных для маршрутизации в OSRM

Сейчас необходимо загрузить данные OpenStreetMap и подготовить их для маршрутизации. Для этого выполните следующую команду, чтобы скачать карту всего мира (56 ГБ) в формате PBF (ProtoBufBinary).

wget - c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf - P /srv/osrm/osrm-backend

Если требуется карта конкретной страны, штата, провинции или города, посетите сайт http://download.geofabrik.de. Например, чтобы загрузить данные карты Великобритании (1,7 ГБ), воспользуйтесь следующей командой.

wget - c http://download.geofabrik.de/europe/britain-and-ireland-latest.osm.pbf - P /srv/osrm/osrm-backend

BBBike. org предлагает возможность получать данные для более чем 200 городов и регионов мира в разных форматах.

Убедитесь, что вы находитесь в папке /srv/osrm/osrm-backend/.

cd /srv/osrm/osrm-backend/

Получите граф на основе данных OpenStreetMap.

osrm-extract britain-and-ireland-latest.osm.pbf --threads=10

Профиль car.lua будет использоваться по умолчанию.

Теперь, скорее всего, нет необходимости выполнять дополнительные действия на вашем сервере. Поскольку вы используете Screen, нажмите Ctrl+A, затем отпустите эти клавиши и нажмите D, чтобы отсоединиться от текущей сессии. Вы получите сообщение, похожее на следующее.

[detached from 32113.pts-1.focal]

Это означает, что ID последней сессии Screen равен 32113. Вы можете завершить SSH-сессию и даже выключить устройство. Не переживайте, процесс osrm-extract продолжает выполняться. Когда вы захотите вернуться и отследить прогресс, подключитесь к серверу по SSH и введите следующую команду, чтобы узнать ID предыдущей сессии Screen.

screen - ls

Есть экран: 32113.pts-1.focal (19/05/2020 15:45:29) (Detached) 1 сокет в /run/screen/S-linuxbabe.

После этого вы сможете заново присоединиться к ранее открытому сеансу Screen.

screen - r 32113

Данный процесс требует значительных ресурсов. На моем сервере он задействует 9 ГБ оперативной памяти, а загрузка процессора достигает 6. Я использую карты Британии и Ирландии. Если вы планируете использовать карту всей Земли, потребление оперативной памяти может возрасти до 120 ГБ, поэтому целесообразно создать файл подкачки для расширения доступной памяти.

По окончании процесса будет сформирован файл с идентичным названием, но с расширением. osrm. Для рекурсивного деления этого графа на ячейки выполните следующую команду.

Читайте также:  Добавить всем право на чтение и запись в Linux

osrm-partition britain-and-ireland-latest.osrm

Отрегулируйте ячейки, определив веса маршрутизации для каждой из них.

osrm-customize britain-and-ireland-latest.osrm

Теперь вы можете включить маршрутизатор.

osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm

osrm-routed на Ubuntu 22.04

Он слушает TCP порт 5000.

Настройка службы systemd

Запустить движок маршрутизации OSRM можно вручную, выполнив команду osrm-routed —algorithm=MLD britain-and-ireland-latest. osrm, однако более удобно запускать osrm-routed в качестве службы systemd, чтобы он работал в фоновом режиме.

Нажмите Ctrl+C для прерывания текущего процесса osrm-routed и выполните команду для создания файла юнита службы systemd для osrm-routed.

sudo nano /etc/systemd/system/osrm-routed.service

Сохраните указанные строки в файл.

[Unit] Description=Open Source Routing Machine Wants=network-online.target After=network.target network-online. target [Service] ExecStart=/usr/local/bin/osrm-routed --algorithm=MLD /srv/osrm/osrm-backend/britain-and-ireland-latest.osrm User=osrm Group=osrm Restart=always RestartSec=5s [Install] WantedBy=multi-user.target

Сохраните файл и закройте его. Измените владельца директории /srv/osrm/osrm-backend/.

sudo chown osrm:osrm /srv/osrm/osrm-backend/ -R

Теперь у нас есть возможность запустить и активировать службу osrm-routed с помощью systemd.

sudo systemctl start osrm-routed sudo systemctl enable osrm-routed

systemctl status osrm-routed

osrm-routed-systemd-service-ubuntu-22.04

Если служба osrm-routed не запущена, вы можете использовать следующую команду для диагностики проблемы.

sudo journalctl -eu osrm-routed

Конфигурация обратного прокси

Можно настроить веб-сервер Apache или Nginx в качестве обратного прокси для службы osrm-routed, что позволит использовать доменное имя для доступа к маршрутизации, а также добавить поддержку HTTPS для шифрования.

Установите сервер Apache для работы с веб-приложениями.

sudo apt install apache2

Для настройки Apache в качестве обратного прокси необходимо активировать модули proxy, proxy_http и rewrite.

sudo a2enmod proxy proxy_http rewrite

Затем необходимо создать файл виртуального хоста для OSRM.

sudo nano /etc/apache2/sites-available/osrm.conf

Вставьте данный текст в файл. Замените osrm. your-domain.com на ваше реальное доменное имя и обязательно создайте для него DNS A-запись.

ServerName osrm. your-domain.com

на адрес http://127.0.0.1:5000/ и используйте обратный прокси для этого же адреса.

Сохраните файл и закройте его. После этого активируйте данный виртуальный хост.

sudo a2ensite osrm.conf

Перезапустите Apache, чтобы новые настройки начали действовать.

sudo systemctl reload apache2

Теперь у вас есть возможность осуществить удалённый доступ к OSRM, просто введя доменное имя (osrm. your-domain.com) в адресной строке вашего браузера.

Nginx — это широко используемый веб-сервер и прокси-сервер. Чтобы установить Nginx, выполните следующую команду.

Читайте также:  Как установить Apache, MySQL, PHP на Ubuntu 18.04 LTS

sudo apt install nginx

Создайте файл конфигурации сервера для OSRM.

sudo nano /etc/nginx/conf.d/osrm.conf

Добавьте указанный контент в файл, заменив osrm. your-domain.com на ваше реальное доменное имя, и не забудьте создать A-запись DNS для этого домена.

server < listen 80; listen [::]:80; server_name osrm. your-domain.com

nginx< proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-Host $http_host; >>

Закройте и сохраните этот файл, после чего проверьте работу конфигурации Nginx.

sudo nginx - t

После успешного прохождения теста необходимо перезапустить Nginx, чтобы изменения начали действовать.

sudo systemctl reload nginx

Активирование HTTPS

Для активации HTTPS можно установить бесплатный TLS-сертификат, который предоставляет Let’s Encrypt. В руководстве по настройке OSM tile server мы уже инсталлировали клиент Let’s Encrypt (certbot) через Snap Store. Теперь достаточно выполнить следующую команду для получения и установки TLS-сертификата.

sudo /snap/bin/certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email -d osrm. your-domain.com

sudo /snap/bin/certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email -d osrm. your-domain.com

  • —apache: Воспользуйтесь плагином для Apache.
  • —nginx : Применяйте плагин Nginx.
  • Согласие с условиями предоставления услуг.
  • —перенаправление: Обязательное использование HTTPS через 301 перенаправления.
  • —hsts: Включить заголовок Strict-Transport-Security в каждый HTTP-ответ. Это заставляет браузер всегда применять TLS для указанного домена, обеспечивая защиту от атак типа SSL/TLS Stripping.
  • —staple-ocsp: Активирует OCSP Stapling. В процессе TLS к сертификату, предоставляемому сервером, прикрепляется действительный ответ OCSP.

Теперь сертификат необходимо получить и установить автоматически. После этого вы сможете подключиться к веб-интерфейсу Webmin через защищенное HTTPS-соединение.

osrm https сертификат certbot ubuntu 20.04

Синхронизация OSRM с картой Slippy

Возможно, ваша слайппи карта реализована с использованием JavaScript-библиотеки Leaflet, и вы интегрировали к ней сервис геокодирования Nominatim.

Для интеграции OSRM с картой Slippy можно воспользоваться плагином под названием Leaflet Routing Machine. Сначала необходимо добавить файлы JavaScript и CSS этого плагина в вашу карту Slippy. Учтите, что они должны подключаться после основного JavaScript Leaflet и JavaScript Leaflet Control Geocoder.

Далее включите следующие строки в фрагмент в теле HTML.

L.Routing.control( serviceUrl: 'https://osrm.your-domain.com/route/v1', геокодер: L.Control.Geocoder.nominatim(tile.ваш-домен.com/nominatim/'>), routeWhileDragging: true > ).addTo(map);

Сохраните файл и закройте его. После этого обновите страницу с картой в вашем веб-браузере. В правом верхнем углу появится панель управления, где вы сможете ввести начальный и конечный адреса.

На карте можно перемещать контрольные точки, после чего OSRM автоматически обновит маршрут.