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

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

  • Показать исходный текст
  • История страницы
  • Ссылки сюда
  • Оставить на чай
  • Экспорт в PDF
  • Наверх

  • software:linux_server:tile_map_server_22.04.4

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


    OSM Tile Server Ubuntu 24.04

    Введение

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

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

    Общая теория

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

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

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

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

    Устанавливаем и обновляем 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.

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

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

    mkdir ~/src


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

    cd ~/src

    git clone -b switch2osm https://github.com/SomeoneElseOSM/mod_tile.git

    cd mod_tile

    перейдя в каталог mod_tile

    Запустим скрипт autogen.sh

    ./autogen.sh


    (это должно закончится “autoreconf: Leaving directory ‘.’”.)

    (в предыдущих установках мне приходилось проделывать это 2 раза для создания папки mod_tile в директории src)

    ./configure


    (это должно закончится “config.status: executing libtool commands”)

    make


    Обратите внимание, что здесь некоторые «тревожные» сообщения будут прокручиваться вверх по экрану. Однако это должно заканчиваться на «make[1]: Leaving directory '/home/alisa/src/mod_tile'»

    sudo make install


    (это должно закончиться «make[1]: выход из каталога должно быть '/home/alisa/src/mod_tile'»)

    sudo make install-mod_tile


    (это должно закончиться «chmod 644 /usr/lib/apache2/modules/mod_tile.so»)

    sudo ldconfig


    (без ответа)

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

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

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


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

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

    cd openstreetmap-carto


    установим подходящую версию компилятора «carto».

    sudo apt install npm


    подтверждаем установку «y»

    размер в 600mb, т.ч. перекур

    sudo npm install -g carto

    вывод на экран

    npm fund

    npm audit fix --force

    npm i --package-lock-only

    npm audit fix --force

    npm audit fix

    carto -v


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

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

    carto project.mml > mapnik.xml


    Теперь у вас есть таблица стиля Mapnik XML в /home/alisa/src/openstreetmap-carto/mapnik.xml.

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

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

    mkdir ~/data


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

    cd ~/data


    на странице загрузки http://download.geofabrik.de/ выбираем нужную нам карту для и копируем с кнопки ее ссылку

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


    • карта России размером 3,2Gb, процесс не быстрый, идем гулять пол часика с собачкой…



    У кого собачки нет, том может для примера загрузить карту Азербайджана размером 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/russia-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).
    Командные опции:

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

    Примерный вывод на экран

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

    • Пока идет загрузка карты размером 3,2gb (которая по факту заняла 07 часов 23 минуты), перейдем к разделу Шрифты, открыв второе окно подключения к серверу.

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

    • Начиная с версии v5.3.0 некоторые дополнительные индексы теперь необходимо применять вручную .
    • переходим в папку openstreetmap-carto
    cd ~/src/openstreetmap-carto/

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

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

    • заняло примерно 29 минут с ожидаемой нагрузкой

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

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

    scripts/get-external-data.py

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

    Шрифты

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

    cd ~/src/openstreetmap-carto/


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

    scripts/get-fonts.sh


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

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

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

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

    sudo vi /usr/local/etc/renderd.conf
    • нажимаем i и редактируем строку XML=/home/renderaccount/src/openstreetmap-carto/mapnik.xml меняя renderaccount на имя своего пользователя (в нашем случае это - alisa)
    • нажимаем последовательно esc , shift + : , w , q , ! для сохранения и выхода из редактора

    • нажимаем enter

    Настройка 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


    • нажимаем i и вставляем строку LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so в тело файла (в нашем случае это пустой файл)
    • нажимаем последовательно esc , shift + : , w , q , ! для сохранения и выхода из редактора

    • нажимаем enter

    выполняем команду

    sudo a2enconf mod_tile

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

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

    • вставляем следующие строки между строками «ServerAdmin» и «DocumentRoot»
    LoadTileConfigFile /usr/local/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
    • нажимаем i и вставляем строки в тело файла между строками «ServerAdmin» и «DocumentRoot»
    • нажимаем последовательно esc , shift + : , w , q , ! для сохранения и выхода из редактора

    • нажимаем enter
    • дважды перезагрузите apache:
    sudo service apache2 start

    sudo service apache2 reload

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

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

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

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

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

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

    • Не знаю почему, но при наличии папки renderd и прав на неё, система ругается на её отсутствие (проверено при 3х установках на Synology Nas. Повторно выполним эти команды…
    • создаем папку 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
    • нажимаем i и меняем в строке RUNASUSER renderaccount на ваше имя пользователя (в нашем случае это alisa)
    • нажимаем последовательно esc , shift + : , w , q , ! для сохранения и выхода из редактора

    • нажимаем enter
    • скопируем это в системный каталог
    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.1722780593.txt.gz · Последнее изменение: 2024/08/04 17:09 — vladpolskiy