Fix pid file handling for tile services
[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 directory "/srv/tile.openstreetmap.org/cgi-bin" do
100   owner "tile"
101   group "tile"
102   mode 0755
103 end
104
105 template "/srv/tile.openstreetmap.org/cgi-bin/export" do
106   source "export.erb"
107   owner "tile"
108   group "tile"
109   mode 0755
110   variables :blocks => blocks
111 end
112
113 directory "/srv/tile.openstreetmap.org/data" do
114   owner "tile"
115   group "tile"
116   mode 0755
117 end
118
119 node[:tile][:data].each do |name,data|
120   url = data[:url]
121   file = "/srv/tile.openstreetmap.org/data/#{File.basename(url)}"
122   directory = "/srv/tile.openstreetmap.org/data/#{data[:directory]}"
123
124   directory directory do
125     owner "tile"
126     group "tile"
127     mode 0755
128   end
129
130   if file =~ /\.tgz$/
131     package "tar"
132
133     execute file do
134       action :nothing
135       command "tar -zxf #{file} -C #{directory}"
136       user "tile"
137       group "tile"
138     end
139   elsif file =~ /\.tar\.bz2$/
140     package "tar"
141
142     execute file do
143       action :nothing
144       command "tar -jxf #{file} -C #{directory}"
145       user "tile"
146       group "tile"
147     end
148   elsif file =~ /\.zip$/
149     package "unzip"
150
151     execute file do
152       action :nothing
153       command "unzip -qq #{file} -d #{directory}"
154       user "tile"
155       group "tile"
156     end
157   end
158
159   if data[:processed]
160     original = "#{directory}/#{data[:original]}"
161     processed = "#{directory}/#{data[:processed]}"
162
163     package "gdal-bin"
164
165     execute processed do
166       action :nothing
167       command "ogr2ogr #{processed} #{original}"
168       user "tile"
169       group "tile"
170       subscribes :run, resources(:execute => file), :immediately
171     end
172   end
173
174   remote_file file do
175     action :create_if_missing 
176     source url
177     owner "tile"
178     group "tile"
179     mode 0644
180     notifies :run, resources(:execute => file), :immediately
181     notifies :restart, resources(:service => "renderd")
182   end
183 end
184
185 nodejs_package "carto"
186 nodejs_package "millstone"
187
188 directory "/srv/tile.openstreetmap.org/styles" do
189   owner "tile"
190   group "tile"
191   mode 0755
192 end
193
194 node[:tile][:styles].each do |name,details|
195   style_directory = "/srv/tile.openstreetmap.org/styles/#{name}"
196   tile_directory = "/srv/tile.openstreetmap.org/tiles/#{name}"
197
198   template "/usr/local/bin/update-lowzoom-#{name}" do
199     source "update-lowzoom.erb"
200     owner "root"
201     group "root"
202     mode 0755
203     variables :style => name
204   end
205
206   template "/etc/init.d/update-lowzoom-#{name}" do
207     source "update-lowzoom.init.erb"
208     owner "root"
209     group "root"
210     mode 0755
211     variables :style => name
212   end
213
214   service "update-lowzoom-#{name}" do
215     action :disable
216     supports :restart => true
217   end
218
219   file "#{tile_directory}/planet-import-complete" do
220     action :create_if_missing
221     owner "tile"
222     group "tile"
223     mode 0444
224   end
225
226   git style_directory do
227     action :sync
228     repository details[:repository]
229     revision details[:revision]
230     user "tile"
231     group "tile"
232   end
233
234   link "#{style_directory}/data" do
235     to "/srv/tile.openstreetmap.org/data"
236     owner "tile"
237     group "tile"
238   end
239
240   execute "#{style_directory}/project.mml" do
241     action :nothing
242     command "carto project.mml > project.xml"
243     cwd style_directory
244     user "tile"
245     group "tile"
246     subscribes :run, "git[#{style_directory}]"
247     notifies :restart, "service[renderd]"
248     notifies :restart, "service[update-lowzoom-#{name}]"
249   end
250 end
251
252 package "postgis"
253
254 postgresql_user "jburgess" do
255   cluster node[:tile][:database][:cluster]
256   superuser true
257 end
258
259 postgresql_user "tomh" do
260   cluster node[:tile][:database][:cluster]
261   superuser true
262 end
263
264 postgresql_user "tile" do
265   cluster node[:tile][:database][:cluster]
266 end
267
268 postgresql_user "www-data" do
269   cluster node[:tile][:database][:cluster]
270 end
271
272 postgresql_database "gis" do
273   cluster node[:tile][:database][:cluster]
274   owner "tile"
275 end
276
277 postgresql_extension "postgis" do
278   cluster node[:tile][:database][:cluster]
279   database "gis"
280 end
281
282 [ "geography_columns",
283   "planet_osm_nodes",
284   "planet_osm_rels",
285   "planet_osm_ways",
286   "raster_columns", 
287   "raster_overviews", 
288   "spatial_ref_sys" ].each do |table|
289   postgresql_table table do
290     cluster node[:tile][:database][:cluster]
291     database "gis"
292     owner "tile"
293     permissions "tile" => :all
294   end
295 end
296
297 [ "geometry_columns", 
298   "planet_osm_line", 
299   "planet_osm_point", 
300   "planet_osm_polygon", 
301   "planet_osm_roads" ].each do |table|
302   postgresql_table table do
303     cluster node[:tile][:database][:cluster]
304     database "gis"
305     owner "tile"
306     permissions "tile" => :all, "www-data" => :select
307   end
308 end
309
310 postgresql_munin "gis" do
311   cluster node[:tile][:database][:cluster]
312   database "gis"
313 end
314
315 #if node[:tile][:node_file]
316 #  file node[:tile][:node_file] do
317 #    owner "tile"
318 #    group "tile"
319 #    mode 0664
320 #  end
321 #end
322
323 directory "/var/log/tile" do
324   owner "tile"
325   group "tile"
326   mode 0755
327 end
328
329 package "osm2pgsql"
330 package "osmosis"
331
332 package "ruby"
333 package "rubygems"
334
335 package "libproj-dev"
336 package "libxml2-dev"
337 package "libpq-dev"
338
339 gem_package "proj4rb"
340 gem_package "libxml-ruby"
341 gem_package "pg"
342
343 remote_directory "/usr/local/lib/site_ruby" do
344   source "ruby"
345   owner "root"
346   group "root"
347   mode 0755
348   files_owner "root"
349   files_group "root"
350   files_mode 0644
351 end
352
353 template "/usr/local/bin/expire-tiles" do
354   source "expire-tiles.erb"
355   owner "root"
356   group "root"
357   mode 0755
358 end
359
360 directory "/var/lib/replicate" do
361   owner "tile"
362   group "tile"
363   mode 0755
364 end
365
366 template "/var/lib/replicate/configuration.txt" do
367   source "replicate.configuration.erb"
368   owner "tile"
369   group "tile"
370   mode 0644
371 end
372
373 template "/usr/local/bin/replicate" do
374   source "replicate.erb"
375   owner "root"
376   group "root"
377   mode 0755
378 end
379
380 template "/etc/init.d/replicate" do
381   source "replicate.init.erb"
382   owner "root"
383   group "root"
384   mode 0755
385 end
386
387 service "replicate" do
388   action [ :enable, :start ]
389   supports :restart => true
390   subscribes :restart, resources(:template => "/usr/local/bin/replicate")
391   subscribes :restart, resources(:template => "/etc/init.d/replicate")
392 end
393
394 template "/etc/logrotate.d/replicate" do
395   source "replicate.logrotate.erb"
396   owner "root"
397   group "root"
398   mode 0644
399 end
400
401 munin_plugin "mod_tile_fresh"
402 munin_plugin "mod_tile_response"
403 munin_plugin "mod_tile_zoom"
404
405 munin_plugin "renderd_processed"
406 munin_plugin "renderd_queue"
407 munin_plugin "renderd_zoom"
408 munin_plugin "renderd_zoom_time"
409
410 munin_plugin "replication_delay" do
411   conf "munin.erb"
412 end
413