Инструменты пользователя

Инструменты сайта


software:linux_server:tile_map_server_22.04.4

Это старая версия документа!


OSM Tile Server Ubuntu 24.04

Введение

Установка производиться на устройство

<color #7092be>Все ниже написанное относиться к Ubuntu Server 24.04 (Noble Numbat) и протестированы в августе 2024 года.</color>

Общая теория

<color #7092be>Tile Server OSM</color> представляет собой набор программ и библиотек, которые работают вместе для создания тайлового (плиточного) сервера. Он состоит из 5 основных компонентов:

  • mod_tile
  • renderd
  • mapnik
  • osm2pgsql
  • postgresql/postgis

Postgresql/postgis - базы данных. Mod_tile — это модуль apache, который обслуживает кэшированные тайлы и решает, какие тайлы нуждаются в повторном рендеринге — либо потому, что они еще не кэшированы, либо потому, что они устарели. Mapnik — это программная библиотека, которая осуществляет реальный рендеринг с использованием открытого рендеринга.
<color #7092be>Предполагается, что вы запускаете все от пользователя без регистрации root через «sudo». Имя пользователя без root, повторяемое по умолчанию, — «alisa». Если вы указываете иного пользователя, то вам необходимо будет заменить во всех командах на свое имя и добавить его в группу пользователей, которые могут использовать sudo для получения root-прав. Из вашей обычной учетной записи пользователя без регистрации root.</color>

Обновление программного обеспечения

Устанавливаем и обновляем Ubuntu Всегда полезно обновлять программное обеспечение сервера перед выполнением какой-либо серьезной работы на сервере. Войдите на сервер через SSH и выполните следующую команду.

sudo apt --yes update; sudo apt --yes upgrade -y

Установка необходимых библиотек

Итак, приступим:

sudo apt --yes install screen locate git tar unzip wget bzip2 lua5.1 gdal-bin npm node-carto net-tools curl

Процесс достаточно продолжительный и можно попить кофейку…
Установка необязытельных, но рекомендованных openstreetmap-carto элементов

sudo apt --yes install ca-certificates gnupg build-essential clang nodejs fonts-hanazono fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted

Установка postgresql/postgis

В Ubuntu есть предварительно упакованные версии как postgis, так и postgresql, поэтому их можно просто установить через диспетчер пакетов Ubuntu. Проверим подходящую версию на странице пакета postgresql в Ubuntu

sudo apt --yes install postgresql postgresql-contrib postgis postgresql-16-postgis-3 postgresql-16-postgis-3-scripts


Здесь «postgresql» — это база данных, в которой мы собираемся хранить данные карты, а «postgis» добавляет к ней дополнительную графическую поддержку. У команды apt параметр –yes отвечает за автоматические подстановки подтверждения ДА при установке. Проверим список установленных пакетов postgres

dpkg -l | grep postgres



Примечание! Для полного удаления воспользуйтесь командой

sudo apt-get --purge --yes remove postgresql postgresql-doc postgresql-common postgresql-16  postgresql-client  postgresql-client-16 postgresql-client-common postgresql-common  postgresql-contrib postgresql-contrib-16 postgresql-postgis-scripts postgresql-16-postgis-3-scripts  

Перезапускаем postgresql

sudo /etc/init.d/postgresql restart

Проверим статус работы postgresql

sudo /etc/init.d/postgresql status

Создаем базу данных postgis. По умолчанию в различных программах предполагается, что база данных называется gis, и тут мы будем использовать то же соглашение, хотя это и не обязательно. Замените свое имя пользователя вместо alisa, где это используется ниже. Это должно быть имя пользователя, которое будет отображать карты с помощью Mapnik.

sudo -u postgres -i

createuser alisa 

если ошибки нет, то продолжаем установку

Если Ошибка


перезапускаем postgresql

/etc/init.d/postgresql restart


добавляем пользователя

createuser alisa


проверяем

pg_isready


ответ «/var/run/postgresql:5432 - accepting connections»

Продолжаем установку

createdb -E UTF8 -O alisa gis


Продолжая работать как пользователь «postgres», настройте PostGIS в б PostgreSQL (опять же, меняя alisa на свое имя пользователя ниже):

psql


(ответ «postgres=#»)

\c gis


(ответ: “You are now connected to database ‘gis’ as user ‘postgres’”.)

CREATE EXTENSION postgis;
CREATE EXTENSION hstore;
ALTER TABLE geometry_columns OWNER TO alisa;
ALTER TABLE spatial_ref_sys OWNER TO alisa;


ответ:
CREATE EXTENSION
CREATE EXTENSION
ALTER TABLE
ALTER TABLE

\q


(выход из psql и приглашение к Linux)

exit


(это вернет нас к пользователю, которым мы были до того, как сделали «sudo -u postgres -i» выше)
Если вы еще не создали пользователя, создайте пользователя Unix и для этого пользователя, выбрав пароль при появлении запроса:

sudo useradd -m alisa

sudo passwd alisa


Опять же, выше замените “alisa” на имя пользователя без регистрации root, которого вы выбрали.

Установка osm2pgsql

Далее мы установим osm2pgsql:

sudo apt --yes install osm2pgsql


Ошибок обычно быть не должно

Mapnik и python3

Далее мы установим Mapnik python3, используя версию по умолчанию в Ubuntu 24.04:

sudo apt --yes install mapnik-utils python3-mapnik python3-psycopg2 python3-yaml 


Проверим правильность установки Mapnik:

python3

import mapnik


(Ответ: »> и без ошибок, то библиотека Mapnik была найдена Python.)

quit()


выход

Установка Apache, mod_tile и render

  • Далее мы установим Apache, mod_tile и renderd. «mod_tile» — это модуль Apache, который обрабатывает запросы на тайлы; «render» — это демон, который фактически отображает тайлы, когда «mod_tile» их запрашивает. Мы будем использовать ветку «switch2osm»
  • https://github.com/SomeoneElseOSM/mod_tile, которая сама является ответвлением
  • https://github.com/openstreetmap/mod_tile, но модифицирована для поддержки Ubuntu 20.04 и с пара других изменений для работы на стандартном сервере Ubuntu, а не на одном из серверов рендеринга OSM.

Установка пакетов

В репозитории Ubuntu по умолчанию нет пакетов mod_tileи renderd, но мы можем установить их из OSM PPA.

sudo apt install software-properties-common
sudo add-apt-repository ppa:osmadmins/ppa

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

sudo apt --yes install apache2 apache2-dev  libapache2-mod-tile renderd 

Включим mod-tile модуль.

sudo a2enmod tile

если установили из репозитория, то компиляцию пропускаем

Скомпилируем исходный код mod_tile

Создадим в домашнем каталоге папку src

mkdir ~/src

  • перейдем в эту папку
cd ~/src

  • Обновим установленные пакеты
sudo apt update && sudo apt --yes upgrade

  • Установим зависимости сборки (libmemcached-dev и librados-dev не являются обязательными)
sudo apt --no-install-recommends --yes install \
  apache2 \
  apache2-dev \
  cmake \
  curl \
  g++ \
  gcc \
  git \
  libcairo2-dev \
  libcurl4-openssl-dev \
  libglib2.0-dev \
  libiniparser-dev \
  libmapnik-dev \
  libmemcached-dev \
  librados-dev

  • Загрузим, создадим, протестируем и установим `mod_tile`
export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
rm -rf /tmp/mod_tile_src /tmp/mod_tile_build
mkdir /tmp/mod_tile_src /tmp/mod_tile_build
cd /tmp/mod_tile_src
git clone --depth 1 https://github.com/openstreetmap/mod_tile.git .
cd /tmp/mod_tile_build
cmake -B . -S /tmp/mod_tile_src \
  -DCMAKE_BUILD_TYPE:STRING=Release \
  -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=/var \
  -DCMAKE_INSTALL_PREFIX:PATH=/usr \
  -DCMAKE_INSTALL_RUNSTATEDIR:PATH=/run \
  -DCMAKE_INSTALL_SYSCONFDIR:PATH=/etc \
  -DENABLE_TESTS:BOOL=ON
cmake --build .
ctest
sudo cmake --install . --strip

  • Должно ответить 100% тестом

  • Включить конфигурацию модуля пакета a2enmod
a2enmod tile

  • Запустим сервис
sudo apache2ctl start

  • Перезапустим сервис веб-сервера apache2
sudo service apache2 reload

  • Проверим статус сервиса веб-сервера apache2
sudo systemctl status apache2

Конфигурация таблицы стилей

  • Теперь, когда все необходимое программное обеспечение установлено, вам нужно загрузить и настроить таблицу стилей.
  • Здесь мы будем использовать тот же стиль, что и на «стандартной» карте на веб-сайте openstreetmap.org.

Создадим, если ранее этого не делали каталог src в домашней директории

mkdir ~/src

Перейдем в каталог src

cd ~/src


клонируем репозитарий

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


переходим в каталог openstreetmap-carto

cd openstreetmap-carto


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

sudo apt install npm


размер примерно в 600mb, т.ч. перекур
Скомпилируем «carto»

sudo npm install -g carto

вывод на экран
Тут разработчики просят профинансировать работу с пакетом openstreetmap-carto

npm fund

Далее применяем заплатку, если видим «npm audit fix –force», иначе пропускаем этот раздел и переходим к проверки версии «carto»

npm audit fix --force

npm i --package-lock-only

npm audit fix --force

npm audit fix


Проверим версию пакета «carto»

carto -v


Это должно ответить номером версии, которая должна быть не меньше: 1.2.0

преобразуем проект carto во что-то, понятное Mapnik:

carto project.mml > mapnik.xml


Теперь у вас есть таблица стиля Mapnik XML в /home/alisa/src/openstreetmap-carto/mapnik.xml.
Примечание: все предепреждения
Warning: style/admin.mss:22:18 Styles do not match layer selector #admin-low-zoom.
Warning: style/admin.mss:18:6 Styles do not match layer selector #admin-low-zoom.
Игнорируем

Загрузка данных

в домашнем каталоге создаем папку data

mkdir ~/data


и переходим в эту папку

cd ~/data


на странице загрузки http://download.geofabrik.de/ выбираем нужную нам карту для и копируем с кнопки ее ссылку, процесс не быстрый, идем гулять пол часика с собачкой…
У кого собачки нет, том может для примера загрузить карту Азербайджана размером 32Mb…

wget https://download.geofabrik.de/asia/azerbaijan-latest.osm.pbf

Следующая команда вставит загруженные ранее данные OpenStreetMap в базу данных. Этот шаг очень интенсивно использует дисковый ввод-вывод; импорт всей планеты может занять много часов, дней или недель в зависимости от аппаратного обеспечения.

cd ~/data
osm2pgsql -d gis --create --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 4000 --number-processes 2 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/azerbaijan-latest.osm.pbf

Обратите внимание на параметр -c (–create) при импорте через osm2pgsql. С этим параметром удалится вся существующая информация с таблиц.

osm2pgsql -d gis --append --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 4000 --number-processes 2 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/russia-latest.osm.pbf

Если вам необходимо сделать импорт ещё нескольких стран, то вместо -c указывайте параметр -a (–append).
Командные опции:

  • <color #22b14c>-d gis</color>
  • База данных, с которой нужно работать (раньше gis была по умолчанию, теперь нужно указать).
  • <color #22b14c>–create</color>
  • Загружает данные в пустую базу данных, а не пытается добавить их в существующую (иначе –append).
  • <color #22b14c>–slim</color>
  • osm2pgsql может использовать разные макеты таблиц; «тонкие» таблицы работают для рендеринга.
  • <color #22b14c>-G</color>
  • Определяет, как обрабатываются мультиполигоны.
  • <color #22b14c>–hstore</color>
  • Позволяет тегам, для которых нет явных столбцов базы данных, использоваться для рендеринга.
  • <color #22b14c>–tag-transform-script</color>
  • Определяет сценарий lua, используемый для обработки тегов. Это простой способ обработки тегов OSM до того, как их обработает сам стиль, что значительно упрощает логику стиля.
  • <color #22b14c>-C 4000</color>
  • Выделено 4,0 Гб памяти osm2pgsql для процесса импорта. Если у вас меньше памяти, вы можете попробовать меньшее число, а если процесс импорта завершится из-за нехватки памяти, вам нужно будет попробовать меньшее число или меньший размер карты OSM.
  • <color #22b14c>–number-processes 2</color>
  • Используйте 2 ЦП. Если у вас есть больше доступных ядер, вы можете использовать больше.
  • <color #22b14c>-S</color>
  • Создайте столбцы базы данных в этом файле (на самом деле они не изменились по сравнению с «openstreetmap-carto»)
  • <color #22b14c>~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/russia-latest.osm.pbf</color>
  • Место сохранения и файл данных для загрузки.


Команда загрузки должна завершится чем-то вроде «Osm2pgsql в целом занял 34583 секунд».

Создание индексов

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

переходим в папку openstreetmap-carto

cd ~/src/openstreetmap-carto/

  • запускаем команду создание индексов
psql -d gis -f indexes.sql

  • (ответ: «CREATE INDEX» 15 раз.)

  • заняло примерно несколько минут

Загрузка Shape-файла

  • Shape-файл — векторный формат для хранения объектов, описываемых геометрией и сопутствующими атрибутами.
  • Несмотря на то, что большая часть данных для создания карты, берется из данных OpenStreetMap, загружается не все, некоторые шейп-файлы для таких вещей, как границы стран с малым масштабированием, по-прежнему необходимы. Чтобы загрузить и проиндексировать их:
  • переходим в папку openstreetmap-carto
cd ~/src/openstreetmap-carto/

scripts/get-external-data.py

  • Этот процесс включает в себя загрузку и требует некоторого времени — во время работы на экране мало что освещает. На самом деле он загружает таблица водных полигонов и прочее и заполняет каталог «data» ниже «openstreetmap-carto».

Шрифты

переходим в каталог openstreetmap-carto в папке src

cd ~/src/openstreetmap-carto/


и собственно загружаем шрифты

scripts/get-fonts.sh


процесс занял 6 минут

Настройка веб-сервера

визуализация

Отрываем с помощью текстового редактора nano файл конфигурации для «render» — «sudo nano /etc/renderd.conf»

sudo nano /etc/renderd.conf

Добавляем в конец файла нижеприведенные строки

[ajt]
URI=/hot/
TILEDIR=/var/lib/mod_tile
XML=/home/alisa/src/openstreetmap-carto/mapnik.xml
HOST=localhost
TILESIZE=256
MAXZOOM=20

  • нажимаем последовательно <color #22b14c>CTRL+0</color> , <color #22b14c>ENTER</color> для сохранения и <color #22b14c>CTRL+X</color> для выхода из редактора

Настройка Apache

создаем папку mod_tile

sudo mkdir /var/lib/mod_tile


задаем права пользователя для этой папки

sudo chown alisa /var/lib/mod_tile


создаем папку renderd, если не создавали ранее

sudo mkdir /var/run/renderd


задаем права пользователя для этой папки

sudo chown alisa /var/run/renderd


сообщаем Apache о «mod_tile» редактируя файл mod_tile.conf добавляя следующую строку LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so

sudo nano /etc/apache2/conf-available/mod_tile.conf


  • вставляем строку <color #22b14c>LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so</color> в тело файла (в нашем случае это пустой файл)
  • нажимаем последовательно <color #22b14c>CTRL+0</color> , <color #22b14c>ENTER</color> для сохранения и <color #22b14c>CTRL+X</color> для выхода из редактора

выполняем команду для включения конфигурации mod_tile.

sudo a2enconf mod_tile

  • выполняем сообщение о необходимости перезапуска Apache «systemctl reload apache2», чтобы активировать новую конфигурацию;
sudo systemctl reload apache2

  • сообщаем Apache о «renderd»
  • открываем в редакторе файл 000-default.conf
sudo nano /etc/apache2/sites-available/000-default.conf

  • вставляем следующин строки в тело файла между строками <color #00a2e8>«ServerAdmin»</color> и <color #00a2e8>«DocumentRoot»</color>
LoadTileConfigFile /etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 0
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 30
  • нажимаем последовательно <color #22b14c>CTRL+0</color> , <color #22b14c>ENTER</color> для сохранения и <color #22b14c>CTRL+X</color> для выхода из редактора


Проверим месторасположение файлов /etc/renderd.conf

и /var/run/renderd/renderd.sock

  • запускаем и перезагрузите apache:
sudo service apache2 start

sudo service apache2 reload

  • проверим наш Apache набрав в браузере адрес нашего виртуального сервера (в нашем случае: http://192.168.1.64/)

  • <color #ed1c24>Дальше не продолжаем если не дождались загрузки данных в базу и Создание индексов</color>

Запуск рендера в первый раз

запустим renderd, чтобы попытаться отрендерить некоторые плитки. Сначала мы запустим его на переднем плане, чтобы видеть любые ошибки по мере их возникновения:

sudo -u 'alisa' renderd -f -c /usr/local/etc/renderd.conf

  • Если все это работает, нажмите <color #00a2e8>control-c</color>, чтобы завершить процесс рендеринга переднего плана.
  • <color #ed1c24>при возникновении необходимости остановить renderd</color>
systemctl stop renderd
  • иногда рендер идет с командой, т.е. без sudo -u 'alisa'
renderd -f -c /usr/local/etc/renderd.conf
  • процессор был недолго в шоке
  • на Synology DS720+ такого шока нет и все происходит быстрее в 3-4 раза

  • <color #00a2e8>Не знаю почему, но при наличии папки renderd и прав на неё, система ругается на её отсутствие (проверено при 3х установках на Synology Nas. Повторно выполним эти команды…</color>
  • создаем папку renderd
sudo mkdir /var/run/renderd


задаем права пользователя для этой папки

sudo chown alisa /var/run/renderd


Запуск рендера в фоновом режиме

Далее мы настроим «рендеринг» для работы в фоновом режиме. Отредактируем файл «~/src/mod_tile/debian/renderd.init», чтобы «RUNASUSER» был установлен для учетной записи без имени root, который мы использовали ранее, например «alisa», и скопируем его в системный каталог. откроем файл в редакторе

vi ~/src/mod_tile/debian/renderd.init
  • нажимаем <color #22b14c>i</color> и меняем в строке RUNASUSER <color #22b14c>renderaccount</color> на ваше имя пользователя (в нашем случае это alisa)
  • нажимаем последовательно <color #22b14c>esc</color> , <color #22b14c>shift + :</color> , <color #22b14c>w</color> , <color #22b14c>q</color> , <color #22b14c>!</color> для сохранения и выхода из редактора

  • нажимаем <color #22b14c>enter</color>
  • скопируем это в системный каталог
sudo cp ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd

sudo chmod u+x /etc/init.d/renderd

sudo cp ~/src/mod_tile/debian/renderd.service /lib/systemd/system/

  • Файл «render.service» является служебным файлом «systemd». Используемая здесь версия просто вызывает команды инициализации в старом стиле. Чтобы проверить, что команда запуска работает:
sudo /etc/init.d/renderd start

  • (ответить «Starting renderd (через systemctl): renderd.service».)

  • Чтобы это запускалось автоматически каждый раз:
sudo systemctl enable renderd

Просмотр тайлов (плиток)

для просмотра плитки, используйте html-файл «sample_leaflet.html» в папке «extra» mod_tile или загрузите zip архив с этим файлом внизу страницы. Просто откройте его в веб-браузере на машине, где вы установили тайловый сервер. Если это невозможно, потому что вы устанавливаете на сервер без локального веб-браузера, вы можете отредактировать его, заменив «127.0.0.1» IP-адресом сервера и скопировав его ниже «/var/www/html». Мы запускаем его по сети с указанием IP-адреса виртуального сервера NAS Synology (192.168.1.31)

Пример загрузки карты

  • Начало работы и загрузка 0 level zoom карты России

  • маленькое видео, как за 1 час происходит визуальный рендеринг 9 level zoom карты России на 3,2gb на устройстве Synology Nas DS420+. Стоит перематывать и смотреть загрузку процессора, так как память неизменна в 80%. Уровни с 1 по 4 пишутся в кэш за 15-20 минут… 8 уровень около 30 минут… Ну а 9 на видео.. немногим более часа визуальный рендеринг карты России за 1 час на 9 уровне зума. Напомню что установлена дополнительная планка памяти на 8gb.

  • в принципе, считаю проделанную работу, не плохим результатом! И OSM Tale Server имеет право существовать на устройстве Synology NAS DS 420+ для личного пользования или небольшой группы пользователей личного сервера OSM.
  • Напомню, что данный Ubuntu Tile Server установлен на виртуальную машину Synology VMM на устройстве DS420+, где работает все, что было установлено ранее. Попробую переключить мой личный сайт https://book51.ru/ с картой и слоями на вновь созданный виртуальный сервер.

  • Загрузка Synolody DS420+ при работающем OSM Tile Server на Synology VMM (8gb VMM не дает установить система, поэтому стоит 6gb)

  • Для сравнения аналогичная работа OSM Tile Server на Synology VMM на Synolody DS720+ и загрузка процессора

О 32ядрах и 1tb ssd * 3шт в raid5

Загрузка всей карты с https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf ограниченна пропускной способностью провайдера 12Mb/s - 5 часов. С соседнего сервера по внутренней сети 188Mb/s - 7 минут ограничение в скорости hdd соседнего сервера. Использование парсера PBF Россия в парсере Node при этих же настройка 516,5k/s, заняла 2 часа, то же самое на Synology DS 720+
(Intel Celeron J4125 4*2,70 GHz / 2gb ddr4 + 8gb ddr4 / 2*1tb ssd) показала загрузку процессора в среднем 30-50% при выделенной виртуальной памяти в 8gb, которая занята соответственно на 85% от общего объема в 10gb. Реально используется только 12% озу от выделенных 128Gb, при общем объеме в 256Gb При этом процессор от 9% до 17% Трудятся только ssd

Файлы для загрузки

Карты OSM

Ссылки и литература

Только авторизованные участники могут оставлять комментарии.
software/linux_server/tile_map_server_22.04.4.1722800901.txt.gz · Последнее изменение: 2024/08/04 22:48 — vladpolskiy