17.14. Как развернуть Nominatim на своём сервере

В закрытой сети без доступа в Интернет геокодер Nominatim можно запустить локально.

17.14.1. Системные требования

Минимальные требования к системе для запуска импорта данных на весь мир:

  • CPU: 16 ядер

  • RAM: 64 GB

  • Диск: 1.5TB (NVMe) SSD

Можно попробовать запустить Nominatim и на менее мощной системе, однако в этом случае процесс импорта данных может занять значительно больше времени. Для справки: на ноутбуке с HDD, 8 ядрами и 16 GB оперативной памяти импорт данных на территорию России занимает около двух суток.

17.14.2. Установка и настройка Docker

Если на сервере еще не установлен Docker Engine и Docker Compose их нужно установить или обновить до актуальных версий:

Для получения образов необходимо выполнить авторизацию в NextGIS Container Registry с использованием имени пользователя (example) и пароля (sesame) предоставленного компанией NextGIS:

$ docker login cr.nextgis.com -u example -p sesame
Login Succeeded

В случае если развертывание осуществляется на сервере без доступа к Интернет, то вместо этого шага свяжитесь со службой поддержки для получения образа в виде одного файла. Его нужно будет перенести на сервер и загрузить командой docker load.

17.14.3. Установка Nominatim

На сервере, где планируется развернуть Nominatim, создайте директорию /srv/nominatim и перейдите в нее, скачайте шаблон конфигурации (nominatim.zip) и распакуйте его. Если установка производится на сервере без доступа в Интернет, скачайте файл на другом ПК и перенесите его на сервер. Получившаяся структура каталогов должна выглядеть следующим образом:

/srv/nominatim
├── docker-compose.yml
└── pbf

PBF-файл для нужной территории можно получить на data.nextgis.com. Распакуйте архив, переименуйте файл с расширением *.pbf в import.pbf и поместите его в директорию pbf:

/srv/nominatim
├── docker-compose.yml
└── pbf
    └── import.pbf

Убедитесь, что имя PBF-файла совпадает с указанным в переменной окружения PBF_PATH в docker-compose.yml.

Перейдите в директорию nominatim и запустите сервис с помощью следующей команды:

$ docker compose up nominatim

После завершения импорта данных (процесс может занять продолжительное время) установка считается завершённой.

После успешного импорта в логах должно быть следующее сообщение:

nominatim-1  | --> Nominatim is ready to accept requests

Если используется HTTPS, на этом этапе необходимо настроить обратный прокси-сервер. Если нет, то сразу приступайте к проверке работоспособности.

17.14.4. Рекомендации по настройке обратного прокси-сервера

Для обеспечения HTTPS шифрования мы рекомендуем использовать обратный прокси-сервер на базе Nginx, для справки приведем пример фрагмента конфигурационного файла для nominatim.example.com:

server {
server_name nominatim.example.com;
# Директивы сервера: listen, ssl_* и пр.

    location / {
        proxy_http_version 1.1;
        proxy_pass http://127.0.0.1:21879;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

17.14.5. Подключение Nominatim в NextGIS Web

Подключение Nominatim в NextGIS Web настраивается через переменную окружения NEXTGISWEB__WEBMAP__NOMINATIM__URL. По умолчанию используется адрес https://nominatim.openstreetmap.org.

Примечание

Обратите внимание: если NextGIS Web работает по HTTPS, а Nominatim - нет (например, вы не настроили обратный прокси-сервер), запросы к Nominatim из веб-карты работать не будут. В таком случае Nominatim также должен быть доступен по HTTPS.

По умолчанию ответы Nominatim включают HTTP-заголовки CORS: Access-Control-Allow-Origin: * и Access-Control-Allow-Methods: OPTIONS, GET, поэтому дополнительная настройка CORS не требуется.

17.14.6. Проверка работоспособности

Замените параметр запроса на любое название места из импортированного набора данных:

$ http -b 'http://localhost:21879/search?q=Гимназия №42, Барнаул'
[
    {
        "addresstype": "amenity",
        "boundingbox": [
            "53.3449857",
            "53.3468221",
            "83.7606078",
            "83.7637943"
        ],
        "category": "amenity",
        "display_name": "Гимназия №42, Красноармейский проспект, Железнодорожный район, Барнаул, городской округ Барнаул, Алтайский край, Сибирский федеральный округ, 656000, Россия",
        "importance": 9.99999999995449e-06,
        "lat": "53.3459048",
        "licence": "Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright",
        "lon": "83.76223383888328",
        "name": "Гимназия №42",
        "osm_id": 803823586,
        "osm_type": "way",
        "place_id": 16510024,
        "place_rank": 30,
        "type": "school"
    }
]