воскресенье, 12 августа 2012 г.

Установка renderd и mod_tile - системы отрисовки тайлов по запросу

Продолжение серии заметок, посвящённых настройке тайлового сервера. Смотрите также предыдущие заметки Подготовка карт для генератора тайлов Mapnik, Настройка базы данных для генератора тайлов Mapnik и Установка генератора тайлов Mapnik. На этот раз мы установим демон renderd и модуль mod_tile для веб-сервера Apache.

Скачиваем дистрибутив модуля mod_tile для apache2 и его бэкенд - демон renderd. mod_tile работает вместе с renderd. Когда браузер пользователя запрашивает тайл у веб-сервера apache2, запрос перенаправляется модулю mod_tile. Если mod_tile находит в кэше нужный тайл, и судя по метаинформации и настройкам кэширования, он не просрочен, mod_tile просто передаёт его apache2. Если же необходимый тайл отсутствует или просрочен, тогда mod_tile обращается по UNIX-сокету к renderd, чтобы тот отрисовал необходимый тайл, разместил его в файловой ситсеме и доложил о готовности тайла.

Скачиваем исходники модуля и демона:
$ svn co http://svn.openstreetmap.org/applications/utils/mod_tile/
Устанавливаем всё необходимое для его сборки:
# apt-get install debhelper apache2-mpm-prefork apache2-threaded-dev libmapnik2-dev autoconf automake m4 libtool
Собираем модуль и демон, и устанавливаем их:
$ cd mod_tile
$ dpkg-buildpackage -B -rfakeroot -us -uc
$ cd ..
# dpkg -i renderd_0.4-10~oneiric1_amd64.deb
# dpkg -i libapache2-mod-tile_0.4-10~oneiric1_amd64.deb
Редактируем файл конфигурации mod_tile /etc/apache2/sites-enabled/tileserver_site: пишем почтовый ящик администратора веб-сервера в опцию ServerAdmin, комментируем опции ServerName, ServerAlias.

Я также поменял порт с 80 на 8080 в опции VirtualHost, поскольку у меня Apache2 будет выступать в роли бэкэнда для более лёгкого сервера Lighttpd. Для этого я поменял порт Apache2 в файле /etc/ports.conf, в опциях NameVirtualHost и Listen.

Теперь нужно настроить renderd. Для этого откроем файл /etc/renderd.conf и поменяем значение опции plugins_dir в секции [mapnik] с /usr/lib/mapnik/0.7/input на /usr/lib/mapnik/2.0/input

Теперь можно перезапустить apache2 и renderd, чтобы их настройки вступили в силу:
# /etc/init.d/apache2 restart
# /etc/init.d/renderd restart
Я также подключил модуль mod_proxy в файле конфигурации Lighttpd /etc/lighttpd/lighttpd.conf:
server.modules += ( "mod_proxy" )
proxy.server = (
  "/osm/" =>
  (
    (
      "host" => "127.0.0.1",
      "port" => 8080
    )
  )
)
И перезапустил веб-сервер:
# /etc/init.d/lighttpd restart
Теперь, если всё сделано правильно, система должна заработать. Для того, чтобы убедиться в правильности настроек, поправим адрес сервера на тестовой странице /var/www/osm/slippymap.html - заменим с localhost на внешнее имя сервера servername.tld. Теперь в браузере переходим на страницу http://servername.tld/osm/slippymap.html и видим карту прямо из недр базы данных:

На этом настройка тайлового сервера закончена.

8 комментариев:

romanrich комментирует...

Здравствуйте! Собрал все по инструкции. Открываю карту по: http://192.168.0.7/osm/slippymap.html. Все вроде загружается, кроме тайлов!

GET http://localhost/osm/11/1255/619.png 404 (Not Found) OpenLayers.js:446
Cross-origin image load denied by Cross-Origin Resource Sharing policy.

Каким образом можно решить эту проблему!?

Кстати, можете подсказать, где взять:
http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/10m-populated-places.zip http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/110m-admin-0-boundary-lines.zip !
Под данным путям таких файлов уже нет. Я нашел похожие на них файлы:
http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-populated-places/
http://www.naturalearthdata.com/downloads/110m-cultural-vectors/110m-admin-0-boundary-lines/ !?
Но они ли это?

Спасибо.

morbo комментирует...

1. В исходном коде slippymap нужно найти ссылки на localhost и заменить их на 192.168.0.7.

2. Это те самые файлы. Если посмотрите ссылки на скачивание файлов, то увидите, что они точно такие же. Видимо на этом сайте проверяют referrer, то есть откуда пришёл пользователь, и не дают скачивать тем, кто пришёл с другого сайта.

Егор Сухоруков комментирует...

Здравствуйте! Делал по вашей инструкции. Почему то получилось вот так - http://5.187.4.15/osm/slippymap.html

morbo комментирует...

Егор, проверьте правильность настройки mapnik - у вас не отрисовываются даже береговые линии. Проверьте, что границы мира и береговые линии скачаны, в файле settings.xml прописана настройка world_boundaries, а веб-сервер имеет право читать файлы из указанного в настройке каталога.

Анонимный комментирует...

Все сделал по вашей схеме, но тайлы не отрисовываются((Пишет, что не может найти ....404 (Not found). localhost я изменил на адрес своего сервера.При перезагрузке apache пишет : Could not determinate host name of server to configure tile-json request....

morbo комментирует...

>При перезагрузке apache пишет : Could not determinate host name of server to configure tile-json request....

Директиву ServerName в настройках mod_tile закоментировали?

Анонимный комментирует...

Здравствуйте, подскажите пожалуйста, что делать если я загружаю карту в БД не при помощи утилиты osm2pgsql, а при помощи imposm. Эта утилита создает другую структуру БД отличную от osm2pgsql. Я так понимаю, чтобы все работало нужно изменить файл стиля для mapnik (osm.xml) или как-то его сгенерировать...как? заранее благодарен.

morbo комментирует...

imposm никогда не пробовал, плучасовое гугление на тему как подружить imposm и mapnik результатов не принесло. Подсказать ничего не могу. Попробуйте сделать так, как написано в статье.