8f792a37837328796561f509b717f2eb1c1a8197
[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   remote_file file do
181     action :create_if_missing 
182     source url
183     owner "tile"
184     group "tile"
185     mode 0644
186     notifies :run, resources(:execute => file), :immediately
187     notifies :restart, resources(:service => "renderd")
188   end
189 end
190
191 nodejs_package "carto"
192 nodejs_package "millstone"
193
194 directory "/srv/tile.openstreetmap.org/styles" do
195   owner "tile"
196   group "tile"
197   mode 0755
198 end
199
200 node[:tile][:styles].each do |name,details|
201   style_directory = "/srv/tile.openstreetmap.org/styles/#{name}"
202   tile_directory = "/srv/tile.openstreetmap.org/tiles/#{name}"
203
204   template "/usr/local/bin/update-lowzoom-#{name}" do
205     source "update-lowzoom.erb"
206     owner "root"
207     group "root"
208     mode 0755
209     variables :style => name
210   end
211
212   template "/etc/init.d/update-lowzoom-#{name}" do
213     source "update-lowzoom.init.erb"
214     owner "root"
215     group "root"
216     mode 0755
217     variables :style => name
218   end
219
220   service "update-lowzoom-#{name}" do
221     action :disable
222     supports :restart => true
223   end
224
225   directory tile_directory do
226     owner "tile"
227     group "www-data"
228     mode 0775
229   end
230
231   file "#{tile_directory}/planet-import-complete" do
232     action :create_if_missing
233     owner "tile"
234     group "tile"
235     mode 0444
236   end
237
238   git style_directory do
239     action :sync
240     repository details[:repository]
241     revision details[:revision]
242     user "tile"
243     group "tile"
244   end
245
246   link "#{style_directory}/data" do
247     to "/srv/tile.openstreetmap.org/data"
248     owner "tile"
249     group "tile"
250   end
251
252   execute "#{style_directory}/project.mml" do
253     action :nothing
254     command "carto project.mml > project.xml"
255     cwd style_directory
256     user "tile"
257     group "tile"
258     subscribes :run, "git[#{style_directory}]"
259     notifies :restart, "service[renderd]"
260     notifies :restart, "service[update-lowzoom-#{name}]"
261   end
262 end
263
264 package "postgis"
265
266 postgresql_user "jburgess" do
267   cluster node[:tile][:database][:cluster]
268   superuser true
269 end
270
271 postgresql_user "tomh" do
272   cluster node[:tile][:database][:cluster]
273   superuser true
274 end
275
276 postgresql_user "tile" do
277   cluster node[:tile][:database][:cluster]
278 end
279
280 postgresql_user "www-data" do
281   cluster node[:tile][:database][:cluster]
282 end
283
284 postgresql_database "gis" do
285   cluster node[:tile][:database][:cluster]
286   owner "tile"
287 end
288
289 postgresql_extension "postgis" do
290   cluster node[:tile][:database][:cluster]
291   database "gis"
292 end
293
294 [ "geography_columns",
295   "planet_osm_nodes",
296   "planet_osm_rels",
297   "planet_osm_ways",
298   "raster_columns", 
299   "raster_overviews", 
300   "spatial_ref_sys" ].each do |table|
301   postgresql_table table do
302     cluster node[:tile][:database][:cluster]
303     database "gis"
304     owner "tile"
305     permissions "tile" => :all
306   end
307 end
308
309 [ "geometry_columns", 
310   "planet_osm_line", 
311   "planet_osm_point", 
312   "planet_osm_polygon", 
313   "planet_osm_roads" ].each do |table|
314   postgresql_table table do
315     cluster node[:tile][:database][:cluster]
316     database "gis"
317     owner "tile"
318     permissions "tile" => :all, "www-data" => :select
319   end
320 end
321
322 postgresql_munin "gis" do
323   cluster node[:tile][:database][:cluster]
324   database "gis"
325 end
326
327 #if node[:tile][:node_file]
328 #  file node[:tile][:node_file] do
329 #    owner "tile"
330 #    group "tile"
331 #    mode 0664
332 #  end
333 #end
334
335 directory "/var/log/tile" do
336   owner "tile"
337   group "tile"
338   mode 0755
339 end
340
341 package "osm2pgsql"
342 package "osmosis"
343
344 package "ruby"
345 package "rubygems"
346
347 package "libproj-dev"
348 package "libxml2-dev"
349 package "libpq-dev"
350
351 gem_package "proj4rb"
352 gem_package "libxml-ruby"
353 gem_package "pg"
354
355 remote_directory "/usr/local/lib/site_ruby" do
356   source "ruby"
357   owner "root"
358   group "root"
359   mode 0755
360   files_owner "root"
361   files_group "root"
362   files_mode 0644
363 end
364
365 template "/usr/local/bin/expire-tiles" do
366   source "expire-tiles.erb"
367   owner "root"
368   group "root"
369   mode 0755
370 end
371
372 template "/etc/sudoers.d/tile" do
373   source "sudoers.erb"
374   owner "root"
375   group "root"
376   mode 0440
377 end
378
379 directory "/var/lib/replicate" do
380   owner "tile"
381   group "tile"
382   mode 0755
383 end
384
385 template "/var/lib/replicate/configuration.txt" do
386   source "replicate.configuration.erb"
387   owner "tile"
388   group "tile"
389   mode 0644
390 end
391
392 template "/usr/local/bin/replicate" do
393   source "replicate.erb"
394   owner "root"
395   group "root"
396   mode 0755
397 end
398
399 template "/etc/init.d/replicate" do
400   source "replicate.init.erb"
401   owner "root"
402   group "root"
403   mode 0755
404 end
405
406 service "replicate" do
407   action [ :enable, :start ]
408   supports :restart => true
409   subscribes :restart, resources(:template => "/usr/local/bin/replicate")
410   subscribes :restart, resources(:template => "/etc/init.d/replicate")
411 end
412
413 template "/etc/logrotate.d/replicate" do
414   source "replicate.logrotate.erb"
415   owner "root"
416   group "root"
417   mode 0644
418 end
419
420 template "/usr/local/bin/render-lowzoom" do
421   source "render-lowzoom.erb"
422   owner "root"
423   group "root"
424   mode 0755
425 end
426
427 template "/etc/cron.d/render-lowzoom" do
428   source "render-lowzoom.cron.erb"
429   owner "root"
430   group "root"
431   mode 0755
432 end
433
434 template "/etc/rsyslog.d/20-renderd.conf" do
435   source "renderd.rsyslog.erb"
436   owner "root"
437   group "root"
438   mode 0644
439   notifies :restart, "service[rsyslog]"
440 end
441
442 munin_plugin "mod_tile_fresh"
443 munin_plugin "mod_tile_response"
444 munin_plugin "mod_tile_zoom"
445
446 munin_plugin "renderd_processed"
447 munin_plugin "renderd_queue"
448 munin_plugin "renderd_zoom"
449 munin_plugin "renderd_zoom_time"
450
451 munin_plugin "replication_delay" do
452   conf "munin.erb"
453 end