======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. =====Дополнения и Файлы=====