======Tile map server======
=====Введение=====
На этой странице показано, как можно использовать [[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// и связанным с ним внутренним стеком, способным генерировать плитки во время выполнения; программы и библиотеки объединены в цепочку для создания сервера тайлов.
\\
\\
Как это часто бывает с OpenStreetMap, существует множество способов достижения цели, и почти все компоненты имеют альтернативы, которые имеют различные преимущества и недостатки. В этом руководстве описывается стандартный процесс установки OSM Tile Server, используемого на OpenStreetMap.org.
\\
\\
Он состоит из следующих основных компонентов:
\\
* Mapnik
* Apache
* Mod_tile
* renderd
* osm2pgsql
* PostgreSQL/PostGIS database, to be installed locally (suggested) or remotely (might be slow, depending on the network).
* carto
* openstreetmap-carto
\\
Все упомянутое программное обеспечение является открытым исходным кодом.
\\
\\
Для тайлового сервера требуется база данных //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).
\\
\\
Когда веб-сервер 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====
Убедитесь, что ваша система Ubuntu полностью обновлена:
lsb_release -a
команда возвращает версию Ubuntu.
\\
{{:software:linux_server:osm_100.png|}}
\\
Чтобы обновить систему:
sudo apt-get update
команда загружает списки пакетов из репозиториев и «обновляет» их, чтобы получить информацию о новейших версиях пакетов и их зависимостях. Это будет сделано для всех репозиториев и PPA. Из http://linux.die.net/man/8/apt-get
\\
{{:software:linux_server:osm_101.png|}}
\\
sudo apt list --upgradable
команда выведит списки пакетов готовых к обновлению
\\
{{:software:linux_server:osm_102.png|}}
\\
sudo apt-get -y upgrade
команда обновляет все устаревшие пакеты и применить исправления безопасности с выводом подсказок « Да» или «Нет », спрашивая, нужно ли устанавливать зависимые пакеты или нет. Если вы устанавливаете большой пакет или пакет с большим количеством зависимостей, или устанавливаете несколько пакетов, ответы на эти запросы не позволят вам переключиться на выполнение какой-либо работы.
\\
{{:software:linux_server:osm_103.png|}}
\\
sudo apt upgrade
команда обновляет все устаревшие пакеты и применить исправления безопасности
\\
{{:software:linux_server:osm_104.png|}}
====Установите необходимые инструменты====
Основные элементы:
sudo apt-get -y install ca-certificates gnupg curl unzip gdal-bin \
tar wget bzip2 build-essential clang python3-psycopg2 python3-yaml \
python3-requests postgresql-client
{{:software:linux_server:osm_105.png|}}
\\
Дополнительные элементы:
sudo apt-get -y install munin-node munin protobuf-c-compiler libtiff5-dev
libcairomm-1.0-dev libagg-dev lua5.1 liblua5.1-0-dev
{{:software:linux_server:osm_106.png|}}
\\
Проверьте предварительные условия, предложенные [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/Dockerfile#L11-L12|openstreetmap-carto.]]
FROM ubuntu:bionic
# # Зависимости стиля
RUN apt-get update && apt-get install --no-install-recommends -y \
ca-certificates curl gnupg postgresql-client python3 python3-distutils \
fonts-hanazono fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted \
mapnik-utils nodejs npm ttf-unifont unzip && rm -rf /var/lib/apt/lists/*
# Kosmtik with plugins, forcing prefix to /usr because bionic sets
# npm prefix to /usr/local, which breaks the install
RUN npm set prefix /usr && npm install -g kosmtik
РАБОЧИЙ КАТАЛОГ /usr/lib/node_modules/kosmtik/
RUN kosmtik plugins --install kosmtik-overpass-layer \
--install kosmtik-fetch-remote \
--install kosmtik-overlay \
--install kosmtik-open-in-josm \
--install kosmtik-map-compare \
--install kosmtik-osm-data-overlay \
--install kosmtik-mapnik-reference \
--install kosmtik-geojson-overlay \
&& cp /root/.config/kosmtik.yml /tmp/.kosmtik-config.yml
# Closing section
RUN mkdir -p /openstreetmap-carto
WORKDIR /openstreetmap-carto
USER 1000
CMD sh scripts/docker-startup.sh kosmtik =====
установим npm, диспетчер пакетов Node.js. Для этого установите пакет npmс помощью apt:
sudo apt install npm
{{:software:linux_server:osm_107.png|}}
\\
перейдем в режим суперпользователя
sudo -i
{{:software:linux_server:osm_109.png|}}
\\
проверим зависимости стиля
apt-get update && apt-get install --no-install-recommends -y \
ca-certificates curl gnupg postgresql-client python3 python3-distutils \
fonts-hanazono fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted \
mapnik-utils nodejs npm ttf-unifont unzip && rm -rf /var/lib/apt/lists/*
{{:software:linux_server:osm_110.png|}}
\\
E: Package 'ttf-unifont' has no installation candidate
\\
пакет 'ttf-unifont' установим позже (сейчас не критично)
\\
к проверке установки kosmtik вернемся после установки Node.js
\\
Для последующих шагов установки мы предполагаем, что:
\\
cd - по умолчанию используется ваш домашний каталог.
====Настроить swap====
SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель).
\\
Импорт картографических данных и управление ими занимают много оперативной памяти, и обычно требуется swap.
\\
Чтобы проверить, настроен ли раздел подкачки в вашей системе, используйте одну из следующих двух команд:
swapon -s
{{:software:linux_server:osm_111.png|}}
\\
в данном случае установлено:
* • 4gb файла подкачки
free -m
Отображение количества свободной и используемой памяти в системе (отметьте строку, указывающую Swap ):
\\
{{:software:linux_server:osm_113.png|}}
\\
в данном случае используется:
* • ОЗУ: 544mb из доступных 16gb
* • файл подкачки: 0mb из доступных 4gb.
\\
Если у вас нет активного раздела подкачки, особенно если ваша физическая память мала, вам следует добавить файл подкачки. Создайте файл подкачки размером 2G в корневой файловой системе:
sudo fallocate -l 2G /swapfile
{{:software:linux_server:osm_114.png|}}
\\
Установим правильный тип разрешений.
sudo chmod 600 /swapfile
{{:software:linux_server:osm_115.png|}}
\\
Используйте mkswap утилиту, чтобы настроить файл как область подкачки Linux:
sudo mkswap /swapfile
{{:software:linux_server:osm_116.png|}}
\\
Включить файл подкачки
sudo mkswap /swapfile
{{:software:linux_server:osm_117.png|}}
\\
проверим результат
free -m
{{:software:linux_server:osm_118.png|}}
\\
Чтобы сделать изменение постоянным, откройте /etc/fstab файл и добавьте следующую строку:
/swapfile swap swap defaults 0 0
Откроем файл fstab, находящийся в папке ets в редакторе:
vi /etc/fstab
{{:software:linux_server:osm_119.png|}}
\\
* i -начало редактирования
* esc -конец редактирования
* :wq! -сохранение и выход из редактора
{{:software:linux_server:osm_120.png|}}
\\
[[:software:linux_server:swap в linux|Swap в linux]]
\\
[[https://help.ubuntu.ru/wiki/swap|Рекомендованный размер swap в linux]]
====Настройка переменных локализации====
* Locale — это набор переменных среды, которые определяют язык, страну и настройки кодировки символов (или любые другие особые предпочтения варианта) для ваших приложений и сеанса оболочки в системе Linux. Эти переменные среды используются системными библиотеками и локальными приложениями в системе.
* Конфигурационный файл находится /etc/default/locale.
* Просмотрим, какие локали в настоящее время определены для текущей учетной записи пользователя:
locale
{{:software:linux_server:osm_130.png|}}
\\
Чтобы установить локализацию ru_RU:
export LANGUAGE=ru_RU.UTF-8
export LANG=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8
* Экспортированные переменные можно поместить в файл /etc/environment.
* Новые локали также можно создать, выполнив:
sudo locale-gen ru_RU ru_RU.UTF-8
sudo dpkg-reconfigure locales
* если ошибка изменения локализации:
* [[:software:linux_server:cannot_change_locale|-bash: warning: setlocale: LC_ALL: cannot change locale]]
====Создание пользователя UNIX====
* Мы предполагаем, что вы уже создали пользователя для входа во время установки Ubuntu Server, который будет использоваться для запуска сервера тайлов. Предположим, что выбранное вами имя пользователя — alisa. В этом документе каждый раз, когда будет упоминается alisa, замените его своим фактическим именем пользователя.
* Если вам нужно создать нового пользователя:
sudo useradd -m alisa
sudo passwd alisa
{{:software:linux_server:osm_140.png|}}
* Установите пароль при появлении запроса.
* Повторите пароль для правильности ввода.
=====Установить Git=====
Иногда [[https://git-scm.com/|Git]] может быть уже предустановлен.
git --version
{{:software:linux_server:osm_150.png|}}
\\
в случае отсутствия установим:
apt-get install -y git
{{:software:linux_server:osm_151.png|}}
\\
{{ :software:linux_server:progit.pdf | - Справочник Pro Git}}
=====Установка библиотеки Mapnik=====
Mapnik используется для рендеринга данных OpenStreetMap в тайлы, управляемые веб-сервером Apache через renderd и mod_tile.
Эта установка предусматривает, что все команды выполняются в окружении обычной учетной записи (не root) с использованием "sudo". Не пытайтесь и не делайте все в окружении root; система не будет работать. (выход: exit)
exit
{{:software:linux_server:osm_159.png|}}
\\
Создайте в корне каталог src для загрузки исходников
mkdir -p ~/src
{{:software:linux_server:osm_160.png|}}
\\
и перейдите в него:
cd ~/src
{{:software:linux_server:osm_161.png|}}
\\
sudo apt install python-is-python3
\\
\\
df
====Зависимость FreeType в Ubuntu 16.04 LTS====
В Ubuntu 18.04 LTS, который устанавливает FreeType 2.8.1, пропустите этот абзац и продолжите установку Mapnik .
[[https://github.com/mapnik/mapnik/wiki/MapnikDependencies|Mapnik]] зависит от [[https://en.wikipedia.org/wiki/FreeType|FreeType]] для поддержки шрифтов [[https://en.wikipedia.org/wiki/TrueType|TrueType]], [[https://en.wikipedia.org/wiki/PostScript_fonts#Type_1|Type 1]] и [[https://en.wikipedia.org/wiki/OpenType|OpenType]]. В Ubuntu 16.04 LTS [[https://launchpad.net/ubuntu/+source/freetype|установлена версия FreeType]] 2.6.1 , в которой включено [[https://www.freetype.org/freetype2/docs/text-rendering-general.html#experimental-stem-darkening-for-the-auto-hinter|затемнение основы]], что делает шрифты [[https://en.wikipedia.org/wiki/Noto_fonts|Noto]] [[https://en.wikipedia.org/wiki/CJK_characters|CJK]] [[https://cloud.githubusercontent.com/assets/5209216/19252545/b640dd32-8f45-11e6-91be-8870350d6a3c.png|более жирными и чрезмерно подчеркнутыми]]. Установка [[https://github.com/achaphiv/ppa-fonts/tree/master/ppa|более новой версии FreeType из отдельного PPA]], переопределяющая версию по умолчанию, включенную в Ubuntu 16.04 LTS, решает эту проблему:
echo "Old freetype version:"
dpkg -l|grep freetype6
sudo add-apt-repository -y ppa:no1wantdthisname/ppa
sudo apt-get update
sudo apt-get install -y libfreetype6 libfreetype6-dev
Проверьте обновленную версию freetype:
echo "Updated freetype version:"
dpkg -l|grep freetype6
Если вам необходимо понизить версию FreeType до стандартной в репозитории Ubuntu 16.04, просто очистите PPA с помощью //ppa-purge//:
sudo apt-get install ppa-purge && sudo ppa-purge ppa:no1wantdthisname/ppa
Мы расскажем о некоторых альтернативных процедурах установки Mapnik (с учетом возможности запуска обновленной версии Ubuntu).
В версиях Ubuntu старше 18.04 LTS версия Mapnik по умолчанию старше минимально необходимой, которая составляет 3.0.19. В любом случае, специальный PPA, созданный [[https://github.com/talaj|talaj]], предлагает упакованную версию 3.0.19 Mapnik для Ubuntu 16.04 LTS Xenial.
sudo add-apt-repository -y ppa:talaj/osm-mapnik
sudo apt-get update
Ubuntu 18.04 LTS предоставляет Mapnik 3.0.19 и не требует специального PPA.
=====Установить библиотеку Mapnik из пакета=====
Следующая команда устанавливает Mapnik из стандартного репозитория Ubuntu:
sudo apt-get install -y git autoconf libtool libxml2-dev libbz2-dev \
libgeos-dev libgeos++-dev libproj-dev gdal-bin libgdal-dev g++ \
libmapnik-dev mapnik-utils python3-mapnik
В Ubuntu 18.04 LTS вы можете использовать //python-mapnik// вместо //python3-mapnik// .
[[https://launchpad.net/mapnik/+packages|Launchpad сообщает версию Mapnik]] , установленную из пакета, в зависимости от операционной системы; чем новее ОС, тем выше версия Mapnik.
GitHub предоставляет упорядоченный список доступных версий для:
* [[https://github.com/mapnik/mapnik/releases|Mapnik]],
* [[https://github.com/mapnik/node-mapnik/releases|node-mapnik]],
* [[https://github.com/mapnik/python-mapnik/releases|python-mapnik]].
Версия 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 из исходников====
Чтобы установить Mapnik из исходников, перейдите на [[https://github.com/mapnik/mapnik/wiki/UbuntuInstallation|страницу установки Mapnik для Ubuntu]] .
Сначала создайте каталог для загрузки исходников:
mkdir -p ~/src ; cd ~/src
**Примечание:** если вы получили следующую ошибку:\\
** ++ compiler does not support C++14 standard (-std=c++14), which is required. Please upgrade your compiler**
\\
используйте этот эксплорт вместо того, который включен в связанную документацию:
export CXX="clang++-10" && export CC="clang-10"
Последнюю версию и список изменений смотрите в разделе [[https://github.com/mapnik/mapnik/releases|«Выпуски Mapnik»]] .
Удалите все остальные старые пакеты Mapnik:
sudo apt-get purge -y libmapnik* mapnik-*
sudo apt-get purge -y python-mapnik
sudo apt-get purge -y python3-mapnik
sudo add-apt-repository --remove -y ppa:mapnik/nightly-trunk
sudo add-apt-repository --remove -y ppa:talaj/osm-mapnik
Установка предварительных условий:
sudo apt-get install -y libxml2-dev libfreetype6-dev \
libjpeg-dev libpng-dev libproj-dev libtiff-dev \
libcairo2 libcairo2-dev python-cairo python-cairo-dev \
libgdal-dev git
sudo apt-get install -y build-essential python-dev libbz2-dev libicu-dev
sudo apt-get install -y python zlib1g-dev clang make pkg-config curl
# you might have to update your outdated clang
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y gcc-6 g++-6 clang-3.8
export CXX="clang++-10" && export CC="clang-10"
Проверьте **clang --version** и **g++-6 --version** перед обновлением компилятора. Как уже упоминалось, установка //gcc-6// и //clang-3.8// должна выполняться только с Ubuntu 16.04, который по умолчанию поставляется с более старыми версиями (не с Ubuntu 18.04).
Нам необходимо установить [[http://www.boost.org/|Boost]] либо из пакета, либо из исходного кода.
====Установить Boost из пакета====
Не устанавливайте //boost// из пакета, если вы планируете компилировать //mapnik// с обновленным компилятором. Вместо этого скомпилируйте boost с тем же обновленным компилятором.
sudo apt-get install -y libboost-all-dev
====Установить последнюю версию Boost из исходного кода====
Удалить предыдущую установку boost из пакета:
sudo apt-get purge -y libboost-all-dev # remove installation from package
Скачать //boost// из источника:
cd ~/src
wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.bz2
tar xjf boost_1_66_0.tar.bz2
rm boost_1_66_0.tar.bz2
cd boost_1_66_0
Обратите внимание, что boost и mapnik должны быть скомпилированы одним и тем же компилятором. С Ubuntu 16.04 и gcc-6, g++-6, clang-3.8 вы должны использовать эти команды:
./bootstrap.sh --with-toolset=clang
./b2 stage toolset=clang-3.8 define=_GLIBCXX_USE_CXX11_ABI=0 --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 -sICU_PATH=/usr/ --with-program_options --with-system link=shared
sudo ./b2 install toolset=clang-3.8 define=_GLIBCXX_USE_CXX11_ABI=0 --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 -sICU_PATH=/usr/ --with-program_options --with-system link=shared -d0
sudo ldconfig && cd ~/
При использовании компилятора по умолчанию в Ubuntu 18.04 или Ubuntu 16.04 процедура компиляции выглядит следующим образом
./bootstrap.sh
./b2 stage toolset=gcc --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 -sICU_PATH=/usr/ --with-program_options --with-system link=shared
sudo ./b2 install toolset=gcc --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 -sICU_PATH=/usr/ --with-program_options --with-system link=shared -d0
sudo ldconfig && cd ~/
Не пытайтесь компилировать //mapnik// с помощью обновленного компилятора, если //boost// установлен из пакета.
====Установите HarfBuzz из пакета====
[[https://www.freedesktop.org/wiki/Software/HarfBuzz/|HarfBuzz]] — это движок формирования текста [[http://www.microsoft.com/typography/otspec/|OpenType]] .
Его можно установить из пакета, но лучше загрузить более обновленную версию исходного кода и скомпилировать ее. Для установки из пакета:
sudo apt-get install -y libharfbuzz-dev
====Установите HarfBuzz из исходного кода====
Проверьте последнюю версию [[https://www.freedesktop.org/software/harfbuzz/release/|здесь]] . Этот пример grubs harfbuzz-1.7.6:
cd ~/src
wget https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-1.7.6.tar.bz2
tar xjf harfbuzz-1.7.6.tar.bz2
rm harfbuzz-1.7.6.tar.bz2
cd harfbuzz-1.7.6
./configure && make && sudo make install
sudo ldconfig && cd ~/
====Собрать библиотеку Mapnik из исходников====
На момент написания статьи Mapnik 3.0 является текущей стабильной версией и должна использоваться. Ветка для последней версии Mapnik из серии 3.0.x — v3.0.x.(([[https://github.com/mapnik/mapnik-support/issues/104#issuecomment-364054698|talaj комментарий 8 февр. ↩]]))
Загрузите последние исходники Mapnik:
cd ~/src
git clone -b v3.0.x https://github.com/mapnik/mapnik
cd mapnik
git submodule update --init
source bootstrap.sh
./configure CUSTOM_CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" CXX=${CXX} CC=${CC}
make
После успешной компиляции Mapnik используйте следующую команду для его установки в вашу систему:
make test
sudo make install
cd ~/
[[https://github.com/mapnik/python-mapnik/blob/master/docs/getting-started.md|Связывания Python]] не включены по умолчанию. Вам нужно будет добавить их отдельно.
* Установка предварительных условий:
sudo apt-get install -y python-setuptools python3-setuptools
Только в случае, если вы установили //boost// из пакета, вам также необходимо:
sudo apt-get install -y libboost-python-dev
**Не выполняйте** указанную выше установку //libboost-python-dev// с **boost** , скомпилированным из исходного кода.
Установите переменные BOOST , если вы установили boost из исходников:
export BOOST_PYTHON_LIB=boost_python
export BOOST_THREAD_LIB=boost_thread
export BOOST_SYSTEM_LIB=boost_system
* Загрузите и скомпилируйте //python-mapnik// . Мы по-прежнему используем ветку v3.0.x:
cd ~/src
git clone -b v3.0.x https://github.com/mapnik/python-mapnik.git
cd python-mapnik
sudo -E python3 setup.py develop
sudo -E python3 setup.py install
Примечание: Mapnik и //mapnik-config// (часть Mapnik) должны быть установлены перед этой настройкой.
Затем вы можете [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#verify-that-mapnik-has-been-correctly-installed|убедиться, что Mapnik установлен правильно]] .
====Убедитесь, что Mapnik был правильно установлен====
Сообщить номер версии Mapnik и указать путь к каталогу входных плагинов
mapnik-config -v
mapnik-config --input-plugins
Убедитесь, что [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#python-installation|Python установлен]] . Также убедитесь, что [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#install-yaml-and-package-manager-for-python|pip установлен]] .
Затем проверьте с помощью Python 3:
python3 -c "import mapnik;print(mapnik.__file__)"
Если используется Python 2.7 (не Ubuntu 20.04 LTS), используйте эту команду для проверки:
python -c "import mapnik;print mapnik.__file__"
Он должен вернуть путь к привязкам python //(например, /usr/lib/python2.7/dist-packages/mapnik/__init__.pyc)//. Если python отвечает без ошибок, то библиотека Mapnik была найдена Python.
=====Настроить брандмауэр=====
Если вы готовите удаленную виртуальную машину, настройте брандмауэр так, чтобы разрешить удаленный доступ к локальному порту 80 и локальному порту 443.
Если вы используете облачную виртуальную машину, сама виртуальная машина также должна быть настроена на открытие этого порта.
=====Установить HTTP-сервер Apache=====
Apache бесплатный HTTP-сервер с открытым исходным кодом — один из самых популярных веб-серверов в мире. Он [[https://httpd.apache.org/|хорошо документирован]] и широко использовался на протяжении большей части истории Интернета, что делает его отличным выбором по умолчанию для хостинга веб-сайта .
Чтобы установить Apache:
sudo apt-get install -y apache2 apache2-dev
Службу Apache можно запустить с помощью
sudo service apache2 start
**Ошибка «Не удалось включить APR_TCP_DEFER_ACCEPT»** в Ubuntu на Windows возникает из-за этой опции сокета, которая изначально не поддерживается Windows. Чтобы ее обойти, отредактируйте ///etc/apache2/apache2.con//f с помощью
sudo nano /etc/apache2/apache2.conf
и добавьте следующую строку в конец файла:
AcceptFilter http none
Чтобы проверить, установлен ли Apache, направьте ваш браузер на IP-адрес вашего сервера (например, http://localhost). Страница должна отображать домашнюю страницу Apache по умолчанию. Также эта команда позволяет проверить корректность работы:
curl localhost| grep 'It works!'
Настройки Apache, принятые серверами тайлов OpenStreetMap, можно найти в соответствующей [[https://github.com/openstreetmap/chef/blob/master/roles/tile.rb#L13-L25|конфигурации Chef]] .
====Как узнать IP-адрес вашего сервера====
Вы можете выполнить следующую команду, чтобы узнать публичный IP-адрес вашего сервера:
wget https://ipinfo.io/ip -qO -
Вы можете протестировать Apache, открыв его через браузер по адресу **http://your-server-ip**
=====Установить Mod_tile из пакета=====
[[https://wiki.openstreetmap.org/wiki/Mod_tile|Mod_tile]] — это модуль Apache для эффективного рендеринга и обслуживания фрагментов карты для www.openstreetmap.org с использованием Mapnik.
====Mod_tile/render для Ubuntu 18.04 и Ubuntu 20.04====
В Ubuntu 18.04 (bionic) и Ubuntu 20.04 (focal) //mod_tile/renderd// можно установить, добавив [[https://launchpad.net/~osmadmins/+archive/ubuntu/ppa|OpenStreetMap PPA]] , поддерживаемый командой «Администраторы OpenStreetMap»:
sudo add-apt-repository -y ppa:osmadmins/ppa
sudo apt-get update
Также подходит [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#install-mapnik-library-from-package|вышеупомянутый таладж PPA]] .
После добавления PPA //mod_tile/renderd// можно установить из пакета с помощью следующей команды:
sudo apt-get install -y libapache2-mod-tile # this includes both mod-tile and renderd
====Mod_tile/renderd для Ubuntu 21.04====
В Ubuntu 21.04 (hirsute) пакет доступен и может быть установлен с помощью
sudo apt-get install -y libapache2-mod-tile renderd
====Установить Mod_tile из исходников====
В качестве альтернативы установке Mod_tile через PPA, мы можем скомпилировать его из репозитория GitHub.
Чтобы удалить ранее установленный PPA и связанные с ним пакеты:
sudo apt-get purge -y libapache2-mod-tile
sudo apt -y autoremove
sudo add-apt-repository -y --remove ppa:osmadmins/ppa
sudo add-apt-repository -y --remove ppa:talaj/osm-mapnik
Для компиляции Mod_tile:
sudo apt-get install -y autoconf autogen
mkdir -p ~/src ; cd ~/src
git clone https://github.com/openstreetmap/mod_tile.git
# Alternative repository:
# git clone -b switch2osm git://github.com/SomeoneElseOSM/mod_tile.git
cd mod_tile
./autogen.sh && ./configure && make && sudo make install && sudo make install-mod_tile && sudo ldconfig
cd ~/
Проверьте также https://github.com/openstreetmap/mod_tile/blob/master/docs/build/building_on_ubuntu_20_04.md
Процесс рендеринга, реализуемый mod_tile и renderd, подробно описан [[https://github.com/openstreetmap/mod_tile|в соответствующем файле readme на GitHub]] .
=====Установка Python=====
Проверьте, установлен ли [[https://www.python.org/|Python]] :
sudo apt-get install -y python3 python3-distutils
# Verify Python installation:
python -V
python3 -V
=====Установите Yaml и диспетчер пакетов для Python=====
Это необходимо для запуска скриптов/индексов //OpenStreetMap-Carto//.
sudo apt-get install -y python-yaml
pip -V # to verify whether pip is already installed
sudo apt-get install -y python3-pip
python3 -m pip install --upgrade pip
=====Установите утилиты Mapnik=====
Пакет Mapnik Utilities включает shapeindex.
sudo apt-get install -y mapnik-utils
=====Установить openstreetmap-carto=====
mkdir -p ~/src
cd ~/src
git clone https://github.com/gravitystorm/openstreetmap-carto.git
cd openstreetmap-carto
Для получения дополнительной информации прочтите [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/INSTALL.md|примечания по установке]] .
=====Установите шрифты, необходимые для openstreetmap-carto=====
В настоящее время используются шрифты Noto.
Чтобы установить их (кроме Noto Emoji Regular и Noto Sans Arabic UI Regular/Bold):
sudo apt-get install -y fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted fonts-hanazono ttf-unifont
Установка шрифтов Noto (при наличии следует использовать шрифты с подсказками):
cd ~/src
git clone https://github.com/googlefonts/noto-emoji.git
git clone https://github.com/googlefonts/noto-fonts.git
sudo cp noto-emoji/fonts/NotoColorEmoji.ttf /usr/share/fonts/truetype/noto
sudo cp noto-emoji/fonts/NotoEmoji-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansArabicUI/NotoSansArabicUI-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoNaskhArabicUI/NotoNaskhArabicUI-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansArabicUI/NotoSansArabicUI-Bold.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoNaskhArabicUI/NotoNaskhArabicUI-Bold.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansAdlam/NotoSansAdlam-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansAdlamUnjoined/NotoSansAdlamUnjoined-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansChakma/NotoSansChakma-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansOsage/NotoSansOsage-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansSinhalaUI/NotoSansSinhalaUI-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansArabicUI/NotoSansArabicUI-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansCherokee/NotoSansCherokee-Bold.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansSinhalaUI/NotoSansSinhalaUI-Bold.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansSymbols/NotoSansSymbols-Bold.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansArabicUI/NotoSansArabicUI-Bold.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/unhinted/ttf/NotoSansSymbols2/NotoSansSymbols2-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/hinted/ttf/NotoSansBalinese/NotoSansBalinese-Regular.ttf /usr/share/fonts/truetype/noto
sudo cp noto-fonts/archive/hinted/NotoSansSyriac/NotoSansSyriac-Regular.ttf /usr/share/fonts/truetype/noto
mkdir NotoSansSyriacEastern-unhinted
cd NotoSansSyriacEastern-unhinted
wget https://noto-website-2.storage.googleapis.com/pkgs/NotoSansSyriacEastern-unhinted.zip
unzip NotoSansSyriacEastern-unhinted.zip
sudo cp NotoSansSyriacEastern-Regular.ttf /usr/share/fonts/truetype/noto
cd ..
sudo apt install fontconfig
В конце:
sudo fc-cache -fv
fc-list
fc-list | grep Emoji
DejaVu Sans используется как необязательный резервный шрифт для систем без Noto Sans. Если установлены все шрифты Noto, его никогда не следует использовать.
sudo apt-get install -y fonts-dejavu-core
Дополнительную информацию смотрите [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/INSTALL.md#fonts|в примечаниях к шрифтам]] .
====Старый унифонт Средний шрифт====
Шрифт //unifont Medium// (нижняя метка), который был включен в предыдущие версии ОС, теперь больше не доступен и заменен на __Unifont Medium__ (верхняя). Предупреждения, связанные с недоступностью //unifont Medium//, не актуальны и являются следствием старого решения разработчиков OpenStreetMap поддерживать [[https://github.com/gravitystorm/openstreetmap-carto/pull/429|как старый шрифт Ubuntu 12.04, так и более новую версию]] (в верхнем регистре).
Один из способов избежать предупреждения — удалить ссылку на «unifont Medium» в //openstreetmap-carto/style.xml// .
Другой альтернативный способ удаления предупреждения о строчных буквах //unifont Medium// — установка старого шрифта «unifont Medium» (используется в Ubuntu 12.10):
mkdir -p ~/src ; cd ~/src
mkdir OldUnifont
cd OldUnifont
wget http://http.debian.net/debian/pool/main/u/unifont/unifont_5.1.20080914.orig.tar.gz
tar xvfz unifont_5.1.20080914.orig.tar.gz unifont-5.1.20080914/font/precompiled/unifont.ttf
sudo cp unifont-5.1.20080914/font/precompiled/unifont.ttf /usr/share/fonts/truetype/unifont/OldUnifont.ttf
sudo fc-cache -fv
fc-list | grep -i unifont # both uppercase and lowercase fonts will be listed
Обратите внимание, что описанная выше операция установки бесполезна, она просто удаляет предупреждение.
=====Установите Node.js=====
Установите [[https://nodejs.org/en/|Node.js]] с Ubuntu 20.04 LTS:
# Check installations:
node -v
nodejs -v
npm -v
# If components needs to be installed, run the following:
sudo apt install -y nodejs npm
Перейдите на страницу [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#check-nodejs-versions|проверки версий Node.js]].
Дополнительные примечания по Node.js: другие способы его установки:
* [[https://github.com/nodesource/distributions|NodeSource Node.js Двоичные дистрибутивы]] . Проверьте соответствующие [[https://github.com/nodesource/distributions#installation-instructions|инструкции по установке]] .
* Стандартный режим с помощью Ubuntu Advanced Packaging Tool (APT)
* Инструменты управления версиями, такие как:
* [[https://github.com/tj/n|n]] (Интерактивное управление версиями Node.js)
* [[https://github.com/creationix/nvm|nvm]] (менеджер версий узлов)
Список [https://ircama.github.io/osm-carto-tutorials/nodejs-commands|полезных команд]] для управления //Node.js// доступен на специальной странице.
Указанная выше версия Node.js также поддерживает установку TileMill и Carto.
====Версия дистрибутива из менеджера пакетов APT====
Последние версии Ubuntu поставляются с Node.js ( пакет //nodejs// ) и npm ( пакет //npm// ) в репозиториях по умолчанию. В зависимости от того, какую версию Ubuntu вы используете, эти пакеты могут содержать устаревшие релизы; тот, что идет с Ubuntu 16.04, не будет последним, но он должен быть стабильным и достаточным для запуска Kosmtik и Carto. Вместо этого TileMill требуется //nodejs-legacy// (или старая версия node, установленная через инструмент управления версиями Node.js).
Для //carto// мы установим //nodejs// :
sudo apt-get install -y nodejs npm
node -v 2>/dev/null || sudo ln -fs /usr/bin/nodejs /usr/local/bin/node
nodejs -v
node -v
npm -v
====Установите Node.js с помощью инструмента управления версиями====
В качестве альтернативы предлагается использовать инструмент управления версиями //Node.js//, который упрощает интерактивное управление различными версиями //Node.js// и позволяет выполнять обновление до последней версии. Мы будем использовать n .
Установить //n// :
mkdir -p ~/src ; cd ~/src
git clone https://github.com/tj/n.git
cd n
sudo make install # To uninstall: sudo make uninstall
cd ..
Некоторые программы (например, //Kosmtik и carto// ) принимают последнюю версию узла LTS (// sudo n lts//), другие (например, //Tilemill// ) работают с v6.14.1 ( //sudo n 6.14.1//).
Для //carto// мы установим последнюю версию LTS:
sudo n lts
====Проверьте версии Node.js====
Чтобы получить номера установленных версий:
node -v
npm -v
=====Установите carto и создайте XML-таблицу стилей Mapnik=====
//Carto// — это компилятор таблиц стилей, преобразующий проекты CartoCSS в таблицы стилей Mapnik XML.
Согласно текущей [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/INSTALL.md#additional-deployment-dependencies|документации openstreetmap-carto]] , минимальная версия carto ( [[https://cartocss.readthedocs.io/en/latest/|CartoCSS]] ), которую можно установить, — 0.18 . Поскольку carto компилирует таблицы стилей openstreetmap-carto, рекомендуется сохранить ту же версию, что и в документации openstreetmap-carto (вместо простой установки последней версии carto ).
Последнюю версию carto 1.2.0 можно установить с помощью
sudo npm install -g carto
Это работает с Ubuntu 20.04 LTS.
До Ubuntu 18.04 LTS эта версия выдает предупреждения типа [[https://github.com/gravitystorm/openstreetmap-carto/issues/3183|«Стили не соответствуют селектору слоев .text-low-zoom»]] .
Чтобы избежать этих предупреждений, установите версию 0 carto :
sudo npm install -g carto@0
На момент написания статьи это должна быть версия 0.18.2 .
Если установка не удалась, возможно, это связано с несовместимостью с npm/Node.js. Чтобы исправить это, попробуйте понизить версию Node.js.
Чтобы проверить установленную версию:
carto -v
При запуске carto вам необходимо указать версию [[http://mapnik.org/mapnik-reference/|API Mapnik]] через **-a** опцию. Для принятия версии [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/INSTALL.md#additional-deployment-dependencies|документация openstreetmap-carto]] предлагает некоторые рекомендации.
Чтобы [[https://github.com/mapnik/mapnik-reference#using|вывести список всех известных версий API]] в установленном программном обеспечении узла , выполните следующую команду:
npm install mapnik-reference
node -e "console.log(require('mapnik-reference'))"
Спецификации для каждой версии API также [[https://github.com/mapbox/carto/tree/master/docs/api/mapnik|задокументированы]] в [[https://github.com/mapbox/carto|репозитории carto]] .
Вам следует использовать версию API, наиболее близкую к установленной у вас версии Mapnik (уточните у //mapnik-config -v//).
Протестируйте //carto// и создайте //style.xml// из стиля openstreetmap-carto :
cd ~/src
cd openstreetmap-carto
carto -a "3.0.22" project.mml > style.xml
ls -l style.xml
При выборе соответствующей версии API вы не должны получить никаких соответствующих предупреждающих сообщений.
Команда //sudo apt-get install -y node-carto// может установить старую версию //Carto// , несовместимую с Openstreetmap Carto, и ее следует избегать.
=====Установите PostgreSQL и PostGIS=====
[[https://www.postgresql.org/|PostgreSQL]] — это реляционная база данных, а [[http://postgis.net/|PostGIS]] — ее пространственный расширитель, позволяющий хранить в ней географические объекты, такие как картографические данные; он выполняет функцию, схожую с SDE от ESRI или пространственным расширением Oracle. PostgreSQL + PostGIS используются для широкого спектра функций, таких как рендеринг карт, геокодирование и анализ.
В настоящее время протестированными версиями OpenstreetMap Carto являются PostgreSQL 10 и PostGIS 2.4:
Также должна подойти более старая или [[https://www.postgresql.org/|более новая версия PostgreSQL]] .
В Ubuntu имеются предварительно упакованные версии postgis и postgresql, поэтому их можно просто установить через менеджер пакетов Ubuntu.
sudo apt-get update
sudo apt-get install -y postgresql postgis
Дополнительные компоненты:
sudo apt-get install -y postgresql-contrib postgresql-12-postgis-3 postgresql-12-postgis-3-scripts
Вам необходимо запустить базу данных:
sudo service postgresql start
Примечание: используемый порт PostgreSQL — 5432 (по умолчанию).
====Создайте экземпляр PostGIS====
Теперь вам нужно создать базу данных PostGIS. По умолчанию различные программы, включая openstreetmap-carto //(ref. project.mml)//, предполагают, что база данных называется gis . Вам нужно создать базу данных PostgreSQL и настроить на ней расширение PostGIS.
Схема кодировки символов, которая будет использоваться в базе данных, — //UTF8// , а принятый параметр сортировки — //en_GB.utf8// . ( U&"..."Экранированный синтаксис Unicode, используемый в //project.mml//, должен работать [[https://www.postgresql.org/docs/9.5/static/sql-syntax-lexical.html|только в том случае, если кодировкой сервера является UTF8]] . Это также соответствует тому, что указано в [[https://github.com/openstreetmap/chef/blob/master/cookbooks/postgresql/resources/database.rb#L25-L27|коде конфигурации PostgreSQL Chef]] .)
sudo -u postgres createuser -s $USER
createdb gis --encoding="UTF8" --lc-collate="en_GB.UTF-8" --lc-ctype="en_GB.UTF-8" --template=template0
psql -d gis -c 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;'
Примечание: **ERROR: invalid locale name: "en_GB.UTF-8"** означает, что локаль //en_GB.UTF-8// не установлена. После установки локали необходимо перезапустить базу данных, чтобы загрузить локаль.
\\
Перейти к [[software:linux_server:tile_map_server#Добавьте пользователя и предоставьте доступ к базе данных gis|следующему шагу]].\\
Если на другом хосте:
====Установите переменные среды====
export PGHOST=localhost
export PGPORT=5432
export PGUSER=postgres
export PGPASSWORD=postgres_007%
HOSTNAME=localhost # set it to the actual ip address or host name
createdb gis --host="$HOSTNAME" --encoding="UTF8" --lc-collate="en_GB.UTF-8" --lc-ctype="en_GB.UTF-8" --template=template0
Если вы получили следующую ошибку:
\\
**ERROR: invalid locale name: "en_GB.utf8"**
\\
то вам нужно добавить локаль «en_GB.utf8» с помощью следующей команды:
sudo dpkg-reconfigure locales
И выберите «en_GB.UTF-8 UTF-8» на первом экране («Locales to be generated»). После этого будет предложено перезапустить базу данных:
sudo service postgresql restart
Если вы получили следующую ошибку:
\\
**ERROR: new collation (en_GB.utf8) is incompatible with the collation of the template database (en_US.UTF-8)\\
HINT: Use the same collation as in the template database, or use template0 as template.**
\\
вам нужно использовать template0 для gis:
psql -U postgres -h $HOSTNAME -c "CREATE DATABASE gis ENCODING 'UTF-8' LC_COLLATE 'en_GB.utf8' LC_CTYPE 'en_GB.utf8' TEMPLATE template0"
# alternative command: createdb -E UTF8 -l en_GB.UTF8 -O postgres -T template0 gis
Если вы получили следующую ошибку:
\\
**ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)\\
HINT: Use the same encoding as in the template database, or use template0 as template.**
\\
(ошибка, которая обычно возникает в Ubuntu на Windows с [[https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux|WSL]] ), затем добавьте также //TEMPLATE template0;// например, используйте следующую команду:
psql -U postgres -h $HOSTNAME -c "CREATE DATABASE gis ENCODING 'UTF-8' LC_COLLATE 'en_GB.utf8' LC_CTYPE 'en_GB.utf8' TEMPLATE template0"
# alternative command: createdb -E UTF8 -l en_GB.utf8 -O postgres -T template0 gis
Установите флажок, чтобы создать базу данных в разделе диска, где достаточно свободного места. Если вам необходимо использовать табличное пространство, отличное от используемого по умолчанию, выполните следующие команды вместо предыдущих (пример: табличное пространство имеет местоположение ///tmp/db//):
sudo mkdir /mnt/db # Suppose this is the tablespace location
sudo chown postgres:postgres /mnt/db
psql -U postgres -h $HOSTNAME -c "CREATE TABLESPACE gists LOCATION '/mnt/db'"
psql -U postgres -h $HOSTNAME -c "ALTER DATABASE gis SET TABLESPACE gists"
Создайте расширения //postgis и hstore// :
psql -U postgres -h $HOSTNAME -c "\connect gis"
psql -U postgres -h $HOSTNAME -d gis -c "CREATE EXTENSION postgis"
psql -U postgres -h $HOSTNAME -d gis -c "CREATE EXTENSION hstore"
Если вы получили следующую ошибку
\\
**ERROR: could not open extension control file "/usr/share/postgresql/9.3/extension/postgis.control": No such file or directory**
\\
то вы, возможно, устанавливаете PostgreSQL 9.3 (вместо 9.5), для чего вам также понадобится:
sudo apt-get install postgis postgresql-9.3-postgis-scripts
Установите его и повторите команды создания расширения. Обратите внимание, что PostgreSQL 9.3 в настоящее время не поддерживается openstreetmap-carto.
====Добавьте пользователя и предоставьте доступ к базе данных gis====
Для того, чтобы приложение могло получить доступ к базе данных //gis// , необходим пользователь DB с тем же именем, что и у вашего пользователя UNIX. Предположим, что ваш пользователь UNIX — //tileserver// .
psql -d gis -c "create user tileserver;grant all privileges on database gis to postgres;"
psql -d gis -c 'create user "www-data";grant all privileges on database gis to "www-data";'
psql -d gis -c 'ALTER TABLE geometry_columns OWNER TO postgres;'
psql -d gis -c 'ALTER TABLE spatial_ref_sys OWNER TO postgres;'
====Включение удаленного доступа к PostgreSQL====
Если вы находитесь на другом хосте, для удаленного доступа к PostgreSQL вам необходимо отредактировать //pg_hba.conf// :
sudo nano /etc/postgresql/*/main/pg_hba.conf
и добавьте следующую строку:
host all all / md5
//host all all 0.0.0.0/0 md5//— это правило контроля доступа, которое позволяет любому человеку входить в систему с любого адреса, указав действительный пароль (ключевое слово md5).
Затем отредактируйте //postgresql.conf// :
sudo vi /etc/postgresql/*/main/postgresql.conf
и установить //listen_addresses = '*'//
Наконец, необходимо перезапустить БД:
sudo /etc/init.d/postgresql restart
Проверьте, доступна ли база данных //gis// . Чтобы вывести список всех баз данных, определенных в PostgreSQL, выполните следующую команду:
psql -U postgres -h $HOSTNAME -c "\l+"
Полученный отчет должен включать базу данных //ГИС// , как показано в следующей таблице:
|Name |Owner |Encoding |Collate |Ctype |Access privileges|
|gis |postgres |UTF8 |en_US.utf8 |en_US.utf8 |=Tc/postgres|
| | | | | |postgres=CTc/postgres|
| | | | | |tileserver=CTc/postgres|
=====Настройка базы данных=====
Настройки PostgreSQL по умолчанию не очень хороши для очень больших баз данных, таких как OSM. Правильная настройка может просто удвоить производительность.
====Минимальные требования к настройке====
Установите пользователя //postgres// для доверия :
sudo vi /etc/postgresql/*/main/pg_hba.conf
# change: local all postgres peer
# to: local all postgres trust
После выполнения вышеуказанных изменений перезапустите БД:
sudo service postgresql restart
Запустите //tune-postgis.sh// :
export POSTGRES_USER=postgres
export PG_MAINTENANCE_WORK_MEM=256MB
export PG_WORK_MEM=16MB
export psql=psql
cd ~/src
cd openstreetmap-carto
bash scripts/tune-postgis.sh
Если postgres не настроен на //доверие// , возникает следующая ошибка: //psql: error: FATAL: Peer authentication failed for user "postgres"// при запуске tune-postgis.sh .
Чтобы очистить каталог данных и снова повторить //tune-postgis.sh// : rm -rf data.
====Необязательные дополнительные требования к настройке====
В [[http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server|вики PostgreSQL]] есть страница, посвященная настройке базы данных.
В [[http://www.paulnorman.ca/blog/2011/11/loading-a-pgsnapshot-schema-with-a-planet-take-2/|блоге Пола Нормана]] есть интересная заметка об оптимизации базы данных, которая используется ниже.
maintenance_work_memНастройки по умолчанию work_memслишком низкие для рендеринга.11: оба параметра следует увеличить для более быстрой загрузки данных и более быстрых запросов (сканирования индекса).
Консервативные настройки для 4 ГБ ВМ — //work_mem=32MB// и //maintenance_work_mem=256MB//. На машине с достаточным объемом памяти вы можете установить их как //work_mem=256MB// и //maintenance_work_mem=1GB//.
Кроме того, важными настройками являются //shared_buffersи write-ahead-log ( wal )//. Есть также некоторые другие настройки, которые вы, возможно, захотите изменить специально для импорта.
Чтобы отредактировать файл конфигурации PostgreSQL с помощью редактора nano :
sudo nano /etc/postgresql/*/main/postgresql.conf
а если вы используете PostgreSQL 9.3 (не поддерживается):
sudo nano /etc/postgresql/9.3/main/postgresql.conf
Рекомендуемые минимальные настройки:
shared_buffers = 128MB
min_wal_size = 1GB
max_wal_size = 2GB
work_mem = 32MB # check comments for better tuning
maintenance_work_mem = 256MB
autovacuum = off
fsync = off
Последние два варианта позволяют ускорить импорт: первый отключает автоматическую очистку во время импорта и позволяет запустить очистку в конце; второй приводит к повреждению данных в случае отключения электроэнергии и опасен. Если во время импорта данных произойдет отключение электроэнергии, вам придется удалить данные из базы данных и выполнить повторный импорт, но это быстрее. Просто не забудьте вернуть эти настройки обратно после импорта. fsync не влияет на время запроса после загрузки данных.
Настройки 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 ГБ ОЗУ предлагаются следующие настройки(([[Самый надежный способ импорта больших наборов данных с помощью osm2psq|Самый надежный способ импорта больших наборов данных с помощью osm2psq]])):
shared_buffers = 2GB
work_mem = 256MB
maintenance_work_mem = 1GB
wal_level = minimal
synchronous_commit = off
min_wal_size = 1GB
max_wal_size = 2GB
checkpoint_segments = 60
checkpoint_timeout = 15min
checkpoint_completion_target = 0.9
default_statistics_target = 1000
autovacuum = off
fsync = off
//default_statistics_target// можно даже увеличить до 10000.
При выполнении обновлений базы данных периодически запускайте ANALYZE.
Чтобы остановить и запустить базу данных:
sudo /etc/init.d/postgresql stop
sudo /etc/init.d/postgresql start
Вы можете получить ошибку и вам нужно увеличить размер разделяемой памяти. Отредактируйте **/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]] .
Для PostgreSQL принята конфигурация [[https://github.com/openstreetmap/chef/blob/master/cookbooks/postgresql/attributes/default.rb|postgresql/attributes/default.rb]] .
=====Установить Osm2pgsql=====
[[https://wiki.openstreetmap.org/wiki/Osm2pgsql|Osm2pgsql]] — это специальное программное обеспечение OpenStreetMap, используемое для загрузки данных OSM в базу данных PostGIS.
По умолчанию пакетные [[https://launchpad.net/ubuntu/+source/osm2pgsql|версии]] Osm2pgsql — 0.88.1-1 на Ubuntu 16.04 LTS и 0.96.0 на Ubuntu 18.04 LTS. Тем не менее, предлагаются более свежие версии, доступные на [[https://launchpad.net/~osmadmins/+archive/ubuntu/ppa|OpenStreetMap Osmadmins PPA]] или [[https://github.com/openstreetmap/osm2pgsql|компиляция программного обеспечения из исходников ]].
Чтобы установить osm2pgsql:
sudo apt install -y osm2pgsql
Чтобы установить Osm2pgsql из Osmadmins PPA:
sudo add-apt-repository -y ppa:osmadmins/ppa
apt-key adv --keyserver keyserver.ubuntu.com --recv A438A16C88C6BE41CB1616B8D57F48750AC4F2CB
sudo apt-get update
sudo apt-get install -y osm2pgsql
Перейдите в [[software:linux_server:tile_map_server#Получите извлечение данных OpenStreetMap|раздел «Получить извлечение данных OpenStreetMap»]] .
====Сгенерировать Osm2pgsql из исходников====
Эта альтернативная процедура установки генерирует самый последний исполняемый файл путем компиляции исходных кодов.
Установите необходимые зависимости:
sudo apt-get install -y make cmake g++ libboost-dev libboost-system-dev \
libboost-filesystem-dev libexpat1-dev zlib1g-dev \
libbz2-dev libpq-dev libgeos-dev libgeos++-dev libproj-dev lua5.2 \
liblua5.2-dev
Загрузить osm2pgsql:
mkdir -p ~/src ; cd ~/src
git clone git://github.com/openstreetmap/osm2pgsql.git
Подготовка к компиляции, компиляция и установка:
cd osm2pgsql
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
sudo make install
cd
=====Получите извлечение данных OpenStreetMap=====
Вам необходимо загрузить соответствующий файл .osm или .pbf, который затем можно загрузить в ранее созданный экземпляр PostGIS через //osm2pgsql//.
Существует много способов загрузки данных OSM.
Ссылка — [[https://planet.openstreetmap.org/|Planet OSM]] .
Вероятно, проще всего получить PBF-файл данных OSM с [[https://download.geofabrik.de/|сайта geofabrik]]сайта geofabrik .
Кроме того, [[https://download.bbbike.org/osm/|BBBike.org]] предоставляет выдержки из более чем 200 городов и регионов по всему миру в различных форматах.
Примеры:
* Картографические данные всей планеты (76G):
wget -c https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf
* Картографические данные Великобритании (847M):
wget -c https://download.geofabrik.de/europe/great-britain-latest.osm.pbf
* Только для Лихтенштейна:
wget https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf
wget https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf.md5
# Optionally, the following will xheck that the download wasn't corrupted:
md5sum -c liechtenstein-latest.osm.pbf.md5
Другой способ загрузки данных — напрямую через браузер. Проверьте [[https://wiki.openstreetmap.org/wiki/Downloading_data|эту страницу]] .
В качестве альтернативы можно использовать JOSM (выберите область для загрузки данных OSM: меню [[https://josm.openstreetmap.de/|JOSM]], Файл, Загрузить из OSM; вкладка Slippy map; перетащите карту правой кнопкой мыши, масштабируйте колесиком мыши или Ctrl + клавиши со стрелками; перетащите рамку левой кнопкой мыши, чтобы выбрать область для загрузки. Также предлагается плагин [[https://wiki.openstreetmap.org/wiki/JOSM/Plugins/continuosDownload|Continuous Download]] . Когда нужный регион будет локально доступен, выберите Файл, Сохранить как, .osm. Дайте ему допустимое имя файла и проверьте также соответствующий каталог, в котором этот файл сохранен.
В любом случае избегайте использования слишком маленьких участков.
OpenStreetMap — это //открытые данные// . Лицензия OSM — Open Database License.
=====Загрузить данные в PostGIS=====
В [[https://github.com/openstreetmap/osm2pgsql/tree/master/docs|документации osm2pgsql ]]приведена вся необходимая информация для использования этого инструмента ETL, включая соответствующие [[https://ircama.github.io/osm-carto-tutorials/manpage.html?url=https://raw.githubusercontent.com/openstreetmap/osm2pgsql/master/docs/osm2pgsql.1|параметры командной строки]] .
//osm2pgsql// использует **overcommit**, как и многие научные приложения и приложения для работы с большими данными, что требует корректировки настроек ядра:
sudo sysctl -w vm.overcommit_memory=1
Чтобы загрузить данные из файла //.osm// или //.pbf// в PostGIS, выполните следующую команду:
cd ~/src
cd openstreetmap-carto
export OSM2PGSQL_CACHE=${OSM2PGSQL_CACHE:-512}
export OSM2PGSQL_NUMPROC=${OSM2PGSQL_NUMPROC:-1}
export OSM2PGSQL_DATAFILE=${OSM2PGSQL_DATAFILE:-data.osm.pbf}
osm2pgsql \
--cache $OSM2PGSQL_CACHE \
--number-processes $OSM2PGSQL_NUMPROC \
--hstore \
--multi-geometry \
--database gis \
--slim \
--drop \
--style openstreetmap-carto.style \
--tag-transform-script openstreetmap-carto.lua \
[.osm or .pbf file]
**[.osm or .pbf file]:** замените это на уже загруженный вами файл //.osm// или //.pbf// , например, //liechtenstein-latest.osm.pbf// .
При наличии доступной памяти установите **export OSM2PGSQL_CACHE=2500**; для процесса импорта будет выделено 2,5 ГБ памяти.
Опция **--create** загружает данные в пустую базу данных, а не пытается добавить их в существующую.
Ретранслируем на //OSM2PGSQL_NUMPROC//, если у вас доступно больше ядер, вы можете настроить его соответствующим образом.
В [[https://osm2pgsql.org/doc/manual.html|руководстве osm2pgsql]] подробно описывается использование и все параметры.
[[software:linux_server:tile_map_server#Создайте папку данных|Перейти к следующему шагу]] .
При использовании другого сервера:
cd ~/src
cd openstreetmap-carto
HOSTNAME=localhost # set it to the actual ip address or host name
osm2pgsql -s -C 300 -c -G --hstore --style openstreetmap-carto.style --tag-transform-script openstreetmap-carto.lua -d gis -H $HOSTNAME -U postgres [.osm or .pbf file]
Обратите внимание, что предлагаемый процесс принимает опцию -s( --slim), которая использует временные таблицы, поэтому его выполнение занимает больше места на диске (и очень медленно), при этом используется меньше оперативной памяти. Вы можете добавить --drop опцию с -s( --slim), чтобы также удалить временные таблицы после импорта, в противном случае вы также найдете временные таблицы //nodes , ways и rels// (эти таблицы изначально были чистыми «вспомогательными» таблицами для систем с малым объемом памяти, но сегодня они широко используются, поскольку они также являются предпосылкой для обновлений).
Если все в порядке, можно переходить [[software:linux_server:tile_map_server#Создайте папку данных|к следующему шагу]] .
Обратите внимание, что используются следующие элементы:
* hstore
* openstreetmap- carto.стиль
* скрипт LUA openstreetmap -carto.lua
* Имя базы данных ГИС
В зависимости от размера входного файла команда //osm2pgsql// может выполняться очень долго. Интересная [[https://wiki.openstreetmap.org/wiki/Osm2pgsql/benchmarks|страница, связанная с бенчмарками Osm2pgsql]], связывает размеры систем hw/sw с соответствующими цифрами для импорта данных OpenStreetMap.
Примечание: если вы получили следующую ошибку:
node_changed_mark failed: ERROR: prepared statement "node_changed_mark" does not exist
выполните следующую команду для вашего //оригинального .osm// :
sed "s/action='modify' //" < original.osm | > fixedfile.osm
Затем обработайте //fixedfile.osm// .
Если вы получаете такие ошибки:
Error reading style file line 79 (fields=4)
flag 'phstore' is invalid in non-hstore mode
Error occurred, cleaning up
или этот:
Postgis Plugin: ERROR: column "tags" does not exist
LINE 8: ...ASE WHEN "natural" IN ('mud') THEN "natural" ELSE tags->'wet...
то вам нужно включить расширение //hstore// в базу данных с помощью **CREATE EXTENSION hstore**;и также добавить флаг –hstore в osm2pgsql . Включение расширения //hstore// и использование его с //osm2pgsql// исправит эти ошибки.
=====Создайте папку данных=====
Для этого шага требуется не менее 18 ГБ HD и соответствующая //RAM/swap// (лучше 24 ГБ HD). 8 ГБ HD будет недостаточно. При 1 ГБ RAM настройка swap обязательна.
python3 -m pip install psycopg2-binary
cd ~/src
cd openstreetmap-carto
scripts/get-external-data.py
Чтобы очистить процедуру //get-external-data.py// и перезапустить ее с нуля, удалите каталог //данных// ( rm -r data).
Настройте [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#configure-a-swap|подкачку]] , чтобы предотвратить появление следующего сообщения:
INFO:root:Checking table water_polygons
Killed
Способ загрузки шейп-файлов серверами тайлов OpenStreetMap описан в соответствующей [[https://github.com/openstreetmap/chef/blob/master/roles/tile.rb|конфигурации Chef]] .
Для получения дополнительной информации прочтите [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/INSTALL.md#scripted-download|скрипт загрузки]] .
=====Создание индексов и предоставление пользователям=====
Создайте частичные индексы для ускорения запросов, включенных в //project.mml// , и предоставьте доступ ко всем таблицам //ГИС// , чтобы избежать ошибок рендеринга при доступе к таблицам с пользователем //tileserver// .
* Добавьте частичные геометрические индексы, указанные //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)) для обеспечения эффективного улучшения запросов:
cd ~/src
cd openstreetmap-carto
HOSTNAME=localhost # set it to the actual ip address or host name
psql -d gis -f indexes.sql
Альтернативный режим:
cd ~/src
cd openstreetmap-carto
scripts/indexes.py | psql -d gis
При использовании другого хоста:
HOSTNAME=localhost # set it to the actual ip address or host name
cd ~/src
cd openstreetmap-carto
scripts/indexes.py | psql -U postgres -h $HOSTNAME -d gis
Альтернативный режим с другим хостом:
HOSTNAME=localhost # set it to the actual ip address or host name
psql -U postgres -h $HOSTNAME -d gis -f indexes.sql
* Создайте пользователя PostgreSQL **« tilerserver »** (если он еще не существует) и предоставьте права на все таблицы базы данных gis для пользователя **« tilerserver »** и для всех зарегистрированных пользователей:
psql -d gis <<\eof
REVOKE CONNECT ON DATABASE gis FROM PUBLIC;
GRANT CONNECT ON DATABASE gis TO "www-data";
GRANT CONNECT ON DATABASE gis TO "tileserver";
eof
Чтобы вывести список всех таблиц, доступных в базе данных //ГИС// , выполните следующую команду:
psql -d gis -c "\dt+"
или:
psql -U postgres -h $HOSTNAME -d gis -c "\dt+"
База данных должна включать таблицы //rels , ways и nodes// (созданные в //--slim// режиме //osm2pgsql// ) для обеспечения возможности обновлений.
В следующем примере вывода использовался //--slim// режим //osm2pgsql// :
|Schema |Name |Type |Owner|
|public |planet_osm_line |table |postgres|
|public |planet_osm_nodes |table |postgres|
|public |planet_osm_point |table |postgres|
|public |planet_osm_polygon |table |postgres|
|public |planet_osm_rels |table |postgres|
|public |planet_osm_roads |table |postgres|
|public |planet_osm_ways |table |postgres|
|public |spatial_ref_sys |table |postgres|
Фактически, таблицы //planet_osm_rels , planet_osm_ways , planet_osm_nodes// доступны, как описано в разделе [[https://github.com/openstreetmap/osm2pgsql/blob/master/docs/pgsql.md#database-layout|Структура базы данных Pgsql]] .
Более подробную информацию можно найти [[https://www.mapbox.com/mapping/osm-data-model/|в модели данных OpenStreetMap на сайте Mapbox]].
Для получения дополнительной информации ознакомьтесь с [[https://github.com/gravitystorm/openstreetmap-carto/blob/master/INSTALL.md#custom-indexes|пользовательскими индексами]] .
=====Настроить рендер=====
Далее нам нужно подключить //renderd// и //mod_tile// к веб-серверу Apache, чтобы он был готов принимать запросы на тайлы.
Получите каталог плагинов Mapnik:
mapnik-config --input-plugins
Это должен быть ///usr/local/lib/mapnik/input// , или ///usr/lib/mapnik/3.0/input// , или другой.
Отредактируйте файл конфигурации renderd с помощью предпочитаемого вами редактора:
sudo vi /usr/local/etc/renderd.conf
Примечание: при установке //mod_tile// из пакета путь будет ///etc/renderd.conf// .
sudo vi /etc/renderd.conf
В //[mapnik]// разделе измените значение параметра plugins_dir так, чтобы оно соответствовало значению, возвращаемому функцией mapnik-config --input-plugins:
Пример (при установке Mapnik 3.0 из пакета):
plugins_dir=/usr/lib/mapnik/3.0/input/
С Mapnik 2.2 из пакета:
plugins_dir=/usr/lib/mapnik/2.2/input/
С Mapnik 3.0 из источников:
plugins_dir=/usr/local/lib/mapnik/input/
В //[mapnik]// разделе также измените значение следующих параметров:
font_dir=/usr/share/fonts
font_dir_recurse=true
В //[default]// разделе измените значение XML и HOST на следующее.
XML=/home/tileserver/src/openstreetmap-carto/style.xml
HOST=localhost
Обратите внимание, что URI должен быть установлен на **/osm_tiles/**.
Также замените все %%;** на ;xxx=** (например, на vi :1,$s/^;\*\* /;xxx=** /g)%%.
В приведенном выше примере мы предполагаем, что ваш домашний каталог — **/home/tileserver** . Измените его на ваш фактический домашний каталог.
Пример файла:
[renderd]
stats_file=/var/run/renderd/renderd.stats
;socketname=/var/run/renderd/renderd.sock
num_threads=4
tile_dir=/var/lib/mod_tile
[mapnik]
plugins_dir=/usr/lib/mapnik/3.0/input/
font_dir=/usr/share/fonts
font_dir_recurse=true
[default]
URI=/osm_tiles/
TILEDIR=/var/lib/mod_tile
XML=/home/tileserver/src/openstreetmap-carto/style.xml
HOST=localhost
TILESIZE=256
Сохраните файл.
Проверьте наличие каталога **/var/run/renderd**, в противном случае создайте его с помощью //sudo mkdir /var/run/renderd/renderd.sock.//
Проверьте это, чтобы убедиться:
ls -l /home/tileserver/src/openstreetmap-carto/style.xml
grep '^;xxx=\*\*' /usr/local/etc/renderd.conf
В случае ошибки проверьте имя пользователя и повторите попытку **/usr/local/etc/renderd.conf**.
Установите скрипт инициализации renderd , скопировав пример скрипта инициализации, включенный в его пакет.
sudo cp ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd
Примечание: при установке mod_tile из пакета указанная выше команда не нужна.
Предоставьте разрешение на выполнение.
sudo chmod a+x /etc/init.d/renderd
**Примечание:** при установке //mod_tile// из пакета указанная выше команда не нужна.
Отредактируйте файл сценария инициализации
sudo vi /etc/init.d/renderd
Измените следующие переменные:
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-c /usr/local/etc/renderd.conf"
RUNASUSER=tileserver
**Важное примечание:** при установке //mod_tile// из пакета сохраните //DAEMON=/usr/bin/$NAMEи DAEMON_ARGS="-c /etc/renderd.conf"//.
В //RUNASUSER=tileserver// мы предполагаем, что ваш пользователь — //tileserver// . Измените его на ваше фактическое имя пользователя.
Сохраните файл.
Создайте следующий файл и установите его владельцем (вашего фактического пользователя).
sudo mkdir -p /var/lib/mod_tile
sudo chown tileserver:tileserver /var/lib/mod_tile
**Примечание:** при установке //mod_tile// из пакета указанные выше команды не нужны.
Снова измените его на свое фактическое имя пользователя.
Затем запустите службу renderd.
sudo systemctl daemon-reload
sudo systemctl start renderd
sudo systemctl enable renderd
При использовании [[https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux|WSL]] renderd //необходимо// запустить с помощью следующей команды:
sudo service renderd start
Следующий вывод является обычным:
renderd.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install enable renderd
Если //systemctl// не установлен (например, Ubuntu 14.4), используйте следующие команды:
sudo update-rc.d renderd defaults
sudo service renderd start
=====Настроить Apache=====
Создайте файл загрузки модуля.
sudo vi /etc/apache2/mods-available/mod_tile.load
Вставьте следующую строку в файл.
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so
Сохраните его. Создайте символическую ссылку.
sudo ln -s /etc/apache2/mods-available/mod_tile.load /etc/apache2/mods-enabled/
Затем отредактируйте файл виртуального хоста по умолчанию.
test -f /etc/apache2/sites-enabled/000-default.conf || sudo ln -s /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled
sudo vi /etc/apache2/sites-enabled/000-default.conf
После строки ниже пропишите следующие строки ////
# Load all the tilesets defined in the configuration file into this virtual host
LoadTileConfigFile /usr/local/etc/renderd.conf
# Socket where we connect to the rendering daemon
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 3
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 60
Примечание: при установке mod_tile из пакета установите //LoadTileConfigFile /etc/renderd.conf//.
LoadTileConfigFile /etc/renderd.conf
Сохраните и закройте файл.
Пример:
LoadTileConfigFile /etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
ModTileRequestTimeout 3
ModTileMissingRequestTimeout 60
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Перезапустите Apache.
sudo systemctl restart apache2
Если systemctl не установлен (например, Ubuntu 14.4):
sudo service apache2 restart
С помощью WSL перезапустите службу Apache с помощью следующих команд:
sudo service apache2 stop; sudo service apache2 start
Проверьте локальный доступ к плиткам:
wget --spider http://localhost/osm_tiles/0/0/0.png
У вас должно получиться //Remote file exists.//, если все настроено правильно.
Затем в адресной строке веб-браузера введите
your-server-ip/osm_tiles/0/0/0.png
где вам необходимо изменить //your-server-ip// на фактический IP-адрес установленного картографического сервера.
Чтобы расширить его, указав публичный IP-адрес вашего сервера, проверьте, например, эту команду (вставьте ее вывод в браузер):
echo "http://`wget http://ipinfo.io/ip -qO -`/osm_tiles/0/0/0.png"
Вы должны увидеть фрагмент карты мира.
Поздравляем! Вы только что успешно создали свой собственный сервер плиток OSM.
Вы можете перейти в [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#openlayers|OpenLayers]] , чтобы отобразить скользящую карту.
=====Предварительный рендеринг тайлов=====
Предварительная визуализация плиток обычно не нужна (или нежелательна); ее основное применение — обеспечить офлайн-просмотр вместо визуализации плиток на лету. В зависимости от размера БД процедура может занять очень много времени и соответствующих дисковых данных.
Для предварительной визуализации плиток используйте команду //render_list// . Предварительно визуализированные плитки будут кэшированы в **/var/lib/mod_tile** каталоге.
Чтобы отобразить все параметры командной строки [[https://ircama.github.io/osm-carto-tutorials/manpage.html?url=https://raw.githubusercontent.com/openstreetmap/mod_tile/master/docs/render_list.1|render_list ]]:
render_list --help
Пример использования:
render_list -a
В зависимости от размера базы данных выполнение этой команды может занять очень много времени.
Следующая команда предварительно визуализирует все плитки от уровня масштабирования 0 до уровня масштабирования 10, используя 1 поток:
render_list -n 1 -z 0 -Z 10 -a
Скрипт командной строки Perl с именем [[https://github.com/alx77/render_list_geo.pl|render_list_geo.pl]] , разработанный [[https://github.com/alx77|alx77]], позволяет автоматически предварительно визуализировать плитки в определенной области с использованием географических координат. Соответствующий файл [[https://github.com/alx77/render_list_geo.pl#render_list_geopl|README Github]] описывает использование и примеры.
Чтобы установить его:
cd ~/src
git clone https://github.com/alx77/render_list_geo.pl
cd render_list_geo.pl
Пример команды для генерации плиток z11 для Великобритании:
./render_list_geo.pl -n 1 -z 11 -Z 11 -x -9.5 -X 2.72 -y 49.39 -Y 61.26
Для //render_list и render_list_geo.pl// опция **-m** позволяет выбирать определенные профили, относящиеся к именованным разделам в //renderd.conf// . Если эта опция не используется, выбирается **[default]** раздел //renderd.conf// .
=====Устранение неполадок Apache, mod_tile и renderd=====
Для мониторинга сервера плиток, показывающего линию каждый раз при запросе плитки и одну линию каждый раз после завершения соответствующего рендеринга:
tail -f /var/log/syslog | grep " TILE "
Чтобы очистить кэш всех плиток osm, удалите /var/lib/mod_tile/default (используйте rm -rf, если осмелитесь) и перезапустите демон renderd:
sudo rm -rf /var/lib/mod_tile/default
sudo systemctl restart renderd
Не забудьте также очистить кэш браузера.
Если systemctl не установлен (например, Ubuntu 14.4):
sudo service renderd restart
Показать загруженные модули Apache:
apache2ctl -M
Вы должны найтиtile_module (shared)
Показать конфигурацию Apache:
apache2ctl -S
В журнале должны появиться следующие сообщения:
Loading tile config default at /osm_tiles/ for zooms 0 - 20 from tile directory /var/lib/mod_tile with extension .png and mime type image/png
Хвостовой журнал:
tail -f /var/log/apache2/error.log
Большинство проблем с конфигурацией можно обнаружить, проанализировав журнал отладки renderd ; нам нужно остановить демон и запустить renderd в фоновом режиме:
sudo systemctl stop renderd
Если systemctl не установлен (например, Ubuntu 14.4):
sudo service renderd stop
Затем управляйте выводом renderd :
sudo -u tileserver /usr/local/bin/renderd -fc /usr/local/etc/renderd.conf
Игнорируйте пять ошибок, связанных со //iniparser: syntax error in /usr/local/etc/renderd.conf// с сылками на закомментированные переменные (например, начинающиеся с ;).
Нажмите **Control-C**, чтобы завершить программу. После исправления ошибки демон можно перезапустить с помощью:
sudo systemctl start renderd
Если //systemctl// не установлен (например, Ubuntu 14.4):
sudo service renderd start
Проверить наличие ///var/run/renderd//:
ls -ld /var/run/renderd
Проверьте, что разрешение на доступ есть //-rw-r--r-- 1 tileserver tileserver//. Вы можете временно сделать
sudo chmod 777 /var/run/renderd
Проверьте наличие файла //style.xml// :
ls -l /home/tileserver/src/openstreetmap-carto/style.xml
Если он отсутствует, смотрите выше, как его создать.
Проверить наличие ///var/run/renderd/renderd.sock://
ls -ld /var/run/renderd/renderd.sock
Убедитесь, что разрешения на доступ есть **srwxrwxrwx 1 tileserver tileserver.**
В случае неправильного владельца:
sudo chown 'tileserver' /var/run/renderd
sudo chown 'tileserver' /var/run/renderd/renderd.sock
sudo service renderd restart
Если каталог отсутствует:
sudo mkdir /var/run/renderd
sudo chown 'tileserver' /var/run/renderd
sudo service renderd restart
В случае, если renderd завершается с ошибкой сегментации (например, **Loading parameterization function forand then Segmentation fault**), это может быть связано с несоответствием конфигурации между плагинами Mapnik и конфигурацией renderd; проверьте параметр //plugins_dir// в ///usr/local/etc/renderd.conf// .
Ошибка разрешения PostGIS означает, что таблицы БД не были предоставлены пользователю tileserver:
**//...An error occurred while loading the map layer 'default': Postgis Plugin: ERROR: permission denied for relation...//**
Чтобы исправить ошибку разрешения, выполните:
sudo ./install-postgis-osm-user.sh gis tileserver
Ошибка, связанная с отсутствием tagsстолбца в журналах //renderd// , означает, что //osm2pgsql// не был запущен с этой **--hstore** опцией.
Если все в конфигурации выглядит нормально, но карта по-прежнему не отображается без какого-либо конкретного сообщения от renderd , попробуйте выполнить перезапуск системы:
sudo shutdown -r now
Если проблема сохраняется, возможно, проблема с пользователем UNIX. Попробуйте отладку снова, установив эти переменные:
export PGHOST=localhost
export PGPORT=5432
export PGUSER=postgres
export PGPASSWORD=postgres_007%
В исключительном случае следующие команды позволяют полностью удалить Apache, mod_tile и renderd и переустановить службу:
sudo rm -r ~/src/mod_tile/
sudo apt-get purge apache2 apache2-dev
sudo rm -r /etc/apache2/mods-available
sudo rm /usr/local/etc/renderd.conf
sudo rm /etc/init.d/renderd
sudo rm -rf /var/lib/mod_tile
sudo rm -rf /usr/lib/apache2
sudo rm -rf /etc/apache2/
sudo rm -rf /var/run/renderd
sudo apt-get --reinstall install apache2-bin
sudo apt-get install apache2 apache2-dev
=====Формат имен тайлов сервера тайлов OpenStreetMap=====
Наименование файлов и формат изображений, используемые mod_tile, описаны в [[https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames|Slippy map tilenames]] . Похожий формат также используется [[https://developers.google.com/maps/documentation/javascript/maptypes|Google Maps]] и многими другими поставщиками карт.
[[https://wiki.openstreetmap.org/wiki/TMS|TMS]] и [[https://wiki.openstreetmap.org/wiki/WMS|WMS]] — это другие протоколы для обслуживания карт в виде фрагментов, управляемые различными бэкэндами рендеринга.
=====Развертывание собственной карты Slippy Map=====
В терминологии [[https://en.wikipedia.org/wiki/Tiled_web_map|OpenStreetMap]] мозаичная веб-карта также известна как скользящая карта.
OpenStreetMap не предоставляет «официальную» библиотеку JavaScript, которую вы обязаны использовать. Вместо этого вы можете использовать любую библиотеку, которая соответствует вашим потребностям. Две самые популярные — OpenLayers и Leaflet. Обе с открытым исходным кодом.
Страница [[https://wiki.openstreetmap.org/wiki/Deploying_your_own_Slippy_Map|Развертывание собственной карты Slippy Map]] иллюстрирует, как встроить ранее установленный сервер карт в веб-сайт. Упоминается ряд возможных библиотек карт, включая некоторые релевантные ( [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/leafletjs.com|Leaflet]] , [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/openlayers.org|OpenLayers]] , [[https://developers.google.com/maps/|Google Maps APIGoogle Maps API]] ), а также множество альтернатив.
====OpenLayers====
Чтобы отобразить скользящую карту с помощью OpenLayers, создайте файл с именем //ol.html// в каталоге ///var/www/html//.
sudo vi /var/www/html/ol.html
Вставьте следующий HTML-код в файл.
Вы можете настроить долготу, широту и уровень масштабирования в соответствии с вашими потребностями. Проверьте **var zoom = 2, center = [0, 0];**.
Обратите внимание, что мы используем https для openstreetmap.org .
OpenStreetMap with OpenLayers
Tile Server ►
◄ OpenStreetMap
Сохраните и закройте файл. Теперь вы можете просмотреть свою скользящую карту, введя следующий URL в браузере.
http://your-server-ip/ol.html
Чтобы расширить его, указав публичный IP-адрес вашего сервера, проверьте, например, эту команду (вставьте ее вывод в браузер):
echo "http://`wget http://ipinfo.io/ip -qO -`/ol.html"
====Листовка====
Leaflet — это библиотека JavaScript для встраивания карт. Она проще и меньше, чем OpenLayers.
Самый простой пример отображения вашей скользящей карты с помощью Leaflet — создание файла с именем lf.html в каталоге /var/www/html .
sudo vi /var/www/html/lf.html
Вставьте следующий HTML-код в файл. Замените your-server-ip на ваш IP-адрес и настройте долготу, широту и уровень масштабирования в соответствии с вашими потребностями.
OpenStreetMap with Leaflet
Сохраните и закройте файл. Теперь вы можете просмотреть свою скользящую карту, введя следующий URL в браузере.
http://your-server-ip/lf.html
Быстрый способ протестировать скользящую карту — воспользоваться онлайн-площадкой для изучения исходного кода, например, этим шаблоном JSFiddle.
В следующем [[https://jsfiddle.net/ircama/0oend7he/|примере]] [[http://leafletjs.com/|Leaflet]] используется для отображения данных OpenStreetMap.
Плитки по умолчанию можно заменить на плитки вашего сервера, изменив
https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
к http://your-server-ip/osm_tiles/{z}/{x}/{y}.png.
Чтобы отредактировать образец, нажмите Edit в JSFiddle . Затем на панели Javascript измените строку внутри кавычек, как описано выше. Нажмите Run .
=====Дополнения и файлы=====
* [[https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/|Установка сервера тайлов OpenStreetMap в Ubuntu]]
* [[https://switch2osm.org/serving-tiles/manually-building-a-tile-server-ubuntu-24-04-lts/|Создание тайлового сервера вручную (Ubuntu 24.04)]]
* [[http://use.openstreetmap.ru/serving-tiles/manually-building-a-tile-server-20-04-lts/|Создание тайлового сервера вручную (Ubuntu 20.04)]]
* [[https://postgis.net/documentation/getting_started/install_windows/released_versions/|PostgreSQL]]
* [[https://habr.com/ru/articles/316158/|Поднимаем собственный репозиторий пакетов для Ubuntu (Debian)]]
* [[https://webhostinggeeks.com/howto/how-to-install-all-available-updates-for-an-ubuntu-release-before-upgrading/|Как установить все доступные обновления для выпуска Ubuntu перед обновлением]]
* [[https://github.com/SomeoneElseOSM/mod_tile|mod_tile]]
====Упомянутые команды:====
* sudo apt update — обновляет список пакетов последней информацией из настроенных репозиториев.
* sudo apt update — устанавливает доступные обновления для вашей текущей версии Ubuntu.
* sudo apt dist-upgrade — выполняет более тщательное обновление, которое более тщательно обрабатывает зависимости пакетов.
* sudo apt autoremove — удаляет из системы неиспользуемые или устаревшие пакеты.
* sudo restart — перезагружает систему, чтобы все изменения вступили в силу.
* sudo apt install update-manager-core — устанавливает основной пакет менеджера обновлений, если он еще не установлен.
* sudo do-release-upgrade — запускает процесс обновления выпуска Ubuntu.
=====Дополнения и Файлы=====