Tile: tile-expiry (www-data) needs access to planet_osm_nodes table
[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",
314   "planet_osm_nodes" ].each do |table|
315   postgresql_table table do
316     cluster node[:tile][:database][:cluster]
317     database "gis"
318     owner "tile"
319     permissions "tile" => :all, "www-data" => :select
320   end
321 end
322
323 postgresql_munin "gis" do
324   cluster node[:tile][:database][:cluster]
325   database "gis"
326 end
327
328 #if node[:tile][:node_file]
329 #  file node[:tile][:node_file] do
330 #    owner "tile"
331 #    group "tile"
332 #    mode 0664
333 #  end
334 #end
335
336 directory "/var/log/tile" do
337   owner "tile"
338   group "tile"
339   mode 0755
340 end
341
342 package "osm2pgsql"
343 package "osmosis"
344
345 package "ruby"
346 package "rubygems"
347
348 package "libproj-dev"
349 package "libxml2-dev"
350 package "libpq-dev"
351
352 gem_package "proj4rb"
353 gem_package "libxml-ruby"
354 gem_package "pg"
355
356 remote_directory "/usr/local/lib/site_ruby" do
357   source "ruby"
358   owner "root"
359   group "root"
360   mode 0755
361   files_owner "root"
362   files_group "root"
363   files_mode 0644
364 end
365
366 template "/usr/local/bin/expire-tiles" do
367   source "expire-tiles.erb"
368   owner "root"
369   group "root"
370   mode 0755
371 end
372
373 template "/etc/sudoers.d/tile" do
374   source "sudoers.erb"
375   owner "root"
376   group "root"
377   mode 0440
378 end
379
380 directory "/var/lib/replicate" do
381   owner "tile"
382   group "tile"
383   mode 0755
384 end
385
386 template "/var/lib/replicate/configuration.txt" do
387   source "replicate.configuration.erb"
388   owner "tile"
389   group "tile"
390   mode 0644
391 end
392
393 template "/usr/local/bin/replicate" do
394   source "replicate.erb"
395   owner "root"
396   group "root"
397   mode 0755
398 end
399
400 template "/etc/init.d/replicate" do
401   source "replicate.init.erb"
402   owner "root"
403   group "root"
404   mode 0755
405 end
406
407 service "replicate" do
408   action [ :enable, :start ]
409   supports :restart => true
410   subscribes :restart, resources(:template => "/usr/local/bin/replicate")
411   subscribes :restart, resources(:template => "/etc/init.d/replicate")
412 end
413
414 template "/etc/logrotate.d/replicate" do
415   source "replicate.logrotate.erb"
416   owner "root"
417   group "root"
418   mode 0644
419 end
420
421 template "/usr/local/bin/render-lowzoom" do
422   source "render-lowzoom.erb"
423   owner "root"
424   group "root"
425   mode 0755
426 end
427
428 template "/etc/cron.d/render-lowzoom" do
429   source "render-lowzoom.cron.erb"
430   owner "root"
431   group "root"
432   mode 0755
433 end
434
435 template "/etc/rsyslog.d/20-renderd.conf" do
436   source "renderd.rsyslog.erb"
437   owner "root"
438   group "root"
439   mode 0644
440   notifies :restart, "service[rsyslog]"
441 end
442
443 munin_plugin "mod_tile_fresh"
444 munin_plugin "mod_tile_response"
445 munin_plugin "mod_tile_zoom"
446
447 munin_plugin "renderd_processed"
448 munin_plugin "renderd_queue"
449 munin_plugin "renderd_zoom"
450 munin_plugin "renderd_zoom_time"
451
452 munin_plugin "replication_delay" do
453   conf "munin.erb"
454 end