Оборудование
После физического монтажа всех комплектующих переходим к настройке сервера.
Проверяем диски в 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
Подтверждаем
Процесс достаточно продолжительный и можно попить кофейку…
В 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
sudo service postgresql restart
pg_isready
createdb -E UTF8 -O alisa gis
Продолжая работать как пользователь «postgres», настройте PostGIS в б PostgreSQL (опять же, меняя alisa на свое имя пользователя ниже):
psql
\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;
\q
(выход из psql и приглашение к Linux)
exit
(это вернет нас к пользователю, которым мы были до того, как сделали «sudo -u postgres -i» выше)
Если вы еще не создали пользователя, создайте пользователя Unix и для этого пользователя, выбрав пароль при появлении запроса:
sudo useradd -m alisa
sudo passwd alisa
Опять же, выше замените “alisa” на имя пользователя без регистрации root, которого вы выбрали.
Далее мы установим 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()
Создадим в домашнем каталоге папку src
mkdir ~/src
cd ~/src
git clone -b switch2osm https://github.com/SomeoneElseOSM/mod_tile.git
cd 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
cd ~/src/openstreetmap-carto/
scripts/get-external-data.py
переходим в каталог openstreetmap-carto в папке src
cd ~/src/openstreetmap-carto/
scripts/get-fonts.sh
Отрываем с помощью текстового редактора vi файл конфигурации для «render» — «/usr/local/etc/renderd.conf»
sudo vi /usr/local/etc/renderd.conf
создаем папку 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)
Создание тайлового сервера вручную (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