User:Kannix/tile-server-next-level
Jump to navigation
Jump to search
old setup: User:Kannix/tilestache
aim
- restart of tileserver (done)
- no more apache mod_python (depreciated)
- nginx as caching proxy (done)
- restrict to referer (done)
- throttling (to-do)
- serving vector tiles
- tileStache
- nginx > uwsgi_pass > tilestache (done)
- systemd service (to-do)
TileStache using uWSGI
- https://github.com/TileStache/TileStache
- https://github.com/openpolis/tilestache
- https://davidjb.com/blog/2012/06/serving-tilestache-or-another-app-using-uwsgi-against-a-web-sub-directory/
plesk setup
prerequisite (python2 required):
apt install python2-dev apt install python-pip pip2 install virtualenv
switch to your home:
cd /var/www/vhosts/servername.de/tiles.servername.de/cgi-bin mkdir tilestache_app cd tilestache_app
create virtual enviroment (python2):
virtualenv -p /usr/bin/python2 tilestache_app_venv
activate virtual enviroment:
source tilestache_app_venv/bin/activate
set up tilestache and uwsgi in virtual enviroment:
pip install uwsgi pip install -U pillow modestmaps simplejson werkzeug uuid mapbox-vector-tile git clone https://github.com/migurski/TileStache.git python setup.py install cd ..
create tilestache_app.py
import TileStache application = TileStache.WSGITileServer('tilestache.cfg')
create tilestache.cfg (cache 'Test' does nothing):
{ "cache": { "name": "Test", "path": "/tmp/stache", "umask": "0000", "dirs": "portable" }, "layers": { "cemt": { "provider": {"name": "mbtiles", "tileset": "/var/www/vhosts/servername.de/tiles.servername.de/cemt.mbtiles"} }, "cemt-vector-2020": { "provider": {"name": "mbtiles", "tileset": "/var/www/vhosts/servername.de/tiles.servername.de/cemt_EU_2020_uc.mbtiles"} }, "cemt-json-tiled-uc": { "provider": {"name": "mbtiles", "tileset": "/var/www/vhosts/servername.de/tiles.servername.de/cemt_EU_2019_uc.mbtiles"} } } }
first test:
uwsgi --socket 0.0.0.0:8080 --protocol=http -w wsgi lynx http://localhost:8080
create tilestache_app.ini
[uwsgi] module = tilestache_app:application master = true processes = 5 socket = /var/www/vhosts/servername.de/tiles.servername.de/cgi-bin/tilestache_app/tilestache_app.sock # chmod-socket = 777 (testing) chmod-socket = 660 (production) vacuum = true die-on-term = true # protocol = http (only needed for 2nd curl test)
second test:
uwsgi --ini tilestache_app.ini curl --unix-socket /var/www/vhosts/servername.de/tiles.servername.de/cgi-bin/tilestache_app/tilestache_app.sock http://localhost/tilestache/preview.html
pre production:
uwsgi --ini tilestache_app.ini
close virtual enviroment:
deactivate
create /etc/systemd/system/tilestache.service
[Unit] Description=uWSGI instance to serve tilestache After=network.target [Service] User=www1008 Group=psaserv WorkingDirectory=/var/www/vhosts/servername.de/tiles.servername.de/cgi-bin/tilestache_app Environment="PATH=/var/www/vhosts/servername.de/tiles.servername.de/cgi-bin/tilestache_app/tilestache_app_venv/bin" ExecStart=/var/www/vhosts/servername.de/tiles.servername.de/cgi-bin/tilestache_app//tilestache_app_venv/bin/uwsgi --ini tilestache_app.ini [Install] WantedBy=multi-user.target
- systemctl start tilestache
- systemctl enable tilestache
- systemctl status tilestache
- systemctl stop tilestache
nginx reverse proxy
- https://coderwall.com/p/--wgba/nginx-reverse-proxy-cache-for-openstreetmap
- https://www.nginx.com/blog/nginx-caching-guide/
plesk setup
create /etc/nginx/conf.d/tiles_servername_de_cache.conf (loads at nginx start)
proxy_cache_path /var/cache/nginx/tiles.servername.de_proxy levels=1:2 keys_zone=tiles.servername.de_proxy:5m max_size=5g inactive=30d use_temp_path=off; uwsgi_cache_path /var/cache/nginx/tiles.servername.de_uwsgi levels=1:2 keys_zone=tiles.servername.de_uwsgi:5m max_size=5g inactive=30d;
edit /var/www/vhosts/system/tiles.servername.de/conf/vhost_nginx.conf
valid_referers none server_names *.servername.de *.skipperguide.de; if ($invalid_referer){ return 403; } # reverse location ^~ /seamark { add_header X-Cache-Status $upstream_cache_status; proxy_cache tiles.servername.de_proxy; proxy_cache_valid 200 302 10d; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_pass https://t1.openseamap.org; } location ^~ /osm/ { add_header X-Cache-Status $upstream_cache_status; add_header x-cached-by "tiles.servername.de"; proxy_cache tiles.servername.de_proxy; proxy_cache_valid 200 302 10d; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_pass https://tile.openstreetmap.org/; } location ^~ /openriverboatmap/ { add_header X-Cache-Status $upstream_cache_status; add_header x-cached-by "tiles.servername.de"; proxy_cache tiles.servername.de_proxy; proxy_cache_valid 200 302 10d; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_pass http://a.tile.openstreetmap.fr/openriverboatmap/; } # static location ^~ /tiles.py/cemt/ { alias /var/www/vhosts/servername.de/tiles.servername.de/stache/cemt/; add_header x-cached-by "tiles.servername.de"; try_files $uri =404; } # tilestache location ^~ /cemt { add_header X-Cache-Status $upstream_cache_status; add_header x-cached-by "tilestache@tiles.servername.de"; uwsgi_cache tiles.servername.de_uwsgi; uwsgi_cache_key $request_uri; uwsgi_cache_valid 200 302 10d; uwsgi_cache_valid 404 1m; uwsgi_cache_use_stale error timeout http_500 http_503 http_403 http_404 http_429; include uwsgi_params; uwsgi_pass unix:///var/www/vhostsservername.de/tiles.servername.de/cgi-bin/tilestache_app/tilestache_app.sock; } location ^~ /cemt-vector-2020 { add_header Access-Control-Allow-Origin *; add_header X-Cache-Status $upstream_cache_status; add_header x-cached-by "tilestache@tiles.servername.de"; uwsgi_cache tiles.servername.de_uwsgi; uwsgi_cache_key $request_uri; uwsgi_cache_valid 200 302 10d; uwsgi_cache_valid 404 1m; uwsgi_cache_use_stale error timeout http_500 http_503 http_403 http_404 http_429; include uwsgi_params; uwsgi_pass unix:///var/www/vhosts/servername.de/tiles.servername.de/cgi-bin/tilestache_app/tilestache_app.sock; } location ^~ /cemt-json-tiled-uc { add_header Access-Control-Allow-Origin *; add_header X-Cache-Status $upstream_cache_status; add_header x-cached-by "tilestache@tiles.servername.de"; uwsgi_cache tilesservername.de_uwsgi; uwsgi_cache_key $request_uri; uwsgi_cache_valid 200 302 10d; uwsgi_cache_valid 404 1m; uwsgi_cache_use_stale error timeout http_500 http_503 http_403 http_404 http_429; include uwsgi_params; uwsgi_pass unix:///var/www/vhosts/servername.de/tiles.servername.de/cgi-bin/tilestache_app/tilestache_app.sock; }
error logs:
/var/www/vhosts/servername.de/logs/tiles.servername.de