======OSM Tile Server Ubuntu 24.04======
=====Введение=====
Установка производиться на устройство
* **[[hardware:motherboard_supermicro_h11ssl-i|Материнская плата Supermicro MBD-H11SSL-I]]**
* **[[hardware:cpu_amd_epyc_7551p_oem|Процессор AMD EPYC™ 7551P OEM]]**
* **[[hardware:m2_ssd_samsung_970_evo_plus|Raid5 массив 1tb SSD M.2 Samsung 970 EVO Plus]]**
* **[[hardware:ddr4_ecc_reg_64gb|256GB DDR4 3200MHz DIMM ECC Reg Micron]]**
* **[[software:linux_server:ubuntu_server|ОС Ubuntu Server 24.04 LTS]]**
**Все ниже написанное относиться к 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
{{:software:linux_server:tile_map_server_22.04.4_0.png?|}}
Всегда полезно обновлять программное обеспечение сервера перед выполнением какой-либо серьезной работы на сервере. Войдите на сервер через SSH и выполните следующую команду.
sudo apt --yes update; sudo apt --yes upgrade -y
{{:software:linux_server:tile_map_server_22.04.4_1.png?|}}
=====Установка необходимых библиотек=====
Итак, приступим:
sudo apt --yes install screen locate git tar unzip wget bzip2 lua5.1 gdal-bin npm node-carto net-tools curl
{{:software:linux_server:tile_map_server_24.04._2.png?|}}
Процесс достаточно продолжительный и можно попить кофейку...\\
Установка необязытельных, но рекомендованных [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/Dockerfile#L11-L12|openstreetmap-carto]] элементов
sudo apt --yes install ca-certificates gnupg build-essential clang nodejs fonts-hanazono fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted
{{:software:linux_server:tile_map_server_24.04._3.png?|}}
=====Установка postgresql/postgis=====
В Ubuntu есть предварительно упакованные версии как postgis, так и postgresql, поэтому их можно просто установить через диспетчер пакетов Ubuntu.
Проверим подходящую версию на странице [[https://packages.ubuntu.com/search?keywords=postgresql-16-postgis-3|пакета postgresql в Ubuntu ]]
{{:software:linux_server:postgresql_16_1.png?|}}
\\
sudo apt --yes install postgresql postgresql-contrib postgis postgresql-16-postgis-3 postgresql-16-postgis-3-scripts
{{:software:linux_server:tile_map_server_24.04._5.png?|}}
\\
Здесь «postgresql» — это база данных, в которой мы собираемся хранить данные карты, а «postgis» добавляет к ней дополнительную графическую поддержку. У команды apt параметр --yes отвечает за автоматические подстановки подтверждения ДА при установке. Проверим список установленных пакетов postgres
dpkg -l | grep postgres
\\
{{:software:linux_server:tile_map_server_24.04._6.png?|}}
\\
Примечание! Для полного удаления воспользуйтесь командой
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
{{:software:linux_server:tile_map_server_24.04._7.png?|}}
Проверим статус работы postgresql
sudo /etc/init.d/postgresql status
{{:software:linux_server:tile_map_server_24.04._8.png?|}}
Создаем базу данных postgis. По умолчанию в различных программах предполагается, что база данных называется gis, и тут мы будем использовать то же соглашение, хотя это и не обязательно. Замените свое имя пользователя вместо alisa, где это используется ниже. Это должно быть имя пользователя, которое будет отображать карты с помощью Mapnik.
sudo -u postgres -i
{{:software:linux_server:tile_map_server_22.04.4_9.png?|}}
createuser alisa
{{:software:linux_server:tile_map_server_24.04._10.png?|}}
если ошибки нет, то продолжаем установку
====Если Ошибка====
{{:software:linux_server:tile_map_server_22.04.4_7.png?|}}
\\
перезапускаем postgresql
/etc/init.d/postgresql restart
{{:software:linux_server:tile_map_server_22.04.4_8.png?|}}
\\
добавляем пользователя
createuser alisa
{{:software:linux_server:tile_map_server_22.04.4_9.png?|}}
\\
проверяем
pg_isready
{{:software:linux_server:tile_map_server_22.04.4_11.png?|}}
\\
ответ "/var/run/postgresql:5432 - accepting connections"
====Продолжаем установку====
createdb -E UTF8 -O alisa gis
{{:software:linux_server:tile_map_server_24.04._12.png?|}}
\\
Продолжая работать как пользователь «postgres», настройте PostGIS в б PostgreSQL (опять же, меняя alisa на свое имя пользователя ниже):
\\
psql
{{:software:linux_server:tile_map_server_24.04._11.png?|}}
\\
(ответ «postgres=#»)
\c gis
{{:software:linux_server:tile_map_server_24.04._13.png?|}}
\\
(ответ: “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;
{{:software:linux_server:tile_map_server_24.04._14.png?|}}
\\
ответ: \\
**CREATE EXTENSION\\
CREATE EXTENSION\\
ALTER TABLE\\
ALTER TABLE**\\
\q
{{:software:linux_server:tile_map_server_24.04._15.png?|}}
\\
(выход из psql и приглашение к Linux)
exit
{{:software:linux_server:tile_map_server_24.04._16.png?|}}
\\
(это вернет нас к пользователю, которым мы были до того, как сделали «sudo -u postgres -i» выше)
\\
Если вы еще не создали пользователя, создайте пользователя Unix и для этого пользователя, выбрав пароль при появлении запроса:
sudo useradd -m alisa
{{:software:linux_server:tile_map_server_24.04._17.png?|}}
sudo passwd alisa
{{:software:linux_server:tile_map_server_24.04._18.png?|}}
\\
Опять же, выше замените “alisa” на имя пользователя без регистрации root, которого вы выбрали.
=====Установка osm2pgsql=====
Далее мы установим osm2pgsql:
sudo apt --yes install osm2pgsql
{{:software:linux_server:tile_map_server_24.04._19.png?|}}
\\
Ошибок обычно быть не должно
{{:software:linux_server:tile_map_server_24.04._20.png?|}}
\\
=====Mapnik и python3=====
Далее мы установим Mapnik python3, используя версию по умолчанию в Ubuntu 24.04:
sudo apt --yes install mapnik-utils python3-mapnik python3-psycopg2 python3-yaml
{{:software:linux_server:tile_map_server_24.04._21.png?|}}
\\
Проверим правильность установки Mapnik:
python3
{{:software:linux_server:tile_map_server_24.04._22.png?|}}
import mapnik
{{:software:linux_server:tile_map_server_24.04._23.png?|}}
\\
(Ответ: >>> и без ошибок, то библиотека Mapnik была найдена Python.)
quit()
{{:software:linux_server:tile_map_server_24.04._24.png?|}}
\\
выход
=====Установка 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.
====Установка пакетов===
В репозитории Ubuntu по умолчанию нет пакетов mod_tileи renderd, но мы можем установить их из OSM PPA.
sudo apt install software-properties-common
sudo add-apt-repository ppa:osmadmins/ppa
{{:software:linux_server:tile_map_server_24.04._25.png?|}}
Нажмем [ENTER] для продолжения.
{{:software:linux_server:tile_map_server_24.04._26.png?|}}
Установим веб-сервер Apache. Конфигурационный файл renderd будет создан в /etc/apache2/conf-available/renderd.conf
sudo apt --yes install apache2 apache2-dev libapache2-mod-tile renderd
{{:software:linux_server:tile_map_server_24.04._28.png?|}}
Включим mod-tile модуль.
sudo a2enmod tile
{{:software:linux_server:tile_map_server_24.04._27.png?|}}
если установили из репозитория, то компиляцию пропускаем
====Скомпилируем исходный код mod_tile====
Создадим в домашнем каталоге папку src
mkdir ~/src
{{:software:linux_server:tile_map_server_24.04._29.png?|}}
* перейдем в эту папку
cd ~/src
{{:software:linux_server:tile_map_server_24.04._30.png?|}}
* Обновим установленные пакеты
sudo apt update && sudo apt --yes upgrade
{{:software:linux_server:tile_map_server_24.04._71.png?|}}
* Установим зависимости сборки (libmemcached-dev и librados-dev не являются обязательными)
sudo apt --no-install-recommends --yes install \
apache2 \
apache2-dev \
cmake \
curl \
g++ \
gcc \
git \
libcairo2-dev \
libcurl4-openssl-dev \
libglib2.0-dev \
libiniparser-dev \
libmapnik-dev \
libmemcached-dev \
librados-dev
{{:software:linux_server:tile_map_server_24.04._72.png?|}}
* Загрузим, создадим, протестируем и установим `mod_tile`
export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
rm -rf /tmp/mod_tile_src /tmp/mod_tile_build
mkdir /tmp/mod_tile_src /tmp/mod_tile_build
cd /tmp/mod_tile_src
git clone --depth 1 https://github.com/openstreetmap/mod_tile.git .
cd /tmp/mod_tile_build
cmake -B . -S /tmp/mod_tile_src \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DCMAKE_INSTALL_LOCALSTATEDIR:PATH=/var \
-DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DCMAKE_INSTALL_RUNSTATEDIR:PATH=/run \
-DCMAKE_INSTALL_SYSCONFDIR:PATH=/etc \
-DENABLE_TESTS:BOOL=ON
cmake --build .
ctest
sudo cmake --install . --strip
{{:software:linux_server:tile_map_server_24.04._73.png?|}}
* Должно ответить 100% тестом
{{:software:linux_server:tile_map_server_24.04._74.png?|}}
* Включить конфигурацию модуля пакета a2enmod
a2enmod tile
{{:software:linux_server:tile_map_server_24.04._75.png?|}}
* Запустим сервис
sudo apache2ctl start
{{:software:linux_server:tile_map_server_24.04._76.png?|}}
* Перезапустим сервис веб-сервера apache2
sudo service apache2 reload
{{:software:linux_server:tile_map_server_24.04._77.png?|}}
* Проверим статус сервиса веб-сервера apache2
sudo systemctl status apache2
{{:software:linux_server:tile_map_server_24.04._78.png?|}}
=====Конфигурация таблицы стилей=====
* Теперь, когда все необходимое программное обеспечение установлено, вам нужно загрузить и настроить таблицу стилей.
* Здесь мы будем использовать тот же стиль, что и на «стандартной» карте на веб-сайте openstreetmap.org.
Создадим, если ранее этого не делали каталог src в домашней директории
mkdir ~/src
{{:software:linux_server:tile_map_server_24.04._29.png?|}}
Перейдем в каталог src
cd ~/src
{{:software:linux_server:tile_map_server_24.04._30.png?|}}
\\
клонируем репозитарий
\\
git clone https://github.com/gravitystorm/openstreetmap-carto
{{:software:linux_server:tile_map_server_24.04._31.png?|}}
\\
переходим в каталог openstreetmap-carto
cd openstreetmap-carto
{{:software:linux_server:tile_map_server_24.04._32.png?|}}
\\
установку подходящей версию компилятора «carto» пропустим, т.к. это сделали на первоночальном этапе загрузки необходимых пакетов.
sudo apt install npm
{{:software:linux_server:tile_map_server_24.04._33.png?|}}
\\
размер примерно в 600mb, т.ч. перекур
\\
Скомпилируем «carto»
sudo npm install -g carto
{{:software:linux_server:tile_map_server_24.04._34.png?|}}
вывод на экран
{{:software:linux_server:tile_map_server_24.04._35.png?|}}
\\
Тут разработчики просят профинансировать работу с пакетом openstreetmap-carto
npm fund
{{:software:linux_server:tile_map_server_24.04._36.png?|}}
Далее применяем заплатку, если видим "npm audit fix --force", иначе пропускаем этот раздел и переходим к проверки версии "carto"
npm audit fix --force
{{:software:linux_server:tile_map_server_22.04.4_57_4.png?|}}
npm i --package-lock-only
{{:software:linux_server:tile_map_server_22.04.4_57_6.png?|}}
npm audit fix --force
{{:software:linux_server:tile_map_server_22.04.4_57_8.png?|}}
npm audit fix
{{:software:linux_server:tile_map_server_22.04.4_57_9.png?|}}
\\
Проверим версию пакета "carto"
carto -v
{{:software:linux_server:tile_map_server_24.04._37.png?|}}
\\
Это должно ответить номером версии, которая должна быть не меньше: 1.2.0
\\
{{:software:linux_server:tile_map_server_24.04._38.png?|}}
\\
преобразуем проект carto во что-то, понятное Mapnik:
carto project.mml > mapnik.xml
{{:software:linux_server:tile_map_server_24.04._39.png?|}}
{{:software:linux_server:tile_map_server_24.04._40.png?|}}
\\
Теперь у вас есть таблица стиля Mapnik XML в /home/alisa/src/openstreetmap-carto/mapnik.xml.\\
**Примечание:** все предепреждения\\
**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.**\\
Игнорируем
\\
{{:software:linux_server:tile_map_server_24.04._41.png?|}}
=====Загрузка данных=====
в домашнем каталоге создаем папку data
mkdir ~/data
{{:software:linux_server:tile_map_server_24.04._42.png?|}}
\\
и переходим в эту папку
cd ~/data
{{:software:linux_server:tile_map_server_24.04._43.png?|}}
\\
на странице загрузки http://download.geofabrik.de/ выбираем нужную нам карту для и копируем с кнопки ее ссылку, процесс не быстрый, идем гулять пол часика с собачкой...
\\
У кого собачки нет, том может для примера загрузить карту Азербайджана размером 32Mb...
wget https://download.geofabrik.de/asia/azerbaijan-latest.osm.pbf
{{:software:linux_server:tile_map_server_24.04._44.png?|}}
Следующая команда вставит загруженные ранее данные 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/azerbaijan-latest.osm.pbf
{{:software:linux_server:tile_map_server_24.04._45.png?|}}
**Обратите внимание на параметр -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).**
{{:software:linux_server:tile_map_server_22.04.4_64_1.png?|}}
\\
Командные опции:
* -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 секунд».
{{:software:linux_server:tile_map_server_24.04._46.png?|}}
=====Создание индексов=====
* Начиная с версии v5.3.0 некоторые дополнительные индексы теперь необходимо применять вручную .
переходим в папку openstreetmap-carto
cd ~/src/openstreetmap-carto/
{{:software:linux_server:tile_map_server_24.04._47.png?|}}
* запускаем команду создание индексов
psql -d gis -f indexes.sql
{{:software:linux_server:tile_map_server_24.04._48.png?|}}
* (ответ: «CREATE INDEX» 15 раз.)
{{:software:linux_server:tile_map_server_24.04._49.png?|}}
* заняло примерно несколько минут
=====Загрузка Shape-файла=====
* Shape-файл — векторный формат для хранения объектов, описываемых геометрией и сопутствующими атрибутами.
* Несмотря на то, что большая часть данных для создания карты, берется из данных OpenStreetMap, загружается не все, некоторые шейп-файлы для таких вещей, как границы стран с малым масштабированием, по-прежнему необходимы. Чтобы загрузить и проиндексировать их:
* переходим в папку openstreetmap-carto
cd ~/src/openstreetmap-carto/
{{:software:linux_server:tile_map_server_24.04._50.png?|}}
scripts/get-external-data.py
{{:software:linux_server:tile_map_server_24.04._51.png?|}}
* Этот процесс включает в себя загрузку и требует некоторого времени — во время работы на экране мало что освещает. На самом деле он загружает таблица водных полигонов и прочее и заполняет каталог «data» ниже «openstreetmap-carto».
{{:software:linux_server:tile_map_server_24.04._52.png?|}}
=====Шрифты=====
переходим в каталог openstreetmap-carto в папке src
cd ~/src/openstreetmap-carto/
{{:software:linux_server:tile_map_server_24.04._53.png?|}}
\\
и собственно загружаем шрифты
scripts/get-fonts.sh
{{:software:linux_server:tile_map_server_24.04._54.png?|}}
\\
процесс занял 6 минут
\\
{{:software:linux_server:tile_map_server_24.04._55.png?|}}
=====Настройка веб-сервера=====
====визуализация====
Отрываем с помощью текстового редактора nano файл конфигурации для «render» — «sudo nano /etc/renderd.conf»
sudo nano /etc/renderd.conf
{{:software:linux_server:tile_map_server_24.04._56.png?|}}
Добавляем в конец файла нижеприведенные строки
[ajt]
URI=/hot/
TILEDIR=/var/lib/mod_tile
XML=/home/alisa/src/openstreetmap-carto/mapnik.xml
HOST=localhost
TILESIZE=256
MAXZOOM=20
{{:software:linux_server:tile_map_server_24.04._57.png?|}}
* нажимаем последовательно **CTRL+0** , **ENTER** для сохранения и **CTRL+X** для выхода из редактора
=====Настройка Apache=====
создаем папку mod_tile
sudo mkdir /var/lib/mod_tile
{{:software:linux_server:tile_map_server_24.04._58.png?|}}
\\
задаем права пользователя для этой папки
sudo chown alisa /var/lib/mod_tile
{{:software:linux_server:tile_map_server_24.04._59.png?|}}
\\
создаем папку renderd, если не создавали ранее
sudo mkdir /var/run/renderd
{{:software:linux_server:tile_map_server_22.04.4_102.png?|}}
\\
задаем права пользователя для этой папки
sudo chown alisa /var/run/renderd
{{:software:linux_server:tile_map_server_22.04.4_103.png?|}}
\\
сообщаем 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
{{:software:linux_server:tile_map_server_24.04._60.png?|}}
\\
* вставляем строку **LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so** в тело файла (в нашем случае это пустой файл)
* нажимаем последовательно **CTRL+0** , **ENTER** для сохранения и **CTRL+X** для выхода из редактора
{{:software:linux_server:tile_map_server_24.04._61.png?|}}
выполняем команду для включения конфигурации mod_tile.
sudo a2enconf mod_tile
{{:software:linux_server:tile_map_server_24.04._62.png?|}}
* выполняем сообщение о необходимости перезапуска Apache «systemctl reload apache2», чтобы активировать новую конфигурацию;
sudo systemctl reload apache2
{{:software:linux_server:tile_map_server_24.04._63.png?|}}
* сообщаем Apache о «renderd»
* открываем в редакторе файл 000-default.conf
sudo nano /etc/apache2/sites-available/000-default.conf
{{:software:linux_server:tile_map_server_24.04._64.png?|}}
* вставляем следующин строки в тело файла между строками «ServerAdmin» и «DocumentRoot»
LoadTileConfigFile /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+0** , **ENTER** для сохранения и **CTRL+X** для выхода из редактора
{{:software:linux_server:tile_map_server_24.04._65.png?|}}
\\
Проверим месторасположение файлов /etc/renderd.conf
\\
{{:software:linux_server:tile_map_server_24.04._66.png?|}}
\\
и /var/run/renderd/renderd.sock
\\
{{:software:linux_server:tile_map_server_24.04._67.png?|}}
* запускаем и перезагрузите apache:
sudo service apache2 start
{{:software:linux_server:tile_map_server_24.04._68.png?|}}
sudo service apache2 reload
{{:software:linux_server:tile_map_server_24.04._69.png?|}}
* проверим наш Apache набрав в браузере адрес нашего виртуального сервера (в нашем случае: http://192.168.1.64/)
{{:software:linux_server:tile_map_server_24.04._70.png?|}}
\\
Перечень команд работы с сервисом рендер
* sudo systemctl start renderd
* sudo systemctl restart renderd
* sudo systemctl enable renderd
* sudo systemctl status renderd
* sudo systemctl stop renderd
* sudo systemctl daemon-reload
\\
Перезапустим и провеим статус сервиса
sudo systemctl daemon-reload
sudo systemctl enable renderd
sudo systemctl restart renderd
sudo systemctl status renderd
{{:software:linux_server:tile_map_server_24.04._79.png?|}}
«Настройки конфигов»
sudo nano /etc/renderd.conf
sudo -u 'alisa' renderd -f -c /etc/renderd.conf
sudo renderd -f -c /etc/renderd.conf
sudo renderd -f
renderd.service
systemctl start renderd.service
systemctl enable renderd.service
systemctl status renderd.service
systemctl status
sudo systemctl start renderd
sudo systemctl restart renderd
sudo systemctl enable renderd
sudo systemctl status renderd
sudo systemctl stop renderd
sudo systemctl daemon-reload
sudo service renderd start
sudo chown alisa /run/renderd/ -R
sudo chown alisa /var/cache/renderd/tiles/ -R
sudo apt install renderd
sudo chown alisa /home/alisa/src/openstreetmap-carto/ -R
sudo chown alisa /home/alisa/src/openstreetmap-carto/mapnik.xml
sudo nano /etc/renderd.conf
[ajt]
URI=/hot/
TILEDIR=/var/lib/mod_tile
XML=/home/alisa/src/openstreetmap-carto/mapnik.xml
HOST=localhost
TILESIZE=256
MAXZOOM=20
sudo nano /etc/apache2/conf-available/mod_tile.conf
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so
sudo nano /etc/apache2/sites-available/000-default.conf
LoadTileConfigFile /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 nano ~/src/mod_tile/debian/renderd.init
sudo nano /usr/lib/systemd/system/renderd.service
[Unit]
Description=Renderd
After=network.target auditd.service
[Service]
Type=forking
ExecStart=/etc/init.d/renderd start
ExecReload=/etc/init.d/renderd restart
ExecStop=/etc/init.d/renderd stop
Environment=G_MESSAGES_DEBUG=all
[Install]
WantedBy=multi-user.target
[Unit]
Description=Daemon that renders map tiles using mapnik
Documentation=man:renderd
After=network.target auditd.service
[Service]
ExecStart=/usr/bin/renderd -f
User=alisa
[Install]
WantedBy=multi-user.target
* Дальше не продолжаем если не дождались загрузки данных в базу и Создание индексов
=====Запуск рендера в первый раз=====
запустим renderd, чтобы попытаться отрендерить некоторые плитки. Сначала мы запустим его на переднем плане, чтобы видеть любые ошибки по мере их возникновения:
sudo -u 'alisa' renderd -f -c /usr/local/etc/renderd.conf
{{:software:nas:osm_420_83.png|}}
* Откройте веб-браузер по адресу: http://yourserveripaddress/hot/0/0/0.png (в нашем случае http://192.168.1.31/hot/0/0/0.png)
{{:software:nas:osm_420_87.png?650|}}
* Если все это работает, нажмите control-c, чтобы завершить процесс рендеринга переднего плана.
* при возникновении необходимости остановить renderd
systemctl stop renderd
* иногда рендер идет с командой, т.е. без sudo -u 'alisa'
renderd -f -c /usr/local/etc/renderd.conf
* процессор был недолго в шоке
* на Synology DS720+ такого шока нет и все происходит быстрее в 3-4 раза
{{:software:nas:osm_420_86.png?650|}}
* Не знаю почему, но при наличии папки renderd и прав на неё, система ругается на её отсутствие (проверено при 3х установках на Synology Nas. Повторно выполним эти команды...
* создаем папку renderd
sudo mkdir /var/run/renderd
{{:software:nas:osm_420_65.png|}}
\\
задаем права пользователя для этой папки
sudo chown alisa /var/run/renderd
{{:software:nas:osm_420_66.png|}}
\\
=====Запуск рендера в фоновом режиме=====
Далее мы настроим «рендеринг» для работы в фоновом режиме. Отредактируем файл «~/src/mod_tile/debian/renderd.init», чтобы «RUNASUSER» был установлен для учетной записи без имени root, который мы использовали ранее, например «alisa», и скопируем его в системный каталог.
откроем файл в редакторе
vi ~/src/mod_tile/debian/renderd.init
* нажимаем **i** и меняем в строке RUNASUSER **renderaccount** на ваше имя пользователя (в нашем случае это alisa)
* нажимаем последовательно **esc** , **shift + :** , **w** , **q** , **!** для сохранения и выхода из редактора
{{:software:nas:osm_420_91.png|}}
* нажимаем **enter**
* скопируем это в системный каталог
sudo cp ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd
{{:software:nas:osm_420_92.png|}}
sudo chmod u+x /etc/init.d/renderd
{{:software:nas:osm_420_93.png|}}
sudo cp ~/src/mod_tile/debian/renderd.service /lib/systemd/system/
{{:software:nas:osm_420_94.png|}}
* Файл «render.service» является служебным файлом «systemd». Используемая здесь версия просто вызывает команды инициализации в старом стиле. Чтобы проверить, что команда запуска работает:
sudo /etc/init.d/renderd start
{{:software:nas:osm_420_95.png|}}
* (ответить «Starting renderd (через systemctl): renderd.service».)
{{:software:nas:osm_420_96.png|}}
* Чтобы это запускалось автоматически каждый раз:
sudo systemctl enable renderd
{{:software:nas:osm_420_97.png|}}
=====Просмотр тайлов (плиток)=====
для просмотра плитки, используйте 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 карты России
{{:software:nas:osm_420_88.png?650|}}
* маленькое видео, как за 1 час происходит визуальный рендеринг 9 level zoom карты России на 3,2gb на устройстве Synology Nas DS420+. Стоит перематывать и смотреть загрузку процессора, так как память неизменна в 80%. Уровни с 1 по 4 пишутся в кэш за 15-20 минут... 8 уровень около 30 минут... Ну а 9 на видео.. немногим более часа визуальный рендеринг карты России за 1 час на 9 уровне зума. Напомню что установлена дополнительная планка памяти на 8gb.
{{:software:nas:zoom_9.mp4|}}
* в принципе, считаю проделанную работу, не плохим результатом! И OSM Tale Server имеет право существовать на устройстве Synology NAS DS 420+ для личного пользования или небольшой группы пользователей личного сервера OSM.
* Напомню, что данный Ubuntu Tile Server установлен на виртуальную машину Synology VMM на устройстве DS420+, где работает все, что было установлено ранее. Попробую переключить мой личный сайт https://book51.ru/ с картой и слоями на вновь созданный виртуальный сервер.
{{:software:nas:osm_420_98.png?650|}}
{{:software:nas:osm_420_99.png?650|}}
{{:software:nas:osm_420_100.png?650|}}
* Загрузка Synolody DS420+ при работающем OSM Tile Server на Synology VMM (8gb VMM не дает установить система, поэтому стоит 6gb)
{{:software:nas:osm_420_102.png?650|}}
* Для сравнения аналогичная работа OSM Tile Server на Synology VMM на Synolody DS720+ и загрузка процессора
{{:software:nas:osm_420_101.png?650|}}
=====О 32ядрах и 1tb ssd * 3шт в raid5 =====
Загрузка всей карты с https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf ограниченна пропускной способностью провайдера 12Mb/s - 5 часов.
С соседнего сервера по внутренней сети 188Mb/s - 7 минут ограничение в скорости hdd соседнего сервера.
{{:software:linux_server:tile_map_server_22.04.4_130.png?|}}
Использование парсера PBF
{{:software:linux_server:tile_map_server_22.04.4_131.png?|}}
Россия в парсере Node при этих же настройка 516,5k/s, заняла 2 часа,
{{:software:linux_server:tile_map_server_22.04.4_133.png?|}}
то же самое на Synology DS 720+
{{:software:linux_server:tile_map_server_22.04.4_137.png?|}}
\\
(Intel Celeron J4125 4*2,70 GHz / 2gb ddr4 + 8gb ddr4 / 2*1tb ssd) показала загрузку процессора в среднем 30-50% при выделенной виртуальной памяти в 8gb, которая занята соответственно на 85% от общего объема в 10gb.
Реально используется только 12% озу от выделенных 128Gb, при общем объеме в 256Gb
{{:software:linux_server:tile_map_server_22.04.4_134.png?|}}
При этом процессор от 9% до 17%
{{:software:linux_server:tile_map_server_22.04.4_135.png?|}}
Трудятся только ssd
{{:software:linux_server:tile_map_server_22.04.4_136.png?|}}
=====Файлы для загрузки=====
* {{ :software:nas:ubuntu-20.04.2-live-server-amd64.rar |Ubuntu Server 20.04.2 LTS}}
* {{ :software:nas:index.zip |html-файл для просмотра плиток}}
* {{ :software:nas:mod_tile-master.zip |Mod_tile: модуль веб-сервера Apache}}
* {{ :software:nas:leaflet.zip |Leaflet — библиотека для интерактивных карт.}}
* {{ :software:nas:osm-carto-tutorials-gh-pages.zip |OSM Carto: стиль стандартного слоя листов OSM }}
* {{ :software:nas:water-polygons-split-3857.zip |water-polygons-split-3857.zip}}
* {{ :software:nas:ne_110m_admin_0_boundary_lines_land.zip |ne_110m_admin_0_boundary_lines_land.zip}}
* {{ :software:nas:antarctica-icesheet-outlines-3857.zip |antarctica-icesheet-outlines-3857.zip}}
* {{ :software:nas:antarctica-icesheet-polygons-3857.zip |antarctica-icesheet-polygons-3857.zip}}
* {{ :software:nas:simplified-water-polygons-split-3857.zip |simplified-water-polygons-split-3857.zip}}
====Карты OSM====
* {{ :software:nas:azerbaijan-latest.osm.pbf |azerbaijan-latest.osm.pbf}}
* {{ :software:nas:russia-latest.osm.pbf |russia-latest.osm.pbf}}
* {{ :software:nas:planet-240506.osm.pbf |planet-240506.osm.pbf}}
=====Ссылки и литература=====
[[https://switch2osm-org.translate.goog/serving-tiles/manually-building-a-tile-server-20-04-lts/?_x_tr_sl=en&_x_tr_tl=ru&_x_tr_hl=ru&_x_tr_pto=sc|Создание тайлового сервера вручную (20.04 LTS)]]
\\
[[https://help.ubuntu.ru/wiki/%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F|Ubuntu 20.04 LTS: пользовательская документация]]
\\
[[https://osm2pgsql.org/|OSM2PGSQL: импортер данных OSM в базу данных PostgreSQL/PostGIS]]
\\
[[https://www.postgresql.org/|PostgreSQL: база данных с открытым исходным кодом]]
\\
[[https://wiki.openstreetmap.org/wiki/RU:Mapnik|Mapnik: отрисовка основного Slippy Map слоя для OSM]]
\\
[[https://ircama.github.io/osm-carto-tutorials/|OSM Carto: стиль стандартного слоя листов OSM]]
\\
[[https://github.com/openstreetmap/mod_tile|Mod_tile: передача кэшированных тайлов]]
\\
[[https://leafletjs.com/|Leaflet — библиотека JS для интерактивных карт.]]
\\
[[https://book51.ru/doku.php?id=notes:nas:osm_synology_vmm|Synology Open Street Map Server]]
\\
https://github.com/openstreetmap/mod_tile/blob/master/docs/build/building_on_ubuntu.md
\\
https://switch2osm.org/serving-tiles/manually-building-a-tile-server-ubuntu-24-04-lts/
\\
https://www.linuxbabe.com/linux-server/osm-openstreetmap-tile-server-ubuntu-22-04
\\
https://ircama.github.io/osm-carto-tutorials/kosmtik-ubuntu-setup/
\\
https://www.linuxbabe.com/debian/openstreetmap-osm-tile-server-debian-12-bookworm
\\
https://github.com/openstreetmap/mod_tile
\\