Ещё один тайловый сервер, который я нашёл в дистрибутиве Debian - это TileStache. Он, как и TileLite, тоже написан на Python. Это ещё один комбайн "всё в одном": он поддерживает отрисовку тайлов с помощью Mapnik, кэширование тайлов, в том числе сторонних, и содержит встроенный веб-сервер (по сути он им и является). В отличие от TileLite, этот тайловый сервер может обслуживать несколько слоёв сразу, в том числе, может брать тайлы слоя из стороннего тайлового сервера.
Итак, ставим его:
# apt-get install tilestache
Создаём сценарий инициализации /etc/init.d/tilestache:
#!/bin/sh ### BEGIN INIT INFO # Provides: tilestache # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts TileStache server # Description: starts TileStache server using start-stop-daemon ### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin NAME=tilestache PID=/var/run/tilestache.pid DAEMON=/usr/bin/tilestache-server DAEMON_OPTS="--config /etc/tilestache.cfg -p 8000" test -x $DAEMON || exit 0 set -e case "$1" in start) echo "Starting $NAME: " start-stop-daemon --start --make-pidfile --background --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS echo "done." ;; stop) echo "Stopping $NAME: " start-stop-daemon --stop --pidfile $PID --retry 5 rm -f $PID echo "done." ;; restart) echo "Stopping $NAME: " start-stop-daemon --stop --pidfile $PID --retry 5 rm -f $PID echo "done..." sleep 1 echo "Starting $NAME: " start-stop-daemon --start --make-pidfile --background --pidfile $PID --exec $DAEMON -- $DAEMON_OPTS echo "done." ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|restart}" >&2 exit 1 ;; esac exit 0
И прописываем в автозапуск:
# update-rc.d tilestache defaults
Копируем пример настройки сервера из файла /usr/share/doc/tilestache/examples/tilestache.cfg в файл /etc/tilestache.cfg и правим его до следующего вида:
{ "cache": { "name": "Disk", "path": "/var/lib/tilestache", "umask": "0000" }, "layers": { "osm": { "provider": {"name": "mapnik", "mapfile": "/etc/mapnik-osm-data/osm.xml"}, "projection": "spherical mercator" } } }
Создаём каталог для кэша тайлов:
# mkdir /var/lib/tilestache
Осталось запустить TileStache:
# /etc/init.d/tilestache start
Включаем модуль proxy веб-сервера Lighttpd:
# lighty-enable-mod proxy
Настраиваем модуль на проксирование каталога /osm в файле конфигурации модуля proxy /etc/lighttpd/conf-enabled/10-proxy.conf:
server.modules += ( "mod_proxy" ) proxy.server = ( "/osm" => ( ( "host" => "127.0.0.1", "port" => 8000 ) ) )
Будьте внимательны, после строки /osm не должно быть косой черты, иначе тайловый сервер не будет работать должным образом.
Теперь ерезапустим Lighttpd:
# /etc/init.d/lighttpd restart
Теперь повторим уже опробованную ранее на TileLite методику запуска тайлового сервера в режиме FastCGI.
Создадим каталог для настроек TileStache, перенесём в него наш конфиг и поставим flup:
# mkdir /etc/tilestache # mv /etc/tilestache.cfg /etc/tilestache # apt-get install python-flup
В качестве образца для FastCGI-сервера возьмём файл /usr/bin/tilestache-server, скопировав его в каталог /etc/tilestache под именем tilestache.py:
# cp /usr/bin/tilestache-server /etc/tilestache/tilestache.py
Отредактируем его до следующего состояния:
#!/usr/bin/python if __name__ == '__main__': from flup.server.fcgi import WSGIServer import TileStache application = TileStache.WSGITileServer(config='/etc/tilestache/tilestache.cfg', autoreload=True) WSGIServer(application).run()
Дадим права на выполнение:
# chmod +x /etc/tilestache/tilestache.py
И приступим к настройке модуля FastCGI в Lighttpd. Включим его:
# lighty-enable-mod fastcgi
И настроим следующим образом:
$HTTP["url"] =~ "^/osm/" { fastcgi.server += ( "" => ( ( "bin-path" => "/etc/tilestache/tilestache.py", "socket" => "/tmp/tilestache.socket", "max-procs" => 1, "check-local" => "disable", ) ) ) }
В отличие от TileLite, этот сервер может обслуживать несколько слоёв одновременно, поэтому имя слоя нужно передавать в ссылке на запрашиваемый тайл. Поэтому настройка столь необычна. Она передаёт на обслуживание FastCGI-процессу корень веб-сервера лишь в том случае, если запрошена страница, адрес которой начинается с /osm/, то есть - имени слоя. Если нужно настроить несколько слоёв, потребуется доработать регулярное выражение таким образом, чтобы оно совпадало с именем каждого из слоёв.
Поскольку теперь TileStache будет запускаться Lighttpd, настроим права на доступ к каталогу /var/lib/tilestache:
# chmod www-data:www-data /var/lib/tilestache
Теперь остановим и отключим настроенный ранее TileStache, отключим модуль proxy и перезапустим веб-сервер:
# /etc/init.d/tilestache stop # update-rc.d tilestache disable # lighty-disable-mod proxy # /etc/init.d/lighttpd restart
Нет в мире совершенства. Этот сервер хотя и настраивается легко и работает очень устойчиво, но работает во-первых очень медленно, а во-вторых, имеет утечки памяти. Поэтому для использования в нынешнем виде он не пригоден.
Количество, увы, не перешло в качество. Интересно, пользуются ли авторы своими творениями? Пользуются ли мэйнтейнеры из Debian GIS Project поддерживаемыми ими пакетами? Судя по отсутствию сценариев инициализации - нет. А если и пользуются, то скорее всего совместно с Apache и mod_wsgi. Но в таком случае я их не понимаю - раз уж от Apache никуда не деться, почему бы не воспользоваться mod_tile?