OpenStreetMap (OSM) — это платформа для картографии, где пользователи могут вносить изменения и редактировать карты. Она представляет собой альтернативу Google Maps, основанную на открытом исходном коде и независимом хостинге. В этом руководстве объясняется, как развернуть собственный сервер тайлов OpenStreetMap на Ubuntu 22.04, что позволяет отказаться от использования коммерческих картографических сервисов.
Содержание статьи
- 1 Характерные черты OpenStreetMap
- 2 Технические требования и необходимые условия.
- 3 Обновление ПО
- 4 Инсталляция базы данных PostgreSQL и подключение расширения PostGIS.
- 5 Импорт стилей и картографической информации
- 6 Улучшение производительности сервера PostgreSQL
- 7 Применение Screen на серверах с удаленным доступом
- 8 Перенос данных карты в PostgreSQL
- 9 Инсталлируйте Renderd и модуль mod_tile.
- 10 Создание таблицы стилей Mapnik
- 11 Установите шрифты.
- 12 Конфигурация renderd
- 13 Проведение испытаний
- 14 Визуализация вашей плиточной веб-карты
- 15 Leaflet
- 16 Первоначальная прорисовка плиток.
- 17 Активируйте протокол HTTP2
- 18 Ограничьте доступ к вашему серверу тайлов OSM, используя заголовок HTTP Referer.
- 19 Как произвести обновление базы данных GIS?
- 20 Следующий этап
Характерные черты OpenStreetMap
- Данные OpenStreetMap охватывают весь мир, позволяя пользователям получать поддержку в любой стране.
- OpenStreetMap обновляется ежеминутно, и все изменения доступны в режиме реального времени.
- Информация из OpenStreetMap доступна бесплатно и без ограничений — не требуется ни подписка, ни оплата за количество обращений.
- Информация, представленная в OpenStreetMap, обширна и детализирована, включающая множество полезных данных для тех, кто участвовал в её сборе непосредственно на местах.
В данном руководстве описан процесс настройки сервера с растровыми тайлами. Если вам требуется сервер для векторных тайлов, воспользуйтесь инструкцией TileServer GL/OpenMapTiles. Не уверены, что выбрать? Рекомендуется использовать векторный сервер, поскольку он значительно быстрее растрового.
Технические требования и необходимые условия.
Рекомендуется применять сервер с новой установленной операционной системой.
Объем оперативной памяти и место на диске, необходимое для работы, зависят от выбранной карты страны. Например,
- Для создания карты Великобритании необходимо минимум 12 ГБ оперативной памяти и 100 ГБ свободного места на диске.
- Для создания карты всей Земли необходимо не менее 32 ГБ оперативной памяти и 1 ТБ SSD. Применение вращающегося жесткого диска для данной карты неэффективно.
Если вы планируете заранее рендерить тайлы для ускорения загрузки карты в веб-браузере, что крайне рекомендуется, обратите внимание на то, что это потребует больше места на диске. Рекомендуем посетить страницу, посвященную использованию дискового пространства для тайлов, чтобы узнать конкретные требования. Например, для предварительного рендеринга тайлов с уровня масштабирования 0 до 15 для карты всей планеты потребуется дополнительно 460 ГБ места на диске.
Импорт значительных объемов картографических данных, например, всей планеты, в базу данных PostgreSQL требует considerable времени. Рекомендуется увеличить объем оперативной памяти и использовать SSD вместо традиционного жесткого диска для более быстрого выполнения процесса импорта.
При планировании размещения глобальной карты целесообразно рассмотреть возможность приобретения крупного VPS от Contabo, который предоставляет возможность.
- Десятиъядерный процессор.
- 60 ГБ оперативной памяти
- 1,6 ТБ твердотельный накопитель Intel Optane
Цена составляет всего 26,99 евро в месяц.
Обновление ПО
Перед началом основной работы настоятельно рекомендуется обновить программное обеспечение сервера. Подключитесь к серверу через SSH и выполните следующую команду.
sudo apt update; sudo apt upgrade - y
Инсталляция базы данных 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
sudo - u postgres - i
Теперь у вас есть возможность создать пользователя для базы данных PostgreSQL с именем osm.
createuser osm
Создайте базу данных под названием gis и назначьте пользователя osm её владельцем. Обратите внимание, что имя базы данных менять нельзя, так как другие инструменты, такие как Renderd и Mapnik, требуют наличия базы данных именно с таким названием.
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/
Предоставьте разрешения для вашей учетной записи, используя следующую команду. Замените «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% от общего объема оперативной памяти (без учета файла подкачки). Например, если у вас 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
Перезапустите PostgreSQL для активации поддержки больших страниц.
sudo systemctl restart postgresql
Не отключайте крупные страницы, как только PostgreSQL начнет их использовать, иначе возникнут проблемы с сопоставлением анонимной разделяемой памяти, и система не сможет выделить необходимый объем памяти.
Применение Screen на серверах с удаленным доступом
Импорт данных может занять значительное время, а также ваш компьютер может не иметь доступа к Интернету, поэтому целесообразно использовать утилиту screen для поддержания активной сессии. Установите screen на сервер с Ubuntu 22.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--tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto. lua --style /home/osm/openstreetmap-carto/openstreetmap-carto. style - C32000 /home/osm/britain-and-ireland-latest. osm. pbf
- —slim: активация режима slim вместо стандартного. Эта настройка требуется, если вы планируете обновлять данные карты с помощью файлов изменений OSM (OSC) в будущем.
- Выберите базу данных с помощью параметра — d gis.
- —hstore : позволяет добавлять теги в виде пар ключ/значение в отдельный hstore-столбец в таблицах PostgreSQL, не создавая для них отдельные поля.
- —multi-geometry: создавать объекты с несколькими геометриями в таблицах PostgreSQL.
- —style: задайте путь к файлу стиля.
- —number-processes: число используемых ядер процессора на вашем сервере. У меня их 10.
- Флаг — C задает размер кэша в мегабайтах. Рекомендуется устанавливать его на уровне примерно 70% от доступной оперативной памяти устройства. Увеличение размера кэша способствует ускорению процесса импорта. Например, если на сервере имеется 60 ГБ свободной ОЗУ, можно указать — C 32000. Важно учитывать, что часть памяти потребуется PostgreSQL для shared_buffers. Чтобы определить оптимальный размер кэша, используйте следующую формулу: (Объем ОЗУ — shared_buffers PostgreSQL) * 70%.
- В завершение необходимо указать путь к файлу с данными карты.

Для импорта полного набора данных планеты рекомендуется использовать опции —drop и —flat-nodes, чтобы ускорить процесс. Учтите, что опция —flat-nodes не подходит для работы с небольшими картами.
osm2pgsql --slim - d gis --удалить --плоские-узлы /home/osm/nodes. cache--hstore --многогеометрия --многопоточность10--tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto. lua --style /home/osm/openstreetmap-carto/openstreetmap-carto. style - C32000 /home/osm/planet-latest. osm. pbf
Использование оперативной памяти будет постепенно расти в ходе импорта.
Теперь вам, скорее всего, не нужно заниматься другими делами на вашем сервере. Используя Screen, вы можете нажать Ctrl+A, отпустить эти клавиши, а затем нажать D, чтобы отсоединиться от текущей сессии. На экране появится сообщение, подобное приведённому ниже.
[отсоединено от 32113.pts-1.focal]
Это указывает на то, что предыдущий идентификатор сессии Screen составляет 32113. Вы можете завершить сеанс SSH и даже выключить устройство. Не переживайте, процесс импорта OSM продолжает выполняться. Когда вам понадобится вернуться и оценить прогресс импорта, подключитесь к своему серверу через SSH и введите следующую команду для получения идентификатора предыдущей сессии Screen.
screen - ls
Существует экран: 32113.pts-1.focal (05/19/2020 03:45:29 PM) (Отсоединено) 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.
Диагностика и решение проблем.
В случае возникновения следующей ошибки при загрузке данных карты из файла PBF,
PBF ошибка: недопустимый размер заголовка Blob (> max_blob_header_size)
Скорее всего, причина в повреждении вашего файла PBF. Проверьте его md5sum следующим образом.
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 на ваше фактическое доменное имя. Не забудьте настроить DNS A запись.
Сохраните файл и закройте его. Активируйте этот виртуальный хост.
sudo a2ensite tileserver_site.conf
Чтобы изменения начали действовать, перезапустите Apache.
sudo systemctl restart apache2
Демон рендеринга будет запущен автоматически, что можно наблюдать с помощью:
systemctl status renderd
● renderd.service — это демон, отвечающий за рендеринг тайлов карт с использованием mapnik. Статус: загружен (/lib/systemd/system/renderd.service; активирован; включена предустановленная настройка вендора) Активен:работает активно с Вс 2022-08-21 14:35:51 CEST; 1 мин 50 сек назад Документы: man:renderd Основной PID: 74593 (renderd) Задачи: 15 (лимит: 72256) Память: 46.4M CPU: 2.143s CGroup: /system. slice/renderd.service └─74593 /usr/bin/renderd - f
Создание таблицы стилей Mapnik
Установите все необходимые модули.
sudo apt install - y curl unzip gdal-bin mapnik-utils libmapnik-dev python3-pip
Кроме того, требуется установить nodejs и npm из основного репозитория, используя следующие команды.
sudo apt-get install - y nodejs npm
После этого установите пакет 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
INFO:root:Начало загрузки внешних данных в базу данных INFO:root:Проверка таблицы simplified_water_polygons INFO:root: Загрузка завершена (23715086 байт) INFO:root: Распаковка файла INFO:root: Импорт в базу данных INFO:root: Импорт завершен INFO:root:Проверка таблицы water_polygons INFO:root: Загрузка завершена (810110834 байт) INFO:root: Распаковка файла INFO:root: Импорт в базу данных INFO:root: Импорт завершен INFO:root:Проверка таблицы icesheet_polygons INFO:root: Загрузка завершена (52620984 байт) INFO:root: Распаковка файла INFO:root: Импорт в базу данных INFO:root: Импорт завершен INFO:root:Проверка таблицы icesheet_outlines INFO:root: Загрузка завершена (53286106 байт) INFO:root: Распаковка файла INFO:root: Импорт в базу данных INFO:root: Импорт завершен INFO:root:Проверка таблицы ne_110m_admin_0_boundary_lines_land INFO:root: Загрузка завершена (57325 байт) INFO:root: Распаковка файла INFO:root: Импорт в базу данных INFO:root: Импорт завершен
Если вы получили сообщение об ошибке при выполнении предыдущей команды, это может указывать на проблемы с DNS. Рекомендуется подождать некоторое время и повторно запустить Python-скрипт.
Не удалось установить новое соединение: [Errno -3] Временный сбой в разрешении имени
Теперь с помощью компилятора таблиц стилей карты carto создайте таблицу стилей XML для Mapnik.
carto project. mml > style. xml
Если возникают указанные ниже предупреждения, их можно игнорировать.
Предупреждение: style/admin. mss:64:6 Стили не соответствуют селектору слоя #admin-low-zoom. Предупреждение: style/admin. mss:59:6 Стили не соответствуют селектору слоя #admin-low-zoom. Предупреждение: style/admin. mss:55:6 Стили не соответствуют селектору слоя #admin-low-zoom. Предупреждение: style/admin. mss:51:6 Стили не соответствуют селектору слоя #admin-low-zoom. Предупреждение: style/admin. mss:27:19 Стили не соответствуют селектору слоя #admin-low-zoom. Предупреждение: style/admin. mss:26:19 Стили не соответствуют селектору слоя #admin-low-zoom.
Выдайте пользователю osm все права на базу данных gis.
psql - c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" - d gis
Выйдите из учётной записи postgres.
exit
Установите шрифты.
Установите шрифты формата TrueType.
sudo apt install ttf-dejavu
Для отображения символов, не относящихся к латинице, необходимо установить указанные пакеты.
sudo apt install fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-hinted fonts-noto-unhinted
Конфигурация 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 поддерживает максимальный зум до 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 сервер плиток.

Если вы активировали брандмауэр 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 и поместите их в каталог вашего веб-сервера.
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 файлы с сайта leftletjs.com и разместить их в корневой директории вашего веб-проекта.
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

Первоначальная прорисовка плиток.
Предварительная отрисовка тайлов может сократить время загрузки карты в веб-браузере по сравнению с отрисовкой на лету. Для выполнения предварительной отрисовки используйте команду 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
Для отрисовки тайлов карты в фоновом режиме добавьте символ & в конце строки.
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 до 8 x 8 плитки renderd[20838]: ОТЛАДКА: ПЛИТКА завершена default 12 1008-1015 3984-3991 за 0.799 секунд renderd[20838]: ОТЛАДКА: Отправка команды отрисовки (3 default 12/1008/3984) с версией протокола 2 на fd 18 renderd[20838]: ОТЛАДКА: Получен входящий запрос с версией протокола 2 renderd[20838]: ОТЛАДКА: Получена команда RenderBulk fd(18) xml(default), z(12), x(1008), y(4064), mime(image/png), options() renderd[20838]: ОТЛАДКА: ЗВЕЗДА

Если в адресной строке 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 Referer.
По умолчанию любой пользователь может применять OpenLayer или Leaflet для разработки интерактивной карты с использованием URL-адреса вашего сервера тайлов. Чтобы настроить ограничения доступа к вашему серверу тайлов, необходимо внести изменения в файл виртуального хоста Apache.
sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf
Включите следующие строки в теги.
Представленный код осуществляет проверку на наличие в заголовке HTTP referer вашего домена. Если его там нет, доступ к каталогу /osm будет закрыт.
Необходимо просмотреть журнал 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
С помощью git загрузите обновленные таблицы стилей CartoCSS в папку пользователя osm на вашем компьютере.
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
Теперь необходимо разработать стилизацию 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 22.04. Возможно, вам также будет интересно настроить сервер геокодирования Nominatim, чтобы добавить возможность поиска адресов.
- Установка и конфигурация сервера геокодирования Nominatim на Ubuntu 22.04.
Если вам понравился этот пост, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать ещё больше полезных советов и рекомендаций.

