Add mod_tile_latency
[chef.git] / cookbooks / tile / recipes / default.rb
1 #
2 # Cookbook Name:: tile
3 # Recipe:: default
4 #
5 # Copyright 2013, OpenStreetMap Foundation
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 #     http://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 #
19
20 include_recipe "apache"
21 include_recipe "git"
22 include_recipe "nodejs"
23 include_recipe "postgresql"
24 include_recipe "tools"
25
26 blocks = data_bag_item("tile", "blocks")
27
28 apache_module "alias"
29 apache_module "expires"
30 apache_module "headers"
31 apache_module "remoteip"
32 apache_module "rewrite"
33
34 package "libapache2-mod-tile"
35
36 apache_module "tile" do
37   conf "tile.conf.erb"
38 end
39
40 tilecaches = search(:node, "roles:tilecache").sort_by { |n| n[:hostname] }
41
42 apache_site "default" do
43   action [ :disable ]
44 end
45
46 apache_site "tile.openstreetmap.org" do
47   template "apache.erb"
48   variables :caches => tilecaches
49 end
50
51 template "/etc/logrotate.d/apache2" do
52   source "logrotate.apache.erb"
53   owner "root"
54   group "root"
55   mode 0644
56 end
57
58 directory "/srv/tile.openstreetmap.org" do
59   owner "tile"
60   group "tile"
61   mode 0755
62 end
63
64 package "renderd"
65
66 service "renderd" do
67   action [ :enable, :start ]
68   supports :status => false, :restart => true, :reload => false
69 end
70
71 directory node[:tile][:tile_directory] do
72   owner "tile"
73   group "www-data"
74   mode 0775
75 end
76
77 if node[:tile][:tile_directory] != "/srv/tile.openstreetmap.org/tiles"
78   link "/srv/tile.openstreetmap.org/tiles" do
79     to node[:tile][:tile_directory]
80   end
81 end
82
83 template "/etc/renderd.conf" do
84   source "renderd.conf.erb"
85   owner "root"
86   group "root"
87   mode 0644
88   notifies :reload, resources(:service => "apache2")
89   notifies :restart, resources(:service => "renderd")
90 end
91
92 remote_directory "/srv/tile.openstreetmap.org/html" do
93   source "html"
94   owner "tile"
95   group "tile"
96   mode 0755
97   files_owner "tile"
98   files_group "tile"
99   files_mode 0644
100 end
101
102 package "python-cairo"
103 package "python-mapnik"
104
105 directory "/srv/tile.openstreetmap.org/cgi-bin" do
106   owner "tile"
107   group "tile"
108   mode 0755
109 end
110
111 template "/srv/tile.openstreetmap.org/cgi-bin/export" do
112   source "export.erb"
113   owner "tile"
114   group "tile"
115   mode 0755
116   variables :blocks => blocks
117 end
118
119 directory "/srv/tile.openstreetmap.org/data" do
120   owner "tile"
121   group "tile"
122   mode 0755
123 end
124
125 node[:tile][:data].each do |name,data|
126   url = data[:url]
127   file = "/srv/tile.openstreetmap.org/data/#{File.basename(url)}"
128   directory = "/srv/tile.openstreetmap.org/data/#{data[:directory]}"
129
130   directory directory do
131     owner "tile"
132     group "tile"
133     mode 0755
134   end
135
136   if file =~ /\.tgz$/
137     package "tar"
138
139     execute file do
140       action :nothing
141       command "tar -zxf #{file} -C #{directory}"
142       user "tile"
143       group "tile"
144     end
145   elsif file =~ /\.tar\.bz2$/
146     package "tar"
147
148     execute file do
149       action :nothing
150       command "tar -jxf #{file} -C #{directory}"
151       user "tile"
152       group "tile"
153     end
154   elsif file =~ /\.zip$/
155     package "unzip"
156
157     execute file do
158       action :nothing
159       command "unzip -qq #{file} -d #{directory}"
160       user "tile"
161       group "tile"
162     end
163   end
164
165   if data[:processed]
166     original = "#{directory}/#{data[:original]}"
167     processed = "#{directory}/#{data[:processed]}"
168
169     package "gdal-bin"
170
171     execute processed do
172       action :nothing
173       command "ogr2ogr #{processed} #{original}"
174       user "tile"
175       group "tile"
176       subscribes :run, resources(:execute => file), :immediately
177     end
178   end
179
180   execute "#{file}_shapeindex" do
181     action :nothing
182     command "find #{directory} -type f -iname '*.shp' -print0 | xargs -0 --no-run-if-empty shapeindex --shape_files"
183     user "tile"
184     user "tile"
185     subscribes :run, resources(:execute => file), :immediately
186   end
187
188   remote_file file do
189     action :create_if_missing 
190     source url
191     owner "tile"
192     group "tile"
193     mode 0644
194     notifies :run, resources(:execute => file), :immediately
195     notifies :restart, resources(:service => "renderd")
196   end
197 end
198
199 nodejs_package "carto"
200 nodejs_package "millstone"
201
202 directory "/srv/tile.openstreetmap.org/styles" do
203   owner "tile"
204   group "tile"
205   mode 0755
206 end
207
208 node[:tile][:styles].each do |name,details|
209   style_directory = "/srv/tile.openstreetmap.org/styles/#{name}"
210   tile_directory = "/srv/tile.openstreetmap.org/tiles/#{name}"
211
212   template "/usr/local/bin/update-lowzoom-#{name}" do
213     source "update-lowzoom.erb"
214     owner "root"
215     group "root"
216     mode 0755
217     variables :style => name
218   end
219
220   template "/etc/init.d/update-lowzoom-#{name}" do
221     source "update-lowzoom.init.erb"
222     owner "root"
223     group "root"
224     mode 0755
225     variables :style => name
226   end
227
228   service "update-lowzoom-#{name}" do
229     action :disable
230     supports :restart => true
231   end
232
233   directory tile_directory do
234     owner "tile"
235     group "www-data"
236     mode 0775
237   end
238
239   file "#{tile_directory}/planet-import-complete" do
240     action :create_if_missing
241     owner "tile"
242     group "tile"
243     mode 0444
244   end
245
246   git style_directory do
247     action :sync
248     repository details[:repository]
249     revision details[:revision]
250     user "tile"
251     group "tile"
252   end
253
254   link "#{style_directory}/data" do
255     to "/srv/tile.openstreetmap.org/data"
256     owner "tile"
257     group "tile"
258   end
259
260   execute "#{style_directory}/project.mml" do
261     action :nothing
262     command "carto project.mml > project.xml"
263     cwd style_directory
264     user "tile"
265     group "tile"
266     subscribes :run, "git[#{style_directory}]"
267     notifies :restart, "service[renderd]", :immediately
268     notifies :restart, "service[update-lowzoom-#{name}]"
269   end
270 end
271
272 package "postgis"
273
274 postgresql_user "jburgess" do
275   cluster node[:tile][:database][:cluster]
276   superuser true
277 end
278
279 postgresql_user "tomh" do
280   cluster node[:tile][:database][:cluster]
281   superuser true
282 end
283
284 postgresql_user "tile" do
285   cluster node[:tile][:database][:cluster]
286 end
287
288 postgresql_user "www-data" do
289   cluster node[:tile][:database][:cluster]
290 end
291
292 postgresql_database "gis" do
293   cluster node[:tile][:database][:cluster]
294   owner "tile"
295 end
296
297 postgresql_extension "postgis" do
298   cluster node[:tile][:database][:cluster]
299   database "gis"
300 end
301
302 [ "geography_columns",
303   "planet_osm_nodes",
304   "planet_osm_rels",
305   "planet_osm_ways",
306   "raster_columns", 
307   "raster_overviews", 
308   "spatial_ref_sys" ].each do |table|
309   postgresql_table table do
310     cluster node[:tile][:database][:cluster]
311     database "gis"
312     owner "tile"
313     permissions "tile" => :all
314   end
315 end
316
317 [ "geometry_columns", 
318   "planet_osm_line", 
319   "planet_osm_point", 
320   "planet_osm_polygon", 
321   "planet_osm_roads",
322   "planet_osm_nodes" ].each do |table|
323   postgresql_table table do
324     cluster node[:tile][:database][:cluster]
325     database "gis"
326     owner "tile"
327     permissions "tile" => :all, "www-data" => :select
328   end
329 end
330
331 postgresql_munin "gis" do
332   cluster node[:tile][:database][:cluster]
333   database "gis"
334 end
335
336 #if node[:tile][:node_file]
337 #  file node[:tile][:node_file] do
338 #    owner "tile"
339 #    group "tile"
340 #    mode 0664
341 #  end
342 #end
343
344 directory "/var/log/tile" do
345   owner "tile"
346   group "tile"
347   mode 0755
348 end
349
350 package "osm2pgsql"
351 package "osmosis"
352
353 package "ruby"
354 package "rubygems"
355
356 package "libproj-dev"
357 package "libxml2-dev"
358 package "libpq-dev"
359
360 gem_package "proj4rb"
361 gem_package "libxml-ruby"
362 gem_package "pg"
363
364 remote_directory "/usr/local/lib/site_ruby" do
365   source "ruby"
366   owner "root"
367   group "root"
368   mode 0755
369   files_owner "root"
370   files_group "root"
371   files_mode 0644
372 end
373
374 template "/usr/local/bin/expire-tiles" do
375   source "expire-tiles.erb"
376   owner "root"
377   group "root"
378   mode 0755
379 end
380
381 template "/etc/sudoers.d/tile" do
382   source "sudoers.erb"
383   owner "root"
384   group "root"
385   mode 0440
386 end
387
388 directory "/var/lib/replicate" do
389   owner "tile"
390   group "tile"
391   mode 0755
392 end
393
394 template "/var/lib/replicate/configuration.txt" do
395   source "replicate.configuration.erb"
396   owner "tile"
397   group "tile"
398   mode 0644
399 end
400
401 template "/usr/local/bin/replicate" do
402   source "replicate.erb"
403   owner "root"
404   group "root"
405   mode 0755
406 end
407
408 template "/etc/init.d/replicate" do
409   source "replicate.init.erb"
410   owner "root"
411   group "root"
412   mode 0755
413 end
414
415 service "replicate" do
416   action [ :enable, :start ]
417   supports :restart => true
418   subscribes :restart, resources(:template => "/usr/local/bin/replicate")
419   subscribes :restart, resources(:template => "/etc/init.d/replicate")
420 end
421
422 template "/etc/logrotate.d/replicate" do
423   source "replicate.logrotate.erb"
424   owner "root"
425   group "root"
426   mode 0644
427 end
428
429 template "/usr/local/bin/render-lowzoom" do
430   source "render-lowzoom.erb"
431   owner "root"
432   group "root"
433   mode 0755
434 end
435
436 template "/etc/cron.d/render-lowzoom" do
437   source "render-lowzoom.cron.erb"
438   owner "root"
439   group "root"
440   mode 0755
441 end
442
443 template "/etc/rsyslog.d/20-renderd.conf" do
444   source "renderd.rsyslog.erb"
445   owner "root"
446   group "root"
447   mode 0644
448   notifies :restart, "service[rsyslog]"
449 end
450
451 munin_plugin "mod_tile_fresh"
452 munin_plugin "mod_tile_response"
453 munin_plugin "mod_tile_zoom"
454 munin_plugin "mod_tile_latency"
455
456 munin_plugin "renderd_processed"
457 munin_plugin "renderd_queue"
458 munin_plugin "renderd_zoom"
459 munin_plugin "renderd_zoom_time"
460
461 munin_plugin "replication_delay" do
462   conf "munin.erb"
463 end