Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
software:linux_server:tile_map_server [2024/08/03 22:02] – [Зависимость FreeType в Ubuntu 16.04 LTS] vladpolskiy | software:linux_server:tile_map_server [2025/03/31 18:14] (текущий) – [Упомянутые команды:] vladpolskiy |
---|
======Tile map server====== | ======Tile map server====== |
=====Введение===== | =====Введение===== |
На этой странице показано, как можно использовать OpenStreetMap Carto для реализации тайлового сервера с использованием того же программного обеспечения, что и OpenStreetMap. Он включает в себя пошаговые инструкции по установке Tile Server на основе Ubuntu и ограничен описанием некоторых передовых методов, учитывая, что основной целью этого сайта является предоставление руководств по настройке среды разработки OpenStreetMap Carto и предложение рекомендации по редактированию стиля. | На этой странице показано, как можно использовать [[https://wiki.openstreetmap.org/wiki/Standard_tile_layer|OpenStreetMap Carto]] для реализации [[https://en.wikipedia.org/wiki/Tiled_web_map|тайлового сервера]] с использованием того же программного обеспечения, что и OpenStreetMap. Он включает в себя пошаговые инструкции по установке Tile Server на основе Ubuntu и ограничен описанием некоторых передовых методов, учитывая, что основной целью этого сайта является предоставление руководств по настройке среды разработки OpenStreetMap Carto и предложение рекомендации по редактированию стиля. |
| \\ |
| \\ |
| OSM Tile Server — это [[https://en.wikipedia.org/wiki/Web_server|веб-сервер]], специализирующийся на предоставлении [[https://en.wikipedia.org/wiki/Raster_graphics|растровых]]растровых карт, представляющих их как статические [[https://en.wikipedia.org/wiki/Raster_graphics|плитки]] и способный выполнять [[https://wiki.openstreetmap.org/wiki/Rendering|рендеринг]] в реальном времени или предоставлять кэшированные изображения. Веб-программное обеспечение, принятое OpenStreetMap, представляет собой [[https://en.wikipedia.org/wiki/Apache_HTTP_Server|Apache HTTP Server]] вместе со специальным подключаемым модулем с именем //mod_tile// и связанным с ним внутренним стеком, способным генерировать плитки во время выполнения; программы и библиотеки объединены в цепочку для создания сервера тайлов. |
\\ | \\ |
OSM Tile Server — это веб-сервер, специализирующийся на доставке растровых карт, представляющих их как статические тайлы и способный выполнять рендеринг в реальном времени или предоставлять кэшированные изображения. Веб-программное обеспечение, принятое OpenStreetMap, представляет собой HTTP-сервер Apache вместе со специальным подключаемым модулем с именем mod_tile и связанным с ним внутренним стеком, способным генерировать плитки во время выполнения; программы и библиотеки объединены в цепочку для создания сервера тайлов. | |
\\ | \\ |
Как это часто бывает с OpenStreetMap, существует множество способов достижения цели, и почти все компоненты имеют альтернативы, которые имеют различные преимущества и недостатки. В этом руководстве описывается стандартный процесс установки OSM Tile Server, используемого на OpenStreetMap.org. | Как это часто бывает с OpenStreetMap, существует множество способов достижения цели, и почти все компоненты имеют альтернативы, которые имеют различные преимущества и недостатки. В этом руководстве описывается стандартный процесс установки OSM Tile Server, используемого на OpenStreetMap.org. |
| \\ |
\\ | \\ |
Он состоит из следующих основных компонентов: | Он состоит из следующих основных компонентов: |
Все упомянутое программное обеспечение является открытым исходным кодом. | Все упомянутое программное обеспечение является открытым исходным кодом. |
\\ | \\ |
Для тайлового сервера требуется база данных PostGIS , в которой хранятся геопространственные объекты, заполненные инструментом osm2pgsql из данных OSM. Кроме того, необходим каталог файловой системы, включающий файл OSM.xml , символы карты (проверьте подкаталог openstreetmap-carto/symbols) и шейп-файлы (проверьте подкаталог openstreetmap-carto/data). OSM.xml предварительно создается инструментом carto из стиля openstreetmap-carto (project.mml и все связанные файлы CartoCSS, включенные в openstreetmap-carto). | |
\\ | \\ |
Когда веб-сервер Apache получает запрос от браузера, он вызывает подключаемый модуль mod_tile , который, в свою очередь, проверяет, была ли плитка уже создана (из предыдущего рендеринга) и кэширована, чтобы она была готова к использованию; в этом случае mod_tile немедленно отправляет плитку обратно на веб-сервер. И наоборот, если запрос необходимо отобразить, то он ставится в очередь на серверную часть рендеринга , которая отвечает за вызов Mapnik для выполнения фактического рендеринга; renderd — это процесс- демон , включенный в исходники mod_tile и связанный с mod_tile через очереди UNIX. визуализированныйявляется стандартным бэкэндом, используемым в настоящее время www.openstreetmap.org, даже если некоторые реализации OSM используют Tirex ; Mapnik извлекает данные из базы данных PostGIS в соответствии с информацией о стиле openstreetmap-carto и динамически отображает тайл. renderd возвращает созданный тайл на веб-сервер и, в свою очередь, в браузер. | Для тайлового сервера требуется база данных //PostGIS// , в //которой хранятся геопространственные объекты//, заполненные инструментом //osm2pgsql// из данных OSM. Кроме того, необходим каталог файловой системы, включающий файл //OSM.xml//, символы карты (проверьте подкаталог openstreetmap-carto/symbols) и шейп-файлы (проверьте подкаталог openstreetmap-carto/data). //OSM.xml// предварительно создается инструментом [[https://github.com/mapbox/carto|carto]] из стиля openstreetmap-carto (project.mml и все связанные файлы CartoCSS, включенные в openstreetmap-carto). |
\\ | \\ |
Демон renderd реализует механизм очередей с несколькими уровнями приоритета, чтобы обеспечить актуальность просмотра с учетом доступных ресурсов рендеринга. Наивысший приоритет — для рендеринга «на лету» тайлов, еще не находящихся в кэше тайлов, два уровня приоритета для повторного рендеринга устаревших тайлов «на лету» и две очереди фонового пакетного рендеринга. Чтобы избежать проблем с каталогами, которые становятся слишком большими, и чтобы избежать слишком большого количества крошечных файлов, Mod_tile / renderd хранит визуализированные тайлы в «метатайлах», в специальной хешированной структуре каталогов. | |
\\ | \\ |
Даже если тайловый сервер динамически генерирует тайлы во время выполнения, они также могут быть предварительно визуализированы для просмотра в автономном режиме с помощью специального инструмента с именем render_list , который обычно используется для предварительного рендеринга тайлов с низким уровнем масштабирования и требует значительного времени для выполнения процесса (десятки часов в случае, если вся планета предварительно визуализируется); эта утилита включена в mod_tile , а также в другой инструмент с именем render_expired , который предоставляет методы для разрешения истечения срока действия тайлов карты. Более подробное описание render_list и render_expired можно найти на их справочных страницах. | Когда веб-сервер Apache получает запрос от браузера, он вызывает подключаемый модуль [[https://github.com/openstreetmap/mod_tile/|mod_tile]], который, в свою очередь, проверяет, была ли плитка уже создана (из предыдущего рендеринга) и кэширована, чтобы она была готова к использованию; в этом случае mod_tile немедленно отправляет плитку обратно на веб-сервер. И наоборот, если запрос необходимо отобразить, то он ставится в очередь на серверную часть рендеринга , которая отвечает за вызов [[https://wiki.openstreetmap.org/wiki/Mapnik|Mapnik]] для выполнения фактического рендеринга; renderd — это процесс- демон , включенный в исходники mod_tile и связанный с mod_tile через очереди UNIX. визуализированныйявляется стандартным бэкэндом, используемым в настоящее время www.openstreetmap.org, даже если некоторые реализации OSM используют [[https://wiki.openstreetmap.org/wiki/Tirex|Tirex]]; Mapnik извлекает данные из базы данных PostGIS в соответствии с информацией о стиле openstreetmap-carto и динамически отображает тайл. renderd возвращает созданный тайл на веб-сервер и, в свою очередь, в браузер. |
\\ | \\ |
Справочную информацию о методе истечения срока действия тайлов можно найти в механизме истечения срока действия тайлов. | |
\\ | \\ |
| Демон renderd реализует механизм очередей с несколькими уровнями приоритета, чтобы обеспечить актуальность просмотра с учетом доступных ресурсов рендеринга. Наивысший приоритет — для рендеринга «на лету» тайлов, еще не находящихся в кэше тайлов, два уровня приоритета для повторного рендеринга устаревших тайлов «на лету» и две очереди фонового пакетного рендеринга. Чтобы избежать проблем с каталогами, которые становятся слишком большими, и чтобы избежать слишком большого количества крошечных файлов, Mod_tile / renderd хранит визуализированные тайлы в «метатайлах», в специальной хешированной структуре каталогов((Более подробную информацию можно найти в описании процесса на [[https://github.com/openstreetmap/mod_tile/|сайте mod_tile]])). |
| \\ |
| \\ |
| Даже если тайловый сервер динамически генерирует тайлы во время выполнения, они также могут быть предварительно визуализированы для просмотра в автономном режиме с помощью специального инструмента с именем //render_list//, который обычно используется для предварительного рендеринга тайлов с низким уровнем масштабирования и требует значительного времени для выполнения процесса (десятки часов в случае, если вся планета предварительно визуализируется); эта утилита включена в mod_tile , а также в другой инструмент с именем //render_expired//, который предоставляет методы для разрешения истечения срока действия тайлов карты. Более подробное описание [[https://ircama.github.io/osm-carto-tutorials/manpage.html?url=https://rawgit.com/openstreetmap/mod_tile/master/docs/render_list.1|render_list]] и [[https://ircama.github.io/osm-carto-tutorials/manpage.html?url=https://rawgit.com/openstreetmap/mod_tile/master/docs/render_expired.1|render_expired]] можно найти на их справочных страницах. |
| \\ |
| \\ |
| Справочную информацию о методе истечения срока действия тайлов можно найти в [[https://wiki.openstreetmap.org/wiki/Tile_expire_methods|механизме истечения срока действия тайлов]]. |
| \\ |
| ====Общий процесс==== |
| Информация о предыдущих периодах частично взята с [[https://switch2osm.org/serving-tiles/|switch2osm.org - Serving Tiles]](( см. главу «The toolchain»)). |
| |
| |
| {{:software:linux_server:tile_map_server.png|}} |
| |
| Дополнительное описание процесса рендеринга OpenStreetMap можно найти в разделе [[https://ircama.github.io/osm-carto-tutorials/osm-rendering-process|Архитектура OSM]]. |
| |
| Следующую пошаговую процедуру можно использовать для установки и настройки всего необходимого программного обеспечения для работы вашего собственного сервера тайлов OpenStreetMap на Ubuntu.(( |
| При подготовке настоящего документа использовались следующие источники: |
| |
| * [[https://switch2osm.org/serving-tiles/manually-building-a-tile-server-20-04-lts/|switch2osm.org - Ручная сборка сервера плиток (20.04 LTS)]] |
| * [[https://wiki.openstreetmap.org/wiki/Mod_tile/Setup_of_your_own_tile_server|OSM Wiki - Mod tile/Настройка собственного сервера плиток]] |
| * [[https://www.linuxbabe.com/linux-server/openstreetmap-tile-server-ubuntu-16-04|Создайте свой собственный сервер тайлов OpenStreetMap на Ubuntu 16.04]] |
| * [[https://wiki.debian.org/OSM/tileserver/jessie|OSM сервер плитки jessie]] |
| )) |
| |
| Цель этой процедуры — по возможности использовать [[https://en.wikipedia.org/wiki/Ubuntu_(operating_system)#Package_classification_and_support|пакеты Ubuntu]] и официальные [[https://developer.ubuntu.com/en/publish/other-forms-of-submitting-apps/ppa/|PPA]]. |
| |
| Мы рассматриваем возможность использования [[https://en.wikipedia.org/wiki/Ubuntu_(operating_system)|Ubuntu]] 20.04.2 LTS [[https://en.wikipedia.org/wiki/Ubuntu_version_history#Ubuntu_20.04_LTS_(Focal_Fossa)|Focal Fossa]] или 18.04 LTS [[https://en.wikipedia.org/wiki/Ubuntu_version_history#Ubuntu_18.04_LTS_(Bionic_Beaver)|Bionic Beaver]], рекомендуемой версии операционной системы. |
| |
| Эта процедура обновлена до версии OpenStreetMap Carto, доступной на момент написания. Чтобы получить правильную процедуру установки, следует проверить [[https://github.com/gravitystorm/openstreetmap-carto/blame/master/INSTALL.md|историю INSTALL, учитывая, что разработчики]] [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/INSTALL.md|OpenStreetMap Carto]] используют ее для обновления. Проверьте также [[https://github.com/gravitystorm/openstreetmap-carto/blame/master/README.md|журнал изменений README]]. |
=====Общая настройка для Ubuntu===== | =====Общая настройка для Ubuntu===== |
| |
{{:software:linux_server:osm_110.png|}} | {{:software:linux_server:osm_110.png|}} |
\\ | \\ |
<color #ed1c24>E: Package 'ttf-unifont' has no installation candidate</color> | <fc #ed1c24>E: Package 'ttf-unifont' has no installation candidate</fc> |
\\ | \\ |
пакет 'ttf-unifont' установим позже (сейчас не критично) | пакет 'ttf-unifont' установим позже (сейчас не критично) |
* [[https://github.com/mapnik/node-mapnik/releases|node-mapnik]], | * [[https://github.com/mapnik/node-mapnik/releases|node-mapnik]], |
* [[https://github.com/mapnik/python-mapnik/releases|python-mapnik]]. | * [[https://github.com/mapnik/python-mapnik/releases|python-mapnik]]. |
Версия 3.0.19 — минимальная рекомендуемая на данный момент.При использовании вышеупомянутого PPA эта версия будет установлена вместо версии по умолчанию, доступной в Ubuntu. | Версия 3.0.19 — минимальная рекомендуемая на данный момент.(([[https://github.com/openstreetmap/chef/issues/155|Развертывание новой версии Mapnik (3.0.19)]])) При использовании вышеупомянутого PPA эта версия будет установлена вместо версии по умолчанию, доступной в Ubuntu. |
| |
После установки Mapnik из пакета перейдите к [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#verify-that-mapnik-has-been-correctly-installed|проверке установки Mapnik]]. | После установки Mapnik из пакета перейдите к [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#verify-that-mapnik-has-been-correctly-installed|проверке установки Mapnik]]. |
</code> | </code> |
====Собрать библиотеку Mapnik из исходников==== | ====Собрать библиотеку Mapnik из исходников==== |
На момент написания статьи Mapnik 3.0 является текущей стабильной версией и должна использоваться. Ветка для последней версии Mapnik из серии 3.0.x — v3.0.x. | На момент написания статьи Mapnik 3.0 является текущей стабильной версией и должна использоваться. Ветка для последней версии Mapnik из серии 3.0.x — v3.0.x.(([[https://github.com/mapnik/mapnik-support/issues/104#issuecomment-364054698|talaj комментарий 8 февр. ↩]])) |
| |
Загрузите последние исходники Mapnik: | Загрузите последние исходники Mapnik: |
Настройки PostgreSQL, принятые OpenStreetMap, можно найти в [[https://github.com/openstreetmap/chef/blob/master/cookbooks/postgresql/attributes/default.rb|книге PostgreSQL Chef Cookbook]] : специальные настройки PostgreSQL для серверов тайлов OpenStreetMap описаны в соответствующей [[https://github.com/openstreetmap/chef/blob/master/roles/tile.rb#L38-L45|конфигурации Tileserver Chef]] . | Настройки PostgreSQL, принятые OpenStreetMap, можно найти в [[https://github.com/openstreetmap/chef/blob/master/cookbooks/postgresql/attributes/default.rb|книге PostgreSQL Chef Cookbook]] : специальные настройки PostgreSQL для серверов тайлов OpenStreetMap описаны в соответствующей [[https://github.com/openstreetmap/chef/blob/master/roles/tile.rb#L38-L45|конфигурации Tileserver Chef]] . |
| |
Для установки dev&test на системе с 16 ГБ ОЗУ предлагаются следующие настройки:12: | Для установки dev&test на системе с 16 ГБ ОЗУ предлагаются следующие настройки(([[Самый надежный способ импорта больших наборов данных с помощью osm2psq|Самый надежный способ импорта больших наборов данных с помощью osm2psq]])): |
<code> | <code> |
shared_buffers = 2GB | shared_buffers = 2GB |
sudo /etc/init.d/postgresql start | sudo /etc/init.d/postgresql start |
</code> | </code> |
Вы можете получить ошибку и вам нужно увеличить размер разделяемой памяти. Отредактируйте **/etc/sysctl.d/30-postgresql-shm.conf** и запустите //sudo sysctl -p /etc/sysctl.d/30-postgresql-shm.conf//. Параметр типа //kernel.shmmax=17179869184и kernel.shmall=4194304// может быть подходящим для размера сегмента 16 ГБ. | Вы можете получить ошибку и вам нужно увеличить размер разделяемой памяти. Отредактируйте **/etc/sysctl.d/30-postgresql-shm.conf** и запустите //sudo sysctl -p /etc/sysctl.d/30-postgresql-shm.conf//. Параметр типа //kernel.shmmax=17179869184и kernel.shmall=4194304// может быть подходящим для размера сегмента 16 ГБ.(([[http://www.paulnorman.ca/blog/2011/11/loading-a-pgsnapshot-schema-with-a-planet-take-2/|Информация из блога Пола Нормана.]])) |
| |
Для управления и поддержания конфигурации серверов, работающих под управлением OpenStreetMap, используется инструмент управления конфигурацией [[https://www.chef.io/|Chef]] . | Для управления и поддержания конфигурации серверов, работающих под управлением OpenStreetMap, используется инструмент управления конфигурацией [[https://www.chef.io/|Chef]] . |
Создайте частичные индексы для ускорения запросов, включенных в //project.mml// , и предоставьте доступ ко всем таблицам //ГИС// , чтобы избежать ошибок рендеринга при доступе к таблицам с пользователем //tileserver// . | Создайте частичные индексы для ускорения запросов, включенных в //project.mml// , и предоставьте доступ ко всем таблицам //ГИС// , чтобы избежать ошибок рендеринга при доступе к таблицам с пользователем //tileserver// . |
| |
* Добавьте частичные геометрические индексы, указанные //openstreetmap-carto// для обеспечения эффективного улучшения запросов: | * Добавьте частичные геометрические индексы, указанные //openstreetmap-carto//((.travis.yml [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/.travis.yml#L43|применяет]] пользовательские индексы через psql -1Xq -v ON_ERROR_STOP=1 -d gis -f indexes.sql. Обратите внимание, что indexes.sql должен поддерживаться в актуальном состоянии с помощью indexes.py , и это также [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/.travis.yml#L37|проверяется]] .travis.yml)) для обеспечения эффективного улучшения запросов: |
<code> | <code> |
cd ~/src | cd ~/src |
* sudo apt install update-manager-core — устанавливает основной пакет менеджера обновлений, если он еще не установлен. | * sudo apt install update-manager-core — устанавливает основной пакет менеджера обновлений, если он еще не установлен. |
* sudo do-release-upgrade — запускает процесс обновления выпуска Ubuntu. | * sudo do-release-upgrade — запускает процесс обновления выпуска Ubuntu. |
| =====Дополнения и Файлы===== |
| <html> |
| <iframe width="100%" height=700px src="./repo/ubuntu_releases/" frameborder="0" allowfullscreen></iframe> |
| </html> |
| |
| |
| |
| |