Конфигурация сервера тайлов OpenStreetMap (OSM) на Debian 12 Bookworm

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

Уникальные черты OpenStreetMap

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

Предварительные условия/Аппаратные требования

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

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

Для ускорения загрузки карты в веб-браузере настоятельно рекомендуется предварительно отрендерить тайлы, что потребует больше дискового пространства. Чтобы узнать, сколько места нужно для предварительной отрисовки тайлов, проверьте соответствующую страницу. К примеру, если вы планируете предварительно отрендерить тайлы с уровнем масштабирования от 0 до 15 для карты Земли, вам потребуется дополнительно 460 ГБ дискового пространства.

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

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

  • Десятиъядерный процессор
  • 60 гигабайт оперативной памяти
  • 1.6 ТБ SSD на базе Intel Optane

Стоимость составляет всего 26,99 € в месяц.

Обновление ПО

Регулярное обновление серверного ПО перед проведением любых значительных операций на сервере — это важная практика. Подключитесь к своему серверу через SSH и выполните следующую команду.

sudo apt update; sudo apt upgrade

При возникновении следующих ошибок,

perl: warning: Falling back to a fallback locale ("en_US. UTF-8"). perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_MONETARY = "zh_CN. UTF-8", LC_ADDRESS = "zh_CN. UTF-8", LC_TELEPHONE = "zh_CN. UTF-8", LC_NAME = "zh_CN. UTF-8", LC_MEASUREMENT = "zh_CN. UTF-8", LC_IDENTIFICATION = "zh_CN. UTF-8", LC_NUMERIC = "zh_CN. UTF-8", LC_PAPER = "zh_CN. UTF-8", LANG = "en_US. UTF-8" are supported and installed on your system. perl: warning: Falling back to a fallback locale ("en_US. UTF-8").

Это указывает на то, что ваш локальный компьютер пытается передать переменную окружения локали на VPS с Debian, однако в данной системе локаль не настроена. Чтобы устранить эту проблему, внесите изменения в файл конфигурации SSH-демона.

sudo nano /etc/ssh/sshd_config

Прокрутите страницу до самого низа, и вы наткнётесь на строку, которая указывает демону SSH принимать переменные окружения от SSH-клиента.

AcceptEnv LANG LC_*

Поменяйте её на следующую, чтобы демон SSH не обрабатывал переменные окружения.

AcceptEnv no

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

sudo systemctl restart ssh

Выйдите из системы и зайдите снова. Ошибка локали больше не появится.

Установка сервера базы данных 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 в операционной системе. Этот пользователь является суперпользователем для postgresql.По умолчанию пароль для него не установлен, и нет необходимости его задавать, так как вы можете воспользоваться командой 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 --home /home/osm/ osm

Загрузите стиль карты и информацию о карте

Перейдите в основной каталог osm.

Читайте также:  Два метода установки мессенджера Telegram на Debian 8

cd /home/osm/

Используйте следующую команду для назначения прав вашей учетной записи. Не забудьте заменить «username» на ваше фактическое имя пользователя.

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

Используйте git, чтобы загрузить свежие стили карт CartoCSS в домашнюю папку пользователя osm.

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

После этого выполните одну из следующих команд для загрузки карты в формате PBF (ProtoBufBinary).

Соединенное Королевство и Республика Ирландия (1.7G)

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.9G)

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

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

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 городов и регионов по всему миру в различных форматах.

Улучшение производительности сервера PostgreSQL

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

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

В первую очередь обновим значение shared_buffer. Значение по умолчанию составляет:

shared_buffers = 128MB

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

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 Hugetlb: 16281600 kB

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

sudo systemctl restart postgresql

Применяйте Screen для работы на удалённых серверах

Учитывая, что импорт может занять продолжительное время, и ваш компьютер может не иметь доступа к Интернету, рекомендуется воспользоваться утилитой screen для поддержания активной сессии. Установите screen на сервере Debian 12:

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--tag-обработчик-скрипт /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) в дальнейшем.
  • Выберите нужную базу данных.
  • —hstore: добавлять теги в формате ключ/значение в отдельный столбец hstore в таблицах PostgreSQL без создания дополнительных столбцов.
  • —multi-geometry : создание объектов с несколькими геометриями в таблицах PostgreSQL.
  • Укажите путь к файлу стиля.
  • —number-processes : число процессорных ядер на вашем сервере. У меня их 10.
  • Флаг — C задает размер кэша в мегабайтах. Он должен составлять примерно 70% от объема свободной оперативной памяти на вашем устройстве. Увеличение размера кэша ускоряет процесс импорта данных. К примеру, на моем сервере доступно 60 ГБ оперативной памяти, поэтому я могу установить значение — C на 32000. Важно помнить, что PostgreSQL также требует часть памяти для параметра shared_buffers. Для расчета подходящего размера кэша используйте следующую формулу: (Общая ОЗУ — shared_buffers PostgreSQL) * 70%.
  • В итоге необходимо указать расположение файла с данными карты.

openstreetmap-osm2pgsql-import-map-data

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

osm2pgsql --slim - d gis --удалить --плоские-узлы /домашний/осм/узлы.кэш --hstore --многогранная-геометрия --количество-процессов 10 --tag-обработчик-скрипт /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. Вы увидите сообщение, похожее на следующее.

Читайте также:  Как установить Python 3.13 на Ubuntu 24.04, 22.04 и 20.04

[detached from 32113.pts-1.buster]

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

screen - ls

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

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

screen - r 32113

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

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

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

exit

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

Инсталляция Renderd и модуля mod_tile

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

Их можно установить из обычного программного репозитория Debian 12.

sudo apt install apache2 libapache2-mod-tile renderd

Конфигурационный файл для renderd будет размещен по пути /etc/apache2/conf-available/renderd.conf.Активируйте модуль тайлов.

sudo a2enmod tile

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

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

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

ServerName tile.your-domain.com Корень документа: /var/www/ Уровень логирования: информацияOptions Indexes FollowSymLinks MultiViews AllowOverride None Require all granted

ModTileTileDir /var/cache/renderd/tiles
LoadTileConfigFile /etc/renderd.conf
ModTileEnableStats On
ModTileBulkMode Off
ModTileRequestTimeout 3
ModTileMissingRequestTimeout 10
ModTileMaxLoadOld 2
ModTileMaxLoadMissing 5
ModTileRenderdSocketName /run/renderd/renderd. sock
ModTileCacheDurationMax 604800
ModTileCacheDurationDirty 900
ModTileCacheDurationMinimum 10800
ModTileCacheDurationMediumZoom 1386400
ModTileCacheDurationLowZoom 9518400
ModTileCacheLastModifiedFactor 0.20
ModTileEnableTileThrottling Off
ModTileEnableTileThrottlingXForward 0
ModTileThrottlingTiles 10000 1
ModTileThrottlingRenders 128 0.2

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

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

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

sudo npm install - g carto

Установите библиотеки Python: yaml и psycopg2.

sudo apt install python3-pretty-yaml python3-yaml python3-psycopg2

Перейдите на пользователя postgres.

sudo - u postgres - i

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

cd /home/osm/openstreetmap-carto/

scripts/get-external-data. py

debian-osm-Generate-Mapnik-Stylesheet

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

Не удалось установить новое соединение: [Errno -3] Временная ошибка в разрешении имени

Теперь сгенерируйте 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

Выполните установку шрифтов

Вам нужно установить пакет fonts-dejavu.

sudo apt install fonts-dejavu fonts-dejavu-web

Для отображения символов, отличных от латинских, установите указанные ниже пакеты.

sudo apt install fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-hinted fonts-noto-unhinted fonts-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 для OpenStreetMap.

По умолчанию 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, иначе карта не загрузится.

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

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

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).

Отображение вашей веб-карты с плитками

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

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

cd /var/www/ 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/index. html

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

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

Читайте также:  Пошаговое руководство по отключению журнала в файловой системе ext4

tile. your-domain.com

tile. your-domain.com/index. html

Для отображения вашей слайппи карты с использованием Leaflet, скачайте JavaScript и CSS с сайта leftletjs.com и поместите их в директорию веб-корня.

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

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

sudo nano /var/www/index.html

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

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

tile. your-domain.com

tile. your-domain.com/index. html

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

Предварительная визуализация плиток

Создание тайлов в реальном времени может увеличить время загрузки карты в браузере. Чтобы предварительно создать тайлы вместо их динамической отрисовки, воспользуйтесь командой render_list. Укажите уровень масштабирования с помощью флагов — z и — Z, а количество потоков настройте в соответствии с числом ядер CPU на вашем сервере. Команда 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

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

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. В первую очередь, нужно установить клиент Let’s Encrypt (certbot) на систему Debian 12.

sudo apt install certbot

Поскольку мы применяем веб-сервер Apache, необходимо установить соответствующий плагин для него.

sudo apt install python3-certbot-apache

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

sudo 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, используя заголовок HTTP Referrer

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

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

Вставьте указанные строки в теги.

Установите переменную окружения в зависимости от реферера.example.com Доверенный_реферер Order deny, allow Запретить для всех Разрешить только при наличии переменной среды trusted_referer

Этот код проверяет, содержит ли заголовок HTTP referer ваш собственный домен. В случае его отсутствия доступ к директории /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 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/11/main/postgresql.conf

Включите следующую строку для настройки PostgreSQL на прослушивание всех сетевых интерфейсов.

listen_addresses = '*'

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

sudo nano /etc/postgresql/11/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

Надеюсь, этот гид оказался полезным для вас в процессе настройки сервера тайлов OpenStreetMap на Debian 12. Возможно, вам также потребуется настроить сервер геокодирования Nominatim, чтобы обеспечить функциональность поиска.