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"
}
]