Содержание

OSM Tile Server XPE NAS DS 2422+ SSD VMM

Введение

Оборудование

Подготовка оборудавания

После физического монтажа всех комплектующих переходим к настройке сервера.

nvme ssd в качестве тома хранилища

Проверяем диски в DSM В DSM разрешаем подключение по ssh и подключаемся через программу Putty к серверу. Форматируем наши диски и создаем из них массив.

mdadm --create /dev/md5 --level=5 --raid-devices=3 --force /dev/nvme0n1p3 /dev/nvme1n1p3 /dev/nvme2n1p3

См. подробную статью о nvme ssd в качестве тома хранилища на Synology NAS

Общая теория

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

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

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

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

mkdir ~/src


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

cd ~/src

git clone -b switch2osm https://github.com/SomeoneElseOSM/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


(без ответа)

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

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

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




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

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

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

cd ~/src/openstreetmap-carto/

psql -d gis -f indexes.sql

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

cd ~/src/openstreetmap-carto/

scripts/get-external-data.py

Шрифты

переходим в каталог 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

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


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

sudo a2enconf mod_tile

sudo vi /etc/apache2/sites-available/000-default.conf

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

sudo service apache2 reload
sudo service apache2 reload

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

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

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

systemctl stop renderd
renderd -f -c /usr/local/etc/renderd.conf

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

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/

sudo /etc/init.d/renderd start

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)

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

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

Карты OSM

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

Создание тайлового сервера вручную (20.04 LTS)
Ubuntu 20.04 LTS: пользовательская документация
OSM2PGSQL: импортер данных OSM в базу данных PostgreSQL/PostGIS
PostgreSQL: база данных с открытым исходным кодом
Mapnik: отрисовка основного Slippy Map слоя для OSM
OSM Carto: стиль стандартного слоя листов OSM
Mod_tile: передача кэшированных тайлов
Leaflet — библиотека JS для интерактивных карт.
Synology Open Street Map Server