]> git.openstreetmap.org Git - chef.git/blob - cookbooks/tile/recipes/default.rb
Sort tile cache addresses into a deterministic order (tile cookbook)
[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   file "#{tile_directory}/planet-import-complete" do
199     action :create_if_missing
200     owner "tile"
201     group "tile"
202     mode 0444
203   end
204
205   git style_directory do
206     action :sync
207     repository details[:repository]
208     revision details[:revision]
209     user "tile"
210     group "tile"
211   end
212
213   link "#{style_directory}/data" do
214     to "/srv/tile.openstreetmap.org/data"
215     owner "tile"
216     group "tile"
217   end
218
219   execute "#{style_directory}/project.mml" do
220     command "carto project.mml > project.xml"
221     cwd style_directory
222     user "tile"
223     group "tile"
224     not_if do
225       File.exist?("#{style_directory}/project.xml") and
226       File.mtime("#{style_directory}/project.xml") >= File.mtime("#{style_directory}/project.mml")
227     end
228     notifies :touch, "file[#{tile_directory}/planet-import-complete]"
229     notifies :restart, "service[renderd]"
230   end
231 end
232
233 package "postgis"
234
235 postgresql_user "jburgess" do
236   cluster node[:tile][:database][:cluster]
237   superuser true
238 end
239
240 postgresql_user "tomh" do
241   cluster node[:tile][:database][:cluster]
242   superuser true
243 end
244
245 postgresql_user "tile" do
246   cluster node[:tile][:database][:cluster]
247 end
248
249 postgresql_user "www-data" do
250   cluster node[:tile][:database][:cluster]
251 end
252
253 postgresql_database "gis" do
254   cluster node[:tile][:database][:cluster]
255   owner "tile"
256 end
257
258 postgresql_extension "postgis" do
259   cluster node[:tile][:database][:cluster]
260   database "gis"
261 end
262
263 [ "geography_columns",
264   "planet_osm_nodes",
265   "planet_osm_rels",
266   "planet_osm_ways",
267   "raster_columns", 
268   "raster_overviews", 
269   "spatial_ref_sys" ].each do |table|
270   postgresql_table table do
271     cluster node[:tile][:database][:cluster]
272     database "gis"
273     owner "tile"
274     permissions "tile" => :all
275   end
276 end
277
278 [ "geometry_columns", 
279   "planet_osm_line", 
280   "planet_osm_point", 
281   "planet_osm_polygon", 
282   "planet_osm_roads" ].each do |table|
283   postgresql_table table do
284     cluster node[:tile][:database][:cluster]
285     database "gis"
286     owner "tile"
287     permissions "tile" => :all, "www-data" => :select
288   end
289 end
290
291 postgresql_munin "gis" do
292   cluster node[:tile][:database][:cluster]
293   database "gis"
294 end
295
296 #if node[:tile][:node_file]
297 #  file node[:tile][:node_file] do
298 #    owner "tile"
299 #    group "tile"
300 #    mode 0664
301 #  end
302 #end
303
304 package "osm2pgsql"
305 package "osmosis"
306
307 package "ruby"
308 package "rubygems"
309
310 package "libproj-dev"
311 package "libxml2-dev"
312 package "libpq-dev"
313
314 gem_package "proj4rb"
315 gem_package "libxml-ruby"
316 gem_package "pg"
317
318 remote_directory "/usr/local/lib/site_ruby" do
319   source "ruby"
320   owner "root"
321   group "root"
322   mode 0755
323   files_owner "root"
324   files_group "root"
325   files_mode 0644
326 end
327
328 template "/usr/local/bin/expire-tiles" do
329   source "expire-tiles.erb"
330   owner "root"
331   group "root"
332   mode 0755
333 end
334
335 directory "/var/lib/replicate" do
336   owner "tile"
337   group "tile"
338   mode 0755
339 end
340
341 directory "/var/log/replicate" do
342   owner "tile"
343   group "tile"
344   mode 0755
345 end
346
347 template "/var/lib/replicate/configuration.txt" do
348   source "replicate.configuration.erb"
349   owner "tile"
350   group "tile"
351   mode 0644
352 end
353
354 template "/usr/local/bin/replicate" do
355   source "replicate.erb"
356   owner "root"
357   group "root"
358   mode 0755
359 end
360
361 template "/etc/init.d/replicate" do
362   source "replicate.init.erb"
363   owner "root"
364   group "root"
365   mode 0755
366 end
367
368 service "replicate" do
369   action [ :enable, :start ]
370   supports :restart => true
371   subscribes :restart, resources(:template => "/usr/local/bin/replicate")
372   subscribes :restart, resources(:template => "/etc/init.d/replicate")
373 end
374
375 template "/etc/logrotate.d/replicate" do
376   source "replicate.logrotate.erb"
377   owner "root"
378   group "root"
379   mode 0644
380 end
381
382 munin_plugin "mod_tile_fresh"
383 munin_plugin "mod_tile_response"
384 munin_plugin "mod_tile_zoom"
385
386 munin_plugin "renderd_processed"
387 munin_plugin "renderd_queue"
388 munin_plugin "renderd_zoom"
389 munin_plugin "renderd_zoom_time"
390
391 munin_plugin "replication_delay" do
392   conf "munin.erb"
393 end
394