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