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

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

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

  • software:linux_server:tile_map_server_worl_20.04.4

    OSM The Eurasia Ubuntu 20.04

    Тайл-сервер является основным инструментом для генерации и предоставления тайлов пользователям в мире OpenStreetMap. Это набор программ и библиотек, позволяющий эффективно обрабатывать географические данные и создавать картографические тайлы, представляющие собой небольшие изображения карты для отображения на веб-сайтах или мобильных приложениях. Важно понимать, что существует несколько различных конфигураций тайл-серверов, каждая из которых имеет свои плюсы и минусы.
    Руководство по запуску стандартного тайл-сервера, аналогичного тому, используемому на серверах OpenStreetMap.org, может быть полезным для тех, кто только начинает знакомиться с этой областью. Обычно такие инструкции включают в себя установку необходимого программного обеспечения, настройку базы данных геоданных, настройку веб-сервера и самого тайл-сервера, а также запуск и тестирование процесса генерации тайлов.

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

    Введение

    В данном руководстве установка программного обеспечения производиться на оборудование следующей конфигурации:

    Конфигурация вашего оборудавания будет соответственно отличаться, но это так-же будет работать, заняв больше времени при установке и рендере карт на устройстве с минимальными параметрами:

    • CPU > 4 ядер
    • RAM > 12Gb
    • HDD > 1Tb

    Все ниже написанное относиться к Ubuntu Server 20.04 (Focal Fossa) и протестировано в августе 2024 года.

    :&1: Примечание: В этом руководстве многое загружается с альтернативных, а не с официальных зеркал, по причине скорости загрузки и неизменности файлов в репозитории для данного руководства.

    Общая теория

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

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

    Postgresql/postgis - базы данных. Mod_tile — это модуль http сервера apache, который обслуживает кэшированные тайлы и решает, какие тайлы нуждаются в повторном рендеринге — либо потому, что они еще не кэшированы, либо потому, что они устарели. Mapnik — это программная библиотека, которая осуществляет реальный рендеринг с использованием открытого рендеринга.

    :&2: Предполагается, что вы запускаете все от пользователя без регистрации root через «sudo». Имя пользователя без root, повторяемое по умолчанию, — «eva». Если вы указываете иного пользователя, то вам необходимо будет заменить во всех командах на свое имя и добавить его в группу пользователей, которые могут использовать sudo для получения root-прав. Из вашей обычной учетной записи пользователя без регистрации root.

    :&2: Общая последовательнось действий:

    • Устанавливаем и обновляем Ubuntu Server
    • Устанавливаем основное и дополнительное ПО
    • Загружаем 6 файлов карт
    • Объеденяем 3 файла и загружаем в базу
    • Настраиваем веб-сервер
    • Производим первый рендер
    • Догружаем в базу дополнительный файл карты
    • Проверяем работоспособность сервера
    • Удаляем все лишнее, объединяем и загружаем в базу данных файл Евразии

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

    • Устанавливаем и обновляем Ubuntu

    • Всегда полезно обновлять программное обеспечение сервера перед выполнением какой-либо серьезной работы на сервере. Войдем на сервер через SSH и выполните следующую команду.
    sudo apt --yes update; sudo apt --yes upgrade -y

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

    • Итак, приступим:
    sudo apt --yes install screen libboost-all-dev git tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev libgeos-dev libgeos++-dev libpq-dev libbz2-dev libproj-dev munin-node munin protobuf-c-compiler libfreetype6-dev libtiff5-dev libicu-dev libgdal-dev libcairo2-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev liblua5.2-dev ttf-unifont lua5.1 liblua5.1-0-dev

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

    • В Ubuntu есть предварительно упакованные версии как postgis, так и postgresql, поэтому их можно просто установить через диспетчер пакетов Ubuntu.
    sudo apt --yes install postgresql postgresql-contrib postgis postgresql-12-postgis-3 postgresql-12-postgis-3-scripts

    • Здесь «postgresql» — это база данных, в которой мы собираемся хранить данные карты, а «postgis» добавляет к ней дополнительную графическую поддержку.
    • Перезапускаем postgresql
    sudo service postgresql restart

    • Проверяем работу postgresql
    pg_isready

    • Создаем базу данных postgis. По умолчанию в различных программах предполагается, что база данных называется gis, и тут мы будем использовать то же соглашение, хотя это и не обязательно. Укажите/замените «свое имя» пользователя вместо пользователя «eva», где это используется ниже. Это должно быть имя пользователя, которое будет отображать карты с помощью Mapnik.
    sudo -u postgres -i

    • Создадим пользователя («eva»-пример имени пользователя для данного руководства)
    createuser eva

    • Создадим базу данных gis с кодировкой UTF8
    createdb -E UTF8 -O eva gis

    • Продолжая работать как пользователь «postgres», настройте PostGIS в PostgreSQL (опять же, меняя имя пользователя на «eva» на «свое» имя пользователя ниже):
    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 eva;
    ALTER TABLE spatial_ref_sys OWNER TO eva;



    (ответ CREATE EXTENSION)
    (ответ CREATE EXTENSION)
    (ответ ALTER TABLE)
    (ответ ALTER TABLE)

    \q

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

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

    sudo passwd eva

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

    Установка osm2pgsql

    • Далее мы установим osm2pgsql:
    sudo apt install osm2pgsql

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

    Mapnik

    • Далее мы установим Mapnik, используя версию по умолчанию в Ubuntu 20.04:
    sudo apt --yes install autoconf apache2-dev libtool libxml2-dev libbz2-dev libgeos-dev libgeos++-dev libproj-dev gdal-bin libmapnik-dev mapnik-utils python3-mapnik python3-psycopg2 python3-yaml

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

    import mapnik

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

    • выход

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

    • Далее мы установим 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

    • Клонируем репозиторий mod_tile

    :&1: Примечание: В этом руководстве mod_tile загружается с альтернативных, а не с официальных зеркал (https://github.com/SomeoneElseOSM/mod_tile.git), по причине неизменности файлов в репозитории для данного руководства.

    git clone -b switch2osm https://git.wwoss.ru/root/mod_tile.git

    • перейдя в каталог mod_tile
    cd 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/eva/src/mod_tile'»

    sudo make install

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

    sudo make install-mod_tile

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

    sudo ldconfig

    • (без ответа)

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

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

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

    :&1: Примечание: В этом руководстве openstreetmap-carto загружается с альтернативных, а не с официальных зеркал (https://github.com/gravitystorm/openstreetmap-carto), по причине неизменности файлов openstreetmap-carto в репозитории для данного руководства.

    git clone https://git.wwoss.ru/root/openstreetmap-carto.git
    • клонируем репозитарий

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

    • установим подходящую версию компилятора «carto».
    sudo apt --yes install npm

    • размер в 600mb, т.ч. перекур
    sudo npm install -g carto

    • Проверим версию программы
    carto -v
    • Это должно ответить номером версии, которая должна быть не меньше: 1.2.0

    • преобразуем проект carto во что-то, понятное Mapnik:
    carto project.mml > mapnik.xml

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

    :&2: Примечание: все предупреждения
    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

    • на странице зеркала загрузки https://wwoss.ru/openstreetmap/ выбираем нужную нам карту для и копируем ее ссылку

    :&1: Примечание: В этом руководстве файлы «.osm.pbf» загружается с альтернативных, а не с официальных зеркал (https://download.geofabrik.de/), по причине скорости загрузки с данного репозитория для данного руководства.
    :&2: Последовательность: Сейчас мы загрузим 3 небольшие карты (georgia, moldova и azerbaijan), произведем их слияние (для понимания и наглядного примера слияния) и с ними продолжим установку и настройку сервера. Так-же загрузим небольшую карту (andorra) для примера дозагрузки карт в базу и конечно карты Europe (28.9 GB) и Asia (13.1 GB). Europe и Asia поставим на слияние и загрузим в базу в конце статьи, на уже подготовленный нами и проверенный (рабочий) сервер.

    wget https://wwoss.ru/openstreetmap/europe/europe-sub-region/georgia-latest.osm.pbf
    wget https://wwoss.ru/openstreetmap/europe/europe-sub-region/moldova-latest.osm.pbf
    wget https://wwoss.ru/openstreetmap/asia/asia-sub-region/azerbaijan-latest.osm.pbf
    
    wget https://wwoss.ru/openstreetmap/europe/europe-sub-region/andorra-latest.osm.pbf
    
    wget https://wwoss.ru/openstreetmap/europe/europe-latest.osm.pbf
    wget https://wwoss.ru/openstreetmap/asia/asia-latest.osm.pbf

    • карты занимают место размером примерно 40Gb, процесс не быстрый (минут 20..), идем гулять с собачкой…


    • Произведем слияние карт (georgia, moldova и azerbaijan) для наглядного примера и понимани, как это работает.
    • Установим osmctools
    sudo apt install osmctools

    • Используем Osmconvert и объединим georgia с moldova в один pbf файл с названием для примера «new-latest»:
    cd ~/data
    osmconvert georgia-latest.osm.pbf --out-o5m | osmconvert - moldova-latest.osm.pbf -o=new-latest.osm.pbf

    • Как мы можем видеть, у нас получился новый файл карты с названием new-latest.osm.pbf размером 147Mb.

    • А теперь файл карты azerbaijan объединим с нашим вновь созданным файлом new-latest
    osmconvert azerbaijan-latest.osm.pbf --out-o5m | osmconvert - new-latest.osm.pbf -o=new.osm.pbf

    • Как мы можем видеть, у нас получился новый файл карты с названием «new» (new.osm.pbf) размером 185Mb. Именно его мы на данном этапе и будем загружать в базу данных.

    • Следующая команда вставит загруженные ранее данные new.osm.pbf в базу данных. Этот шаг очень интенсивно использует дисковый ввод-вывод; импорт нашего примера не займет много времени, в отличие от загрузки Europe и Asia, где будет использованно несколько дней или недель в зависимости от аппаратного обеспечения и это мы сделаем в конце этой статьи.
    cd ~/data
    osm2pgsql -d gis --create --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 64000 --number-processes 8 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/new.osm.pbf


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


    :&2: Дополнение: Откроем второе окно программы Putty и поставим слияник карт Europe и Asia, чтобы к концу статьи у нас уже был объедененный файл «eurasia.osm.pbf»

    cd ~/data
    osmconvert europe-latest.osm.pbf --out-o5m | osmconvert - asia-latest.osm.pbf -o=eurasia.osm.pbf

    Догрузка карт в базу данных

    :&9: Внимание!: Этот шаг выполняеся только в случае необходимости дозагрузки в готовую базу данных дополнительных файлов, в нашем случае сейчас пропустим этот подраздел, перейдем в радел "Создание индексов" и вернемся сюда в конце статьи при уже настроенном сервере. (этот шаг указан в этом разделе т.к команды эдинтичные с разницей в способе загрузки (--create/--append)).

    • Следующая команда загрузит файл карты «andorra» в уже существующую базу данных.
    cd ~/data
    osm2pgsql -d gis --append --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 64000 --number-processes 8 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/andorra-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/planet-latest.osm.pbf
    • Место сохранения и файл данных для загрузки.
    • смотрим монитор ресурсов Synology NAS

    • Команда загрузки объедененных 3х файлов карт в единый файл new.osm.pbf

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

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

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

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

    • запускаем команду создание индексов
    scripts/get-external-data.py

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

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

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

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

    Шрифты

    • Переходим в каталог openstreetmap-carto в каталоге src
    cd ~/src/openstreetmap-carto/

    • и собственно загружаем шрифты
    scripts/get-fonts.sh

    • Процесс займет примерно 6 минут

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

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

    • Отрываем с помощью текстового редактора nano файл конфигурации для «render» — «/usr/local/etc/renderd.conf»
    sudo nano /usr/local/etc/renderd.conf
    • редактируем строку XML=/home/renderaccount/src/openstreetmap-carto/mapnik.xml меняя renderaccount на имя своего пользователя (в нашем случае это - eva)

    • нажимаем последовательно :&ctrl+o: для сохранения файла
    • нажимаем :&enter: для подтверждения сохранения
    • нажимаем последовательно :&ctrl+x: для выхода из редактора

    Настройка Apache

    • создаем каталог mod_tile в директории /var/lib/ нашего сервера
    sudo mkdir /var/lib/mod_tile

    • задаем права пользователя для этого каталога
    sudo chown eva /var/lib/mod_tile

    • создаем каталог renderd
    sudo mkdir /var/run/renderd

    • задаем права пользователя для этой папки
    sudo chown eva /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

    • Вставляем нижеприведенную строку в тело файла (в нашем случае это пустой файл)
    LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so

    • нажимаем последовательно :&ctrl+o: для сохранения файла
    • нажимаем :&enter: для подтверждения сохранения
    • нажимаем последовательно :&ctrl+x: для выхода из редактора

    • выполняем команду
    sudo a2enconf mod_tile

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

    • и сразу же перезапустим Apache
    systemctl reload apache2

    • сообщаем Apache о «renderd»
    • открываем в редакторе nano файл 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

    • нажимаем последовательно :&ctrl+o: для сохранения файла
    • нажимаем :&enter: для подтверждения сохранения
    • нажимаем последовательно :&ctrl+x: для выхода из редактора

    • Снова перезагружаем apache:
    service apache2 reload

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

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

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

    • Запустим renderd, чтобы попытаться отрендерить некоторые плитки. Сначала мы запустим его на переднем плане, чтобы видеть любые ошибки по мере их возникновения:
    sudo -u 'eva' renderd -f -c /usr/local/etc/renderd.conf

    • Эта команда отобразит рендер карты в окне консоли примерно следующее

    • Данное окно с плиткой говорит нам о том, что мы сделали все верно и наш сервер правильно работает. Загрузим файл просмотра плиток, разорхивируем и откроем его сначала в текстовом редакторе и изменим ip-адрес сервера на наш (в нашем примере 192.168.1.132).

    • Сохраним и откроем этот файл в веб-браузере

    • Кнопками «+» и «-» приблизим район грузии, наблюдая в окне консоли как работает рендер

    • Мы видим на карте отображение 3х государств (georgia, moldova и azerbaijan), которые мы объеденили в один файл в разделе Загрузка данных. Остановим ренден и загрузим небольшую карту «andorra», размером 2Mb в существующую карту используя команду (см. описание в разделе Догрузка карт в базу данных)
    • Команда остановки работающего процесса CTRL+C, далее останавливаем рендер
    systemctl stop renderd

    • Переходим в каталог ~/data и запускаем загрузку файла карты «andorra»
    cd ~/data
    osm2pgsql -d gis --append --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 64000 --number-processes 8 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/andorra-latest.osm.pbf

    • Процесс догрузки карт очень медленный, но это не важно когда запускаешь работу командой на сервере и он сам все делает, а пока за пару минут мы загрузили маленькую карту. Снова запустим рендер и проверим карту на наличие нового государства на карте.
    sudo -u 'eva' renderd -f -c /usr/local/etc/renderd.conf
    • В окне веб-браузера найдем наше новое государство. Т.к. оно очень маленькое, то искать его будем в строке браузера по координатам плиток «#7/39.428/1.725» (в меньших масштабах такие маленькие государства не отображаютя, а мы его взяли для примера догрузки)

    :&2: Примечание:Иногда рендер идет с командой, т.е. без sudo -u 'eva'

    renderd -f -c /usr/local/etc/renderd.conf
    • Убидившись в работоспособности нашего сервера, научившись соединять файлы карт, загружать новые и дополнять в базе данных файлы карт, продолжим настройку сервера и подготовку к загрузке большого файла eurasia.osm.pbf (>40Gb), который к этому моменту уже должен подготовиться.
    • Останавливаем работающий процесс CTRL+C, и далее останавливаем рендер
    systemctl stop renderd

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

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

    • Меняем в строке RUNASUSER renderaccount на ваше имя пользователя (в нашем случае это eva)


    • нажимаем последовательно :&ctrl+o: для сохранения файла
    • нажимаем :&enter: для подтверждения сохранения
    • нажимаем последовательно :&ctrl+x: для выхода из редактора
    • Скопируем отредактированный файл это в системный каталог
    sudo cp ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd

    • Добавим право выполнения для владельца файла командой
    sudo chmod u+x /etc/init.d/renderd

    • Скопирум сервис 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

    • В окне веб-браузера с нашей картой убедимся (приближаем/удаляем и двигаем нашу карту), что рендер работает автоматически, т.е. без нашего участия в консоли.

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

    • Загрузим максимольно приближенный масштаб карты. Если у вам это получилось, значит сервер настроен правильно.

    • Проверяем завершение слияние нашего файла eurasia.osm.pbf (во втором окне консоли должен быть завершенный процесс и ожидание новых команд)

    • Проверим размер файла eurasia.osm.pbf после слияния
    cd ~/data
    ls -n

    • Удалим лишние файлы для освобождения места на сервере (оно нам понадобиться при загрузке eurasia.osm.pbf). На момент написания этой статьи вся карта мира (76Gb) не помещается на SSD диске размером 1,8Tb, учитывайте это, чтобы не получить сюрприз в виде нехватки места на диске.
    sudo rm andorra-latest.osm.pbf
    sudo rm asia-latest.osm.pbf
    sudo rm azerbaijan-latest.osm.pbf
    sudo rm europe-latest.osm.pbf
    sudo rm georgia-latest.osm.pbf
    sudo rm moldova-latest.osm.pbf
    sudo rm new-latest.osm.pbf
    sudo rm new.osm.pbf

    • Перепроверим, что в каталоге остался только файл eurasia.osm.pbf
    ls -n

    • Следующая команда с параметром –create сотрет все данные в нашей базе данных и загрузит файл карты eurasia. Процесс достаточно длительный и займет очень много времени (примерно >15-17 часов, в зависимости от комплектации сервера)
    cd ~/data
    osm2pgsql -d gis --create --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 64000 --number-processes 8 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/eurasia.osm.pbf

    • По окончанию загрузки, мы получим полность рабочий тайловый сервер с картой Евразии. Останется только подключить сервер к сайту и провести предварительный рендер карты, чтобы посетители не ждали загрузку плиток.
    • А пока (процесс Node загрузка >6млнk) взглянем на производительность нашего сервера

    • После 7 часов преобразования данных (parser processing Node: 5287016k 279.3k/s)

    • Получаем загрузку диска в 30% (из каторых 20Gb- это собственно настроенная ОС Ubuntu Server + 41Gb наш файл eurasia.osm.pbf и 490Gb - преобразованные данные нашей карты)

    • Прошли почти сутки, мы видим данные, которые уже загрузились, в кансоле

    • При этом заполнение SSD диска уже составило 811Gb при загрузке карты Евразии размером всего 40Gb

    • Прошли почти 2 сутки (48 часов), мы видим данные в кансоле об окончании загрузки

    • И заполнение SSD диска на 1,3Tb при загрузке карты Евразии размером всего 40Gb

    • При приближении мы видим рендер участков карты которые ранее не были записаны в кэш, а те что уже записаны закрыты серыми плитками, т.к. при первых картах эти участки не были в базе данных.

    • Заходим в наш сервер в каталог /var/lib/mod_tile/ajt и удаляем все каталоги с кешем прошлого рендера

    • Возвращаемся в наш веб-браузер и обновляем страницу. Перед нами карта с названиями государств Европы и Азии, при этом видим, что Африка и Австралия просто белые и без названий, т.к. мы их не грузили в базу данных. Остается провести предварительный рендер, чтобы пользователи не ждали загрузки.

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

    • При этом сервер нагружен на 40% по мониторингу процессора, и почти на максимум работает ssd, учитывая, что установлен AMD EPYC™ в 32 ядра/64 потока и 256gb оперативной памяти.

    • Следующуя команда запустит предварительный рендер всей карты с 0 до 10 уровня в 16 потоков, чтобы пользователи не ждали загрузки тайлов, а использовали уже готовые области карт
    sudo -u eva render_list -a -n 16  --map=ajt --tile-dir=/var/lib/mod_tile/ajt --min-zoom=0 --max-zoom=10 --force
    • Ниже приведены параметры render_list
    Использование: render_list [ОПЦИЯ] ...
      -a, --all визуализировать все плитки в заданном диапазоне масштабирования вместо чтения из STDIN
      -f, --force отображать плитки, даже если они кажутся текущими
      -m, --map=MAP отображает тайлы на этой карте (по умолчанию «по умолчанию»)
      -l, --max-load=ЗАГРУЗИТЬ спящий режим, если нагрузка настолько высока (по умолчанию 16)
      -s, --socket=SOCKET имя доменного сокета unix для связи с renderd
      -n, --num-threads=N количество параллельных потоков запросов (по умолчанию 1)
      -t, --tile-dir Каталог тайлового кэша (по умолчанию «/var/lib/mod_tile»)
      -z, --min-zoom=Ввод фильтра ZOOM для рендеринга только тех фрагментов, которые больше или равны этому уровню масштабирования (по умолчанию – 0)
      -Z, --max-zoom=Ввод фильтра ZOOM для рендеринга только плиток, меньших или равных этому уровню масштабирования (по умолчанию — 20)
    Если вы используете --all, вы можете ограничить диапазон плиток, добавив следующие параметры:
      -x, --min-x=X минимальная координата X плитки
      -X, --max-x=X максимальная координата X тайла
      -y, --min-y=Y минимальная координата Y тайла
      -Y, --max-y=Y максимальная координата тайла Y
    Без --all отправить список тайлов для рендеринга из STDIN в формате:
      Х Y Я
    например
      0 0 1
      0 1 1
      1 0 1
      1 1 1
    Вышеупомянутое приведет к отображению всех 4 плиток при масштабировании 1.

    Дополнения и Файлы

    Только авторизованные участники могут оставлять комментарии.
    software/linux_server/tile_map_server_worl_20.04.4.txt · Последнее изменение: 2024/09/04 13:43 — vladpolskiy