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