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

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


software:nas:osm_synology_vmm

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


OSM Tile Server Synology NAS VMM

Введение

  • <color #7092be>Предполагается, что у вас устройство Synology NAS DS220+/DS420+/DS720+/DS920+ c дополнительно установленным модулем оперативной памяти не менее 8gb с настроенной Synology VMM и установленной на виртуальной машине ОС Ubuntu Server 20.04 LTS.</color>
  • Если это не так, то выполните следующие руководства:
  • <color #ed1c24>Установка OpenStreetMap Tile Server на Synology DS (ram < 8gb ddr4) приведет к зависанию устройства и невозможности подключения к нему для восстановления без переустановки системы.</color>
  • Идеальная конфигурация Synology DS720+ (ram 16gb ddr4 / 2*1tb ssd), но и на ram 10gb (2gb+8gb) и 2*2tb wd red hdd - это работает. И первый рендер тайлов происходит без раздражения, впоследствии торможения нет. Установка Tile Server на Synology DS720+ (Intel Celeron J4125 4*2,70 GHz / 2gb ddr4 + 8gb ddr4 / 2*2tb hdd shr 1том) показала загрузку процессора в среднем 10-20% при выделенной виртуальной памяти в 8gb, которая занята соответственно на 90% от общего объема в 10gb.
  • Делаю вывод, что Synology DS420+ (Intel Celeron J4025 2*2,90 GHz / 2gb ddr4 + 8gb ddr4 / 4*3tb hdd shr 1том) процессор будет загружаться при рендере на 40-50%, при учете того, что будет выделено 6gb виртуальной памяти.
  • <color #7092be>Не ставьте автозагрузку виртуальной машины - это позволит вам попасть в DSM при зависании устройства при переполнении памяти.</color>
  • Все ниже написанное относиться к Ubuntu Linux 20.04 LTS (Focal Fossa) и протестированы в августе 2022 года.

Общая теория

  • Tile Server OSM представляет собой набор программ и библиотек, которые работают вместе для создания тайлового (плиточного) сервера. Он состоит из 5 основных компонентов: mod_tile, renderd, mapnik, osm2pgsql и базы данных postgresql/postgis. Mod_tile — это модуль apache, который обслуживает кэшированные тайлы и решает, какие тайлы нуждаются в повторном рендеринге — либо потому, что они еще не кэшированы, либо потому, что они устарели. Mapnik — это программная библиотека, которая осуществляет реальный рендеринг с использованием открытого рендеринга.
  • Предполагается, что вы запускаете все от пользователя без регистрации root через «sudo». Имя пользователя без root, повторяемое по умолчанию, — «alisa». Если вы указываете иного пользователя, то вам необходимо будет заменить во всех командах на свое имя и добавить его в группу пользователей, которые могут использовать sudo для получения root-прав. Из вашей обычной учетной записи пользователя без регистрации root.

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

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

sudo apt install 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 install postgresql postgresql-contrib postgis postgresql-12-postgis-3 postgresql-12-postgis-3-scripts


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

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

sudo -u postgres -i

createuser alisa 


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

Ошибка


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

sudo service postgresql restart


проверяем

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)

CREATE EXTENSION hstore;


(ответ CREATE EXTENSION)

ALTER TABLE geometry_columns OWNER TO alisa;


(ответ ALTER TABLE)

ALTER TABLE spatial_ref_sys OWNER TO alisa;


(ответ ALTER TABLE)

\q


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

exit


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

sudo useradd -m alisa

sudo passwd alisa


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

Установка osm2pgsql

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

sudo apt install osm2pgsql


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

Mapnik

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

sudo apt 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


c подтверждением yes при установке

Проверим правильность установки 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

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


<color #22b14c>Альтернативная ссылка</color>

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

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

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



<color #22b14c>Альтернативная ссылка</color>

git clone https://git.wwoss.ru/root/openstreetmap-carto.git

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

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

cd openstreetmap-carto


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

sudo apt install npm


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

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

sudo npm install -g carto

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



<color #22b14c>Альтернативная ссылка wwoss.ru для всей планеты</color>

wget https://wwoss.ru/openstreetmap/planet-latest/planet-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. С этим параметром удалится вся существующая информация с таблиц.

cd ~/data
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>
  • Место сохранения и файл данных для загрузки.

смотрим монитор ресурсов Synology NAS

  • Команда загрузки должна завершится чем-то вроде «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
  • нажимаем <color #22b14c>i</color> и редактируем строку <color #22b14c>XML=/home/renderaccount/src/openstreetmap-carto/mapnik.xml</color> меняя <color #7092be>renderaccount</color> на имя своего пользователя (в нашем случае это - <color #7092be>alisa</color>)
  • нажимаем последовательно <color #22b14c>esc</color> , <color #22b14c>shift + :</color> , <color #22b14c>w</color> , <color #22b14c>q</color> , <color #22b14c>!</color> для сохранения и выхода из редактора

  • нажимаем <color #22b14c>enter</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 vi /etc/apache2/conf-available/mod_tile.conf


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

  • нажимаем <color #22b14c>enter</color>

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

sudo a2enconf mod_tile

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

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

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

  • нажимаем <color #22b14c>enter</color>
  • дважды перезагрузите apache:
sudo service apache2 reload
sudo service apache2 reload

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

  • <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+ и загрузка процессора

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

Карты OSM

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

Только авторизованные участники могут оставлять комментарии.
software/nas/osm_synology_vmm.1723557729.txt.gz · Последнее изменение: vladpolskiy