Разворачиваем свой сервер маршрутизации на GraphHopper + Docker

Опубликовано 14 марта 2025 AntonSeagull 2 min

Если вам нужен быстрый сервер для построения маршрутов по картам OpenStreetMap, то GraphHopper — один из лучших вариантов. Он поддерживает автомобильные, пешеходные и велосипедные маршруты, работает быстро и гибко, а также легко запускается в Docker.

В этом гайде мы развернем GraphHopper на сервере Ubuntu 22.04, подготовим карту России и настроим работу через домен.

Если у вас еще нет сервера, советую арендовать VDS на Timeweb Cloud, где можно быстро развернуть сервер по доступной цене: 👉 Перейти на Timeweb Cloud

Шаг 1: Подготовка сервера

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

Обновляем систему и устанавливаем Docker

Подключаемся к серверу по SSH и выполняем:

sudo apt update && sudo apt upgrade -y
sudo apt install docker.io -y

Проверяем установку Docker

docker --version

Шаг 2: Запуск GraphHopper с автоматической загрузкой карт

Запускаем контейнер с GraphHopper

docker run -d --name graphhopper  -p 8989:8989   -e JAVA_OPTS="-Xms4g -Xmx12g"  israelhikingmap/graphhopper --url https://download.geofabrik.de/russia-latest.osm.pbf  --host 0.0.0.0

Что делает эта команда?

  • Выделяем 4-12 ГБ оперативной памяти
  • Запускаем сервер маршрутизации на порту 8989
  • Указываем ссылку на данные https://download.geofabrik.de/russia-latest.osm.pbf

Шаг 3: Ожидание обработки карты

GraphHopper обрабатывает карту и создает маршруты. Этот процесс займет 15-40 минут.

Следим за логами:

docker logs -f graphhopper

По итогу вы увидите что сервер, запущен:

  [main] INFO  o.e.j.server.handler.ContextHandler - Started i.d.j.MutableServletContextHandler@119290b9{/,null,AVAILABLE}
  [main] INFO  o.e.jetty.server.AbstractConnector - Started application@a33b4e3{HTTP/1.1, (http/1.1)}{0.0.0.0:8989}
  [main] INFO  o.e.jetty.server.AbstractConnector - Started admin@c6da8bb{HTTP/1.1, (http/1.1)}{0.0.0.0:8990}
  [main] INFO  org.eclipse.jetty.server.Server - Started Server@3bd3d05e{STARTING}[10.0.23,sto=30000] @561489ms

Шаг 4: Проверка работы сервера

1. Открываем веб-интерфейс

В браузере: http://<IP_СЕРВЕРА>:8989/

Если видите карту и поиск маршрутов — все работает!

2. Проверяем API

GET "http://<IP_СЕРВЕРА>:8989/route?point=55.751244,37.618423&point=59.934280,30.335099&profile=car&points_encoded=false"

Если возвращается JSON с маршрутом — ✅ GraphHopper успешно запущен!

Шаг 5: Настройка домена и HTTPS

Теперь сделаем GraphHopper доступным по https://{ВАШ ДОМЕН} через Nginx.

1. Устанавливаем Nginx и Certbot

sudo apt install nginx certbot python3-certbot-nginx -y

2. Настраиваем Nginx

Открываем конфиг:

sudo nano /etc/nginx/sites-available/{ВАШ ДОМЕН}

Вставляем:

server {
    listen 80;
    server_name {ВАШ ДОМЕН};

    location / {
        proxy_pass http://localhost:8989;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Сохраняем (Ctrl + X, затем Y, затем Enter).

3. Активируем конфигурацию и получаем SSL

sudo ln -s /etc/nginx/sites-available/{ВАШ ДОМЕН} /etc/nginx/sites-enabled/
sudo systemctl restart nginx
sudo certbot --nginx -d {ВАШ ДОМЕН}

Теперь API доступно по адресу:

https://{ВАШ ДОМЕН}/route?point=55.751244,37.618423&point=59.934280,30.335099&profile=car&points_encoded=false

🏆 Итог

🔗 Мы развернули свой сервер маршрутизации на GraphHopper с Docker и автоматической загрузкой карт!

✅ Работает API маршрутов

✅ Доступ через https://{ВАШ ДОМЕН}

✅ Поддержка разных видов транспорта

🚀 Теперь у вас есть свой сервер для маршрутизации на OpenStreetMap!

Статья помогла? Подарите мне чашку кофе ☕