Разворачиваем свой сервер маршрутизации на 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!