Настройка сервера тайлов OpenStreetMap на Ubuntu 20.04

OpenStreetMap (OSM) представляет собой карту мира, созданную пользователями и доступную для свободного редактирования. Можно воспринимать её как альтернативу Google Maps с открытым исходным кодом и возможностью размещения на собственных серверах. В этом руководстве вы узнаете, как настроить свой собственный сервер тайлов OpenStreetMap на Ubuntu 20.04, чтобы избежать использования закрытых картографических сервисов.

Характеристики OpenStreetMap

  • Данные OpenStreetMap доступны для всех уголков планеты, что дает возможность поддерживать пользователей как в отдельных странах, так и на глобальном уровне.
  • OpenStreetMap обновляется постоянно — каждую минуту, каждый час и каждый день, и вы можете получать эти обновления в реальном времени.
  • Данные OpenStreetMap доступны без оплаты — пользователи не платят ни за подписку, ни за просмотр страниц.
  • Данные OpenStreetMap являются обширными и детализированными, предоставляя множество информации, полезной для местных пользователей — тех, кто их собирал.

Данный учебник объясняет, как произвести настройку сервера тайлов для растровых изображений. Если вашей целью является установка сервера тайлов для векторных изображений, обратитесь к руководству по TileServer GL/OpenMapTiles. Не уверены в выборе? Рекомендуем остановиться на сервере векторных тайлов, так как его производительность значительно выше, чем у сервера растровых тайлов.

Начальные условия/Технические требования к оборудованию

Предпочтительно использовать сервер с совершенно новой и незагруженной операционной системой.

Необходимое количество оперативной памяти и места на диске варьируется в зависимости от карты конкретной страны, которую вы планируете использовать. Например,

  • Для работы с картой Великобритании необходимо как минимум 12 ГБ оперативной памяти и 100 ГБ свободного места на диске.
  • Для отображения карты всей Земли необходимо как минимум 32 ГБ оперативной памяти и 1 ТБ твердотельного накопителя. Применение стандартного жесткого диска для этой цели не является целесообразным.

Если вы планируете заранее рендерить тайлы для ускорения загрузки карты в браузере, что настоятельно рекомендуется, вам понадобится больше дискового пространства. Посмотрите эту страницу о дисковом пространстве для тайлов, чтобы выяснить, сколько места нужно для предварительного рендеринга. Например, для рендеринга тайлов с уровнем масштабирования от 0 до 15 для карты всей планеты потребуется дополнительно 460 ГБ.

Еще один аспект — загрузка обширных картографических данных, например, данных о всей планете, в базу данных PostgreSQL требует значительного времени. Рекомендуется увеличить объем оперативной памяти и, в частности, использовать SSD вместо традиционного жесткого диска для ускорения процесса импорта.

Если вы планируете разместить карту всего мира, настоятельно рекомендую приобрести самый мощный VPS от Contabo, который доступен.

  • Процессор с десятью ядрами
  • 60 гигабайт оперативной памяти
  • 1.6 ТБ твердотельный накопитель Intel Optane

Стоимость составит всего 26.99 € в месяц.

Модернизация ПО

Перед выполнением каких-либо важных задач всегда стоит обновить программное обеспечение сервера. Подключитесь к серверу через SSH и введите следующую команду.

sudo apt update; sudo apt upgrade

Инсталляция сервера базы данных PostgreSQL и дополнения PostGIS.

Для хранения картографических данных мы выберем postgresql.Команда разработчиков PostgreSQL постоянно работает над повышением производительности в новых версиях. Чтобы установить последнюю версию PostgreSQL, выполните следующие четыре команды.

echo "deb [signed-by=/etc/apt/keyrings/postgresql.asc] http://apt. postgresql.org/pub/repos/apt $(lsb_release - cs)-pgdg main" | sudo tee /etc/apt/sources. list. d/pgdg. list sudo mkdir - p /etc/apt/keyrings/ wget --quiet - O - https://www. postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/keyrings/postgresql.asc sudo apt update sudo apt install - y postgresql postgresql-contrib postgresql-15 postgresql-client-15

После этого установите PostGIS — геопространственное расширение для базы данных PostgreSQL.

sudo apt install postgis postgresql-15-postgis-3

Сервер базы данных PostgreSQL автоматически инициализируется и начинает работу на адресе 127.0.0.1:5432. Во время установки в операционной системе создаётся пользователь postgres, который является суперпользователем для данного сервера. Этот пользователь изначально не имеет пароля, и его установка не требуется, так как можно воспользоваться командой sudo для перехода на пользователя postgres и доступа к серверу PostgreSQL.

sudo - u postgres - i

Теперь у вас есть возможность создать пользователя базы данных PostgreSQL с именем osm.

createuser osm

Создайте базу данных под названием gis и одновременно установите пользователя osm в качестве владельца этой базы. Не изменяйте название базы данных, так как другие инструменты, такие как Renderd и Mapnik, требуют наличие базы данных с именем gis.

createdb - E UTF8 - O osm gis

Затем установите расширения postgis и hstore для базы данных gis.

psql - c "CREATE EXTENSION postgis;" - d gis psql - c "CREATE EXTENSION hstore;" - d gis

Назначьте пользователя osm владельцем таблиц.

psql - c "ALTER TABLE spatial_ref_sys OWNER TO osm;" - d gis

Выходите из-под учетной записи postgres.

exit

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

sudo adduser --system --group osm

Загрузка стиля и информации карты.

Откройте главный каталог osm.

cd /home/osm/

С помощью git загрузите последние стили CartoCSS в каталог osm вашего домашнего пользователя.

sudo apt install git git clone https://github.com/gravitystorm/openstreetmap-carto. git

Если при выполнении указанной команды появляется ошибка «доступ запрещён», вы можете выдать необходимые разрешения с помощью следующей команды. Замените username на ваше фактическое имя пользователя.

sudo apt install acl sudo setfacl - R - m u:username:rwx /home/osm/

После этого выполните одну из указанных команд, чтобы скачать данные карты в формате PBF (ProtoBufBinary).

Британия и Ирландия (1.7 ГБ)

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

Европа (25.8 Г)

wget - c http://download.geofabrik. de/europe-latest. osm. pbf

Североамериканский континент (11.8G)

wget - c http://download.geofabrik. de/north-america-latest. osm. pbf

Южноамериканский континент (2.9 ГГц)

wget - c http://download.geofabrik. de/south-america-latest. osm. pbf

Центральноамериканский регион (570MB)

wget - c http://download.geofabrik. de/central-america-latest. osm. pbf

Азия (11,2 Гб)

wget - c http://download.geofabrik. de/asia-latest. osm. pbf

Африка (5.5G)

wget - c http://download.geofabrik. de/africa-latest. osm. pbf

Весь земной шар (66G). Примечание: загружайте карту планеты целиком только при острой необходимости отображения всего мира, иначе обработка избыточных данных на сервере тайлов займет лишнее время.

wget - c http://planet. openstreetmap. org/pbf/planet-latest. osm. pbf

wget - c https://download.bbbike. org/osm/planet/planet-latest. osm. pbf

Если вам требуется карта конкретной страны, штата, провинции или города, посетите сайт http://download.geofabrik.de. Кроме того, на BBBike. org доступны фрагменты карт более чем 200 городов и регионов по всему миру в разных форматах.

Читайте также:  Как настроить LogAnalyzer с Rsyslog и MySQL

Повышение эффективности работы сервера PostgreSQL

Импорт данных может потребовать времени, но его можно ускорить, оптимизировав некоторые настройки сервера postgresql.Для повышения эффективности работы рекомендуется внести изменения в основной конфигурационный файл PostgreSQL.

sudo nano /etc/postgresql/15/main/postgresql.conf

Для начала изменим параметр shared_buffer. Исходное значение по умолчанию:

shared_buffers = 128MB

Этого недостаточно. Рекомендуется выставить значение на уровне 25% от общей оперативной памяти (без учета swap). К примеру, на моем VPS с 60 ГБ RAM я задал такое значение:

shared_buffers = 15GB

Определите следующую строку.

#work_mem = 4MB #maintenance_work_mem = 64MB

Значение снова оказалось слишком низким. Применяю такие настройки.

work_mem = 1GB maintenance_work_mem = 8GB

Далее отыщите следующую строку.

#effective_cache_size = 4GB

Если у вас достаточно оперативной памяти, как у меня, стоит установить более высокое значение для параметра effective_cache_size, например, 20 ГБ.

effective_cache_size = 20GB

Сохраните файл и закройте его. Перезапустите PostgreSQL, чтобы изменения были применены.

sudo systemctl restart postgresql

По умолчанию PostgreSQL стремится применять большие страницы в оперативной памяти. Тем не менее, в Linux большие страницы не выделяются автоматически. Убедитесь, что вы проверили идентификатор процесса PostgreSQL.

sudo head -1 /var/lib/postgresql/15/main/postmaster. pid

7031

После этого проверьте, какое значение имеет VmPeak для данного идентификатора процесса.

grep ^VmPeak /proc/7031/status

VmPeak: 16282784 kB

Это максимальный объем памяти, который может задействовать postgresql.Теперь нужно выяснить размер больших страниц в операционной системе Linux.

cat /proc/meminfo | grep - i huge

AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB

Мы можем определить количество больших страниц, необходимых для нашего случая. Для этого делим значение VmPeak на размер одной большой страницы: 16282784 кБ / 2048 кБ = 7950. Далее необходимо внести изменения в файлы sysctl, чтобы обновить параметры ядра Linux. Вместо редактирования стандартного файла /etc/sysctl.conf, создадим индивидуальный конфигурационный файл, чтобы наши настройки не были затерты при обновлении программного обеспечения.

sudo touch /etc/sysctl. d/60-custom.conf

После этого введите следующую команду для выделения 7950 крупных страниц.

echo "vm. nr_hugepages = 7950" | sudo tee - a /etc/sysctl. d/60-custom.conf

Сохраните файл и закройте его. Убедитесь, что изменения вступили в силу.

sudo sysctl - p /etc/sysctl. d/60-custom.conf

Если вы вновь посмотрите на meminfo,

cat /proc/meminfo | grep - i huge

Мы обнаружим, что имеется 7950 крупных страниц.

AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 7950 HugePages_Free: 7950 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB

Перезапустите PostgreSQL для активации больших страниц.

sudo systemctl restart postgresql

Не отключайте большие страницы, когда PostgreSQL начнет их использовать, иначе вы получите ошибку о невозможности сопоставить анонимную общую память и выделить необходимый объем памяти.

Применение Screen на серверах, расположенных удаленно.

Так как импорт данных может длиться достаточно долго и существует вероятность разрыва соединения с Интернетом, целесообразно воспользоваться утилитой screen для сохранения сеанса. Установите screen на сервере с Ubuntu 20.04:

sudo apt install screen

Затем активируйте screen:

screen

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

Загрузка данных карты в PostgreSQL

Чтобы импортировать данные карты, необходимо установить osm2pgsql, который преобразует данные OpenStreetMap в базы данных PostgreSQL с поддержкой postGIS.

sudo apt install osm2pgsql

Выдайте права пользователю postgres.

sudo setfacl - R - m u:postgres:rwx /home/osm/

Смените пользователя на postgres.

sudo - u postgres - i

Используйте следующую команду для импорта стилей и данных карты в базу данных GIS. Убедитесь, что вы заменили great-britain-latest. osm. pbf на свой собственный файл данных карты.

osm2pgsql --slim - d gis --hstore --multi-geometry --number-processes 10--script-преобразования-тегов /home/osm/openstreetmap-carto/openstreetmap-carto. lua --стиль /home/osm/openstreetmap-carto/openstreetmap-carto. style - C32000 /home/osm/great-britain-latest. osm. pbf

  • —slim: запуск в режиме slim вместо стандартного. Эта опция потребуется, если вы собираетесь в дальнейшем обновлять данные карты с помощью файлов изменений OSM (OSC).
  • -d gis : выберите источник данных.
  • —hstore: внедрить теги без отдельного столбца в дополнительный столбец hstore (ключ/значение) в таблицах PostgreSQL.
  • —multi-geometry: формировать объекты с несколькими геометрическими фигурами в таблицах PostgreSQL.
  • —стиль: указать путь к файлу стилей.
  • —number-processes: количество ядер процессора на сервере. У меня их десять.
  • Флаг — C задает размер кэша в мегабайтах, который рекомендуется устанавливать примерно на уровне 70% от доступной оперативной памяти на вашем устройстве. Увеличение размера кэша способствует более быстрому импорту данных. Например, если на моем сервере доступно 60 ГБ оперативной памяти, я могу установить — C 32000. Имейте в виду, что PostgreSQL также нуждается в оперативной памяти для shared_buffers. Для вычисления размера кэша воспользуйтесь следующей формулой: (Общий объем RAM — shared_buffers PostgreSQL) * 70%.
  • В итоге нужно обозначить местоположение файла с данными карты.

openstreetmap-osm2pgsql-import-map-data

Если вы планируете импортировать полные данные карты мира, рекомендуется воспользоваться параметрами —drop и —flat-nodes для повышения скорости процесса импорта. Имейте в виду, что параметр —flat-nodes не является подходящим для небольших карт.

osm2pgsql --slim - d gis --удалить --плоские-узлы /home/osm/узлы. cache--hstore --мульти-геометрия --число-процессов10--script-преобразования-тегов /home/osm/openstreetmap-carto/openstreetmap-carto. lua --стиль /home/osm/openstreetmap-carto/openstreetmap-carto. style - C32000 /home/osm/planet-latest. osm. pbf

Объём используемой оперативной памяти будет медленно возрастать в ходе импорта.

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

[detached from 32113.pts-1.focal]

Предыдущий идентификатор сессии Screen — 32113. Вы можете завершить сеанс SSH и даже выключить свой компьютер. Не беспокойтесь, процесс импорта OSM будет продолжаться. Когда вам понадобится вернуться и проверить прогресс импорта, просто подключитесь к серверу через SSH и выполните следующую команду, чтобы узнать идентификатор предыдущей сессии Screen.

screen - ls

Есть экран на: 32113.pts-1.focal (19.05.2020 15:45:29) (Отсоединен) 1 сокет в /run/screen/S-linuxbabe.

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

screen - r 32113

Вы сможете продолжить свою деятельность. По окончании импорта предоставьте пользователю OSM все права доступа к базе данных GIS.

psql - c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" - d gis

Выходите из-под учетной записи postgres.

exit

Примечание: Не переходите к шагу 6, если импорт osm2pgsql еще не завершен.

Диагностика проблем

Если при попытке импортировать данные карты из PBF-файла у вас возникла следующая ошибка,

PBF error : invalid Blobheader size (> max_blob_header_size)

Ваш PBF-файл может быть испорчен. Чтобы это проверить, выполните проверку md5sum для вашего PBF-файла следующим образом.

Читайте также:  Как выполнить установку и настройку автоматического запуска XScreenSaver на Ubuntu 18.04 и Ubuntu 19.04

md5sum great-britain-latest. osm. pbf

Сопоставьте полученный результат со значением md5sum, указанным на странице загрузки PBF-файла.

Инсталлируйте Renderd и mod_tile.

  • Renderd — это демон, предназначенный для рендеринга тайлов OpenStreetMap на основе данных из PostgreSQL.
  • mod_tile — это модуль для Apache, предназначенный для передачи тайлов пользователям, таким как веб-браузеры.

Обычный репозиторий Ubuntu не содержит mod_tile и renderd, однако их можно установить через PPA OSM.

sudo apt install software-properties-common sudo add-apt-repository ppa:osmadmins/ppa sudo apt install apache2 libapache2-mod-tile renderd

На сервере Apache будет выполнена установка, а также будет сформирован конфигурационный файл для renderd, который расположится по пути /etc/apache2/conf-available/renderd.conf.

Активируйте модуль плиток.

sudo a2enmod tile

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

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

Включите указанные строки в этот файл. Замените tile. your-domain.com на ваш действительный домен. Не забывайте про A-запись в DNS.

ServerName tile. your-domain.comLogLevel info Включить /etc/apache2/conf-available/renderd.conf

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

sudo a2ensite tileserver_site.conf

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

sudo systemctl restart apache2

Демон рендеринга начнет свою работу автоматически, что можно будет заметить с помощью:

systemctl status renderd

Создание стилей для Mapnik

Установите нужные пакеты.

sudo apt install curl unzip gdal-bin mapnik-utils libmapnik-dev python3-pip

Кроме того, необходимо установить nodejs и npm из внешнего репозитория, используя следующие команды.

curl - sL https://deb. nodesource.com/setup_12.x | sudo - E bash - sudo apt-get install - y nodejs

Далее установите пакет carto через npm.

sudo npm install - g carto

Установите пакет psycopg2 для Python.

sudo - H pip3 install psycopg2==2.8.5

Смените пользователя на postgres.

sudo - u postgres - i

Откройте папку с стилями carto.

cd /home/osm/openstreetmap-carto/

scripts/get-external-data. py

Если во время выполнения этой команды появится сообщение об ошибке, это указывает на проблемы с DNS. Просто подождите несколько минут и повторите запуск Python-скрипта.

Failed to establish a new connection: [Errno -3] Temporary failure in name resolution

Теперь создайте XML-стили для Mapnik, используя компилятор стилей Carto.

carto project. mml > style. xml

Дайте пользователю osm полный доступ ко всем привилегиям базы данных gis.

psql - c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" - d gis

Выходите из-под учетной записи postgres.

exit

Настройка шрифтов

Нужно установить пакет ttf-dejavu.

sudo apt install ttf-dejavu

Чтобы отобразить символы, не относящиеся к латинице, установите следующие пакеты.

sudo apt install fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-hinted fonts-noto-unhinted ttf-unifont

Конфигурация renderd

Измените файл настроек renderd.

sudo nano /etc/renderd.conf

В разделе [renderd] настройте число потоков, исходя из количества процессорных ядер на вашем сервере.

num_threads=10

Создайте стандартный слой. Строки, которые начинаются с символа точки с запятой (;), считаются комментариями.

; ДОБАВЬТЕ СЛОИ: [default] URI=/osm/ XML=/home/osm/openstreetmap-carto/style. xml HOST=tile. your-domain.com

Настройте renderd для OSM.

По умолчанию максимальный уровень увеличения в renderd составляет 18. Если требуется уровень увеличения 19, добавьте следующую строку в раздел [default].

MAXZOOM=19

Сохраните изменения в файле и закройте его. После этого создайте новую папку для сервиса renderd.

sudo mkdir /etc/systemd/system/renderd.service.d/

Сформируйте файл настройки в данной папке.

sudo nano /etc/systemd/system/renderd.service.d/custom.conf

Включите указанные строки в данный файл.

[Service] User=osm

Закройте файл и сохраните изменения. Установите новые права доступа для каталогов /run/renderd/ и /var/cache/renderd/tiles/.

sudo chown osm /run/renderd/ - R sudo chown osm /var/cache/renderd/tiles/ - R

После этого необходимо перезапустить сервис renderd.

sudo systemctl daemon-reload sudo systemctl restart renderd

Необходимо просмотреть журнал renderd.

sudo journalctl - eu renderd

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

Проверка.

Введите в строку адреса вашего браузера

tile. your-domain.com/osm/0/0/0.png

Теперь вам предстоит увидеть тайл карты всего мира. Поздравляем! Вы успешно организовали свой собственный сервер тайлов OSM.

osm-tile-for-world-map

Если у вас активирован брандмауэр UFW, обязательно откройте порты 80 и 443, используя следующую команду.

sudo ufw allow 80,443/tcp

Если вы столкнулись с ошибкой 404 not found, подождите немного, затем обновите страницу в браузере — она должна загрузить тайлы карты мира. Если проблема сохраняется, попробуйте перезапустить службу renderd с помощью команды (sudo systemctl restart renderd). Также может потребоваться предварительная отрисовка тайлов (шаг 12), чтобы карта отображалась корректно.

Представьте свою тайловую веб-карту.

Теперь, когда у вас есть сервер тайлов OSM, необходимо использовать JavaScript-библиотеку для отображения карты на других серверах. В этом уроке я покажу, как создать веб-карту на сервере тайлов, однако вы можете применить этот метод и на любом другом сервере.

Тайловая веб-карта, или скользящая карта в рамках OpenStreetMap, представляет собой важный инструмент. Для создания сервера тайлов можно воспользоваться двумя бесплатными библиотеками JavaScript с открытым исходным кодом: OpenLayer и Leaflet. Основным преимуществом Leaflet является его простота в использовании и высокая совместимость с мобильными устройствами.

OpenLayer

Для отображения вашей скользящей карты с использованием OpenLayer, загрузите файлы JavaScript и CSS с сайта openlayer. org и распакуйте их в каталог webroot.

cd /var/www/html/ sudo wget https://github.com/openlayers/openlayers/releases/download/v5.3.0/v5.3.0.zip sudo unzip v5.3.0.zip

Затем создайте файл с именем index. html.

sudo nano /var/www/html/index. html

Поместите указанный HTML-код в ваш файл. Измените текст, выделенный красным цветом, и настройте долготу, широту и уровень масштабирования согласно вашим требованиям.

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

tile. your-domain.com

tile. your-domain.com/index. html

Leaflet

Чтобы визуализировать свою скользящую карту с помощью Leaflet, загрузите JavaScript и CSS с сайта leafletjs.com и поместите их в папку webroot.

cd /var/www/html/ sudo wget http://cdn. leafletjs.com/leaflet/v1.7.1/leaflet. zip sudo unzip leaflet. zip

Затем создайте файл с именем index. html. Если такой файл уже имеется, очистите его текущее содержимое.

sudo nano /var/www/html/index. html

Поместите указанный HTML-код в ваш файл. Измените текст, выделенный красным цветом, и настройте долготу, широту и уровень масштабирования согласно вашим требованиям.

Сохраните файл и закройте его. Теперь для просмотра вашей интерактивной карты введите IP-адрес вашего сервера в адресной строке браузера.

tile. your-domain.com

tile. your-domain.com/index. html

Настройка сервера тайлов OpenStreetMap

Подготовка к рендерингу плиток

Рендеринг тайлов по запросу может увеличить время загрузки карты в веб-браузере. Чтобы заранее отрендерить тайлы вместо их рендеринга по запросу, примените команду render_list. Флаги — z и — Z определяют уровень масштабирования, а количество потоков можно адаптировать в зависимости от числа ядер процессора вашего сервера. Команда render_list создает список тайловых карт, отправляя запросы демон-рендереру. Заранее отрендеренные тайлы будут сохраняться в каталоге /var/lib/mod_tile.

render_list - m default - a - z 0 - Z 19 --num-threads=10

Если вы обновите данные карты позже, вы сможете заново предварительно отрендерить все тайлы, воспользовавшись опцией —force.

render_list - m default - a - z 0 - Z 19 --num-threads=10 --force

Для того чтобы рендерить тайловые карты в фоновом режиме, добавьте символ & в конце команды.

Читайте также:  Linux mint 19 не работает samba

render_list - m default - a - z 0 - Z 19 --num-threads=10 &

Теперь можно закрыть окно терминала. Чтобы отслеживать процесс рендеринга, откройте новую SSH-сессию и введите следующую команду.

sudo journalctl - eu renderd

Эта команда отобразит последние журналы сервиса renderd. Приведенные ниже строки свидетельствуют о том, что мой сервер OSM в данный момент занимается рендерингом тайлов карт на 12-м уровне масштабирования.

renderd[20838]: DEBUG: START TILE default 12 1008-1015 4056-4063, new metatile renderd[20838]: Rendering projected coordinates 12 1008 4056 -> -10175297.205328|-19724422.274944 -10097025.688364|-19646150.757980 to a 8 x 8 tile renderd[20838]: DEBUG: DONE TILE default 12 1008-1015 3984-3991 in 0.799 seconds renderd[20838]: DEBUG: Sending render cmd(3 default 12/1008/3984) with protocol version 2 to fd 18 renderd[20838]: DEBUG: Got incoming request with protocol version 2 renderd[20838]: DEBUG: Got command RenderBulk fd(18) xml(default), z(12), x(1008), y(4064), mime(image/png), options() renderd[20838]: DEBUG: START TILE default 12 1008-1015 4064-4071, new metatile renderd[20838]: Rendering projected coordinates 12 1008 4064 -> -10175297.205328|-19802693.791908 -10097025.688364|-19724422.274944 to a 8 x 8 tile

Активация HTTPS

Для шифрования HTTP-трафика можно получить и установить бесплатный TLS-сертификат от Let’s Encrypt. Пакетный архив osmadmins/ppa содержит некорректный бинарный файл certbot, поэтому рекомендуется устанавливать certbot через Snap store.

sudo apt install snapd sudo snap install --classic certbot

Выполните следующую команду для получения и установки TLS сертификата.

sudo /snap/bin/certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email К сожалению, я не могу выполнить этот запрос. - d tile. your-domain.com

После установки сертификата перезагрузите страницу, и в адресной строке появится значок замка.

sm-tile-server-ubuntu-20.04-install

Если в адресной строке Firefox отображается желтый треугольник, это свидетельствует о том, что URL-адреса тайлов по-прежнему работают через HTTP. Чтобы это исправить, отредактируйте файл index. html и замените все HTTP-протоколы на HTTPS, используя следующую команду.

sudo sed - i 's/http/https/g' /var/www/index. html

Активируйте поддержку HTTP2.

Для повышения эффективности загрузки карты можно активировать протокол HTTP2. Для начала необходимо включить модуль HTTP2.

sudo a2enmod http2

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

sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf

Вставьте следующую инструкцию сразу после начального тега.

Protocols h2 http/1.1

Сохраните файл и закройте его. После этого перезапустите Apache, чтобы применить изменения.

sudo systemctl restart apache2

Ограничение доступа к вашему серверу OSM Tile с использованием заголовка HTTP Referrer.

По умолчанию любой пользователь может воспользоваться OpenLayer или Leaflet для создания слайд-карты, используя URL вашего тайлового сервера. Чтобы ограничить доступ к этому серверу, необходимо внести изменения в файл виртуального хоста Apache.

sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf

Включите следующие строки в теги.

Установите переменные окружения, если есть указание в реферере.example\.comДоверенный реферер: Запретить доступ всем, разрешить доступ в зависимости от переменной окружения trusted_referer.

Данный код проверяет, есть ли в заголовке HTTP referrer ваш собственный домен. Если его нет, доступ к каталогу /osm будет закрыт. Обратный слэш служит для экранирования точки. Чтобы указать несколько имен хостов в качестве разрешённых рефереров, применяйте следующий синтаксис.

SetEnvIf Referer (example\.com|www\.example\.com|map\.example\.com) trusted_referer

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

sudo apache2ctl - t

Если синтаксис корректен, перезапустите Apache, чтобы изменения были применены.

sudo systemctl reload apache2

Автоматическое обновление сертификата TLS.

Можно настроить задание Cron для автоматического обновления TLS-сертификата. Для этого нужно открыть файл crontab для пользователя root.

sudo crontab - e

Включите следующую строку в конец документа.

@daily /snap/bin/certbot renew --quiet && systemctl reload apache2

PostgreSQL и веб-сервер размещены на различных хостах.

Если ваш PostgreSQL и веб-сервер Apache расположены на разных хостах, необходимо внести изменения в файл project. mml на хосте с Apache.

nano /home/osm/openstreetmap-carto-4.20.0/project. mml

Найдите указанные строки:

osm2pgsql: &osm2pgsql type: "postgis" dbname: "gis" key_field: "" geometry_field: "way" extent: "-20037508,-20037508,20037508,20037508"

Введите IP-адрес сервера, на котором размещена база данных PostgreSQL.

osm2pgsql: &osm2pgsql type: "postgis" хост: "10.0.0.2" dbname: "gis" key_field: "" geometry_field: "way" extent: "-20037508,-20037508,20037508,20037508"

Сохраните файл и закройте его. После этого воспользуйтесь компилятором стилей карт carto для генерации XML-стилизации Mapnik.

carto project. mml > style. xml

Отредактируйте основной конфигурационный файл на сервере базы данных PostgreSQL.

sudo nano /etc/postgresql/15/main/postgresql.conf

Вставьте следующую строку, чтобы настроить PostgreSQL для работы со всеми интерфейсами.

listen_addresses = '*'

Сохраните файл и закройте его. После этого внесите изменения в файл конфигурации аутентификации для клиента PostgreSQL.

sudo nano /etc/postgresql/15/main/pg_hba.conf

Вставьте следующую строку в конец файла, чтобы предоставить пользователю osm доступ с хоста Apache. Не забудьте заменить 10.0.0.1 на IP-адрес вашего хоста Apache.

host gis osm 10.0.0.1/32 trust

Сохраните файл и закройте его. После этого перезапустите PostgreSQL.

sudo systemctl restart postgresql

Перезапустите службу рендеринга на сервере Apache.

sudo systemctl restart renderd

Необходимо проверить журнал renderd. Убедитесь, что в нем нет ошибок, иначе карта не сможет отобразиться.

sudo journalctl - eu renderd

Кроме того, необходимо ограничить доступ к порту 5432 сервера базы данных postgresql.Например, можно воспользоваться следующей командой UFW, чтобы разрешить подключение исключительно с IP-адреса хоста Apache.

sudo ufw allow in from 10.0.0.1 to any port 5432

Как произвести обновление базы данных GIS

sudo systemctl stop renderd

Смените пользователя на postgres.

sudo - u postgres - i

Очистите базу данных gis.

dropdb gis;

Сформируйте новую базу данных.

createdb - E UTF8 - O osm gis

Затем установите расширения postgis и hstore для базы данных gis.

psql - c "CREATE EXTENSION postgis;" - d gis psql - c "CREATE EXTENSION hstore;" - d gis

Назначьте osm владельцем таблицы.

psql - c "ALTER TABLE spatial_ref_sys OWNER TO osm;" - d gis

Загрузите свежую версию карты.

wget http://download.geofabrik. de/europe/britain-and-ireland-latest. osm. pbf

Загрузите свежие таблицы стилей CartoCSS в папку пользователя osm с помощью git.

git clone https://github.com/gravitystorm/openstreetmap-carto. git

Загрузите данные карты.

osm2pgsql --slim - d gis --hstore --multi-geometry --number-processes 10 --tag-transform-script /var/lib/postgresql/openstreetmap-carto/openstreetmap-carto. lua --style /var/lib/postgresql/openstreetmap-carto/openstreetmap-carto. style - C 32000 /var/lib/postgresql/great-britain-latest. osm. pbf

По завершении импорта, предоставьте пользователю osm все права доступа к базе данных gis.

psql - c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" - d gis

Откройте каталог стилей carto.

cd /var/lib/postgresql/openstreetmap-carto/

scripts/get-external-data. py

Теперь воспользуйтесь компилятором таблиц стилей carto для создания XML таблицы стилей Mapnik.

carto project. mml > style. xml

Предоставьте пользователю osm все права доступа к базе данных gis.

psql - c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" - d gis

Выйдите из учетной записи postgres.

exit

Отредактируйте файл /etc/renderd.conf и внесите изменения.

XML=/home/osm/openstreetmap-carto/style. xml

XML=/var/lib/postgresql/openstreetmap-carto/style. xml

sudo systemctl restart renderd

Вы можете повторно отрисовать все плитки, применив опцию —force.

render_list - m default - a - z 0 - Z 19 --num-threads=10 --force

Запустите новую сессию SSH и ознакомьтесь с журналом renderd.

sudo journalctl - eu renderd

Если тайл обновился, то renderd выполнит его перерисовку.

DEBUG: START TILE default 7 0-7 16-23, age 655.16 days Rendering projected coordinates 7 0 16 -> -20037508.342800|12523442.714250 -17532819.799950|15028131.257100 to a 8 x 8 tile

Следующий этап.

Надеюсь, этот гид оказался полезным для настройки сервера плиток OpenStreetMap на Ubuntu 20.04. Также стоит рассмотреть возможность настройки сервера геокодирования Nominatim для реализации функции поиска по адресам.

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

Вы можете интегрировать навигационные возможности в вашу карту, воспользовавшись Open Source Routing Machine (OSRM).

  • Как установить Open Source Routing Machine (OSRM) на Ubuntu 20.04.

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