]> git.openstreetmap.org Git - chef.git/blob - cookbooks/taginfo/recipes/default.rb
e88b24451846dd18b720fadedc05e7f0e1845d85
[chef.git] / cookbooks / taginfo / recipes / default.rb
1 #
2 # Cookbook Name:: taginfo
3 # Recipe:: default
4 #
5 # Copyright 2014, 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 #     https://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 require "json"
21
22 include_recipe "apache"
23 include_recipe "passenger"
24 include_recipe "git"
25
26 package %w[
27   libsqlite3-dev
28   zlib1g-dev
29   libbz2-dev
30   libboost-dev
31   libexpat1-dev
32   libsparsehash-dev
33   libgd-dev
34   libicu-dev
35   libboost-program-options-dev
36   libosmium2-dev
37   libprotozero-dev
38   cmake
39   make
40   g++
41 ]
42
43 package %w[
44   sqlite3
45   osmium-tool
46   pyosmium
47   curl
48   pbzip2
49 ]
50
51 ruby_version = node[:passenger][:ruby_version]
52
53 package "ruby#{ruby_version}"
54
55 gem_package "bundler#{ruby_version}" do
56   package_name "bundler"
57   gem_binary "gem#{ruby_version}"
58   options "--format-executable"
59 end
60
61 apache_module "cache"
62 apache_module "cache_disk"
63 apache_module "headers"
64
65 template "/etc/cron.d/taginfo" do
66   source "cron.erb"
67   owner "root"
68   group "root"
69   mode 0o644
70 end
71
72 directory "/var/log/taginfo" do
73   owner "taginfo"
74   group "taginfo"
75   mode 0o755
76 end
77
78 file "/etc/logrotate.d/taginfo" do
79   action :delete
80 end
81
82 template "/etc/sudoers.d/taginfo" do
83   source "sudoers.erb"
84   owner "root"
85   group "root"
86   mode 0o440
87 end
88
89 node[:taginfo][:sites].each do |site|
90   site_name = site[:name]
91   site_aliases = Array(site[:aliases])
92   directory = site[:directory] || "/srv/#{site_name}"
93   description = site[:description]
94   about = site[:about]
95   icon = site[:icon]
96   contact = site[:contact]
97
98   directory "/var/log/taginfo/#{site_name}" do
99     owner "taginfo"
100     group "taginfo"
101     mode 0o755
102   end
103
104   directory directory do
105     owner "taginfo"
106     group "taginfo"
107     mode 0o755
108   end
109
110   git "#{directory}/taginfo" do
111     action :sync
112     repository "git://github.com/taginfo/taginfo.git"
113     revision "osmorg-taginfo-live"
114     user "taginfo"
115     group "taginfo"
116   end
117
118   settings = Chef::DelayedEvaluator.new do
119     settings = JSON.parse(IO.read("#{directory}/taginfo/taginfo-config-example.json"))
120
121     settings["instance"]["url"] = "https://#{site_name}/"
122     settings["instance"]["description"] = description
123     settings["instance"]["about"] = about
124     settings["instance"]["icon"] = "/img/logo/#{icon}.png"
125     settings["instance"]["contact"] = contact
126     settings["instance"]["access_control_allow_origin"] = ""
127     settings["logging"]["directory"] = "/var/log/taginfo/#{site_name}"
128     settings["opensearch"]["shortname"] = "Taginfo"
129     settings["opensearch"]["contact"] = "webmaster@openstreetmap.org"
130     settings["sources"]["download"] = ""
131     settings["sources"]["create"] = "db languages projects wiki"
132     settings["sources"]["db"]["planetfile"] = "#{directory}/planet/planet.pbf"
133     settings["sources"]["db"]["bindir"] = "#{directory}/taginfo/tagstats"
134     settings["tagstats"]["geodistribution"] = "DenseMmapArray"
135
136     JSON.pretty_generate(settings)
137   end
138
139   file "#{directory}/taginfo-config.json" do
140     owner "taginfo"
141     group "taginfo"
142     mode 0o644
143     content settings
144     notifies :restart, "service[apache2]"
145   end
146
147   execute "#{directory}/taginfo/tagstats/Makefile" do
148     action :nothing
149     command "make"
150     cwd "#{directory}/taginfo/tagstats"
151     user "taginfo"
152     group "taginfo"
153     subscribes :run, "package[libprotozero-dev]"
154     subscribes :run, "package[libosmium2-dev]"
155     subscribes :run, "git[#{directory}/taginfo]"
156     notifies :restart, "service[apache2]"
157   end
158
159   execute "#{directory}/taginfo/Gemfile" do
160     action :nothing
161     command "bundle#{ruby_version} install"
162     cwd "#{directory}/taginfo"
163     user "root"
164     group "root"
165     subscribes :run, "gem_package[bundler#{ruby_version}]"
166     subscribes :run, "git[#{directory}/taginfo]"
167     notifies :restart, "passenger_application[#{directory}/taginfo/web/public]"
168   end
169
170   %w[taginfo/web/tmp bin data data/old download sources planet planet/log].each do |dir|
171     directory "#{directory}/#{dir}" do
172       owner "taginfo"
173       group "taginfo"
174       mode 0o755
175     end
176   end
177
178   remote_file "#{directory}/planet/planet.pbf" do
179     action :create_if_missing
180     source "https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf"
181     owner "taginfo"
182     group "taginfo"
183     mode 0o644
184   end
185
186   template "#{directory}/bin/update-planet" do
187     source "update-planet.erb"
188     owner "taginfo"
189     group "taginfo"
190     mode 0o755
191     variables :directory => directory
192   end
193
194   template "#{directory}/bin/update-taginfo" do
195     source "update-taginfo.erb"
196     owner "taginfo"
197     group "taginfo"
198     mode 0o755
199     variables :directory => directory
200   end
201
202   template "#{directory}/bin/update" do
203     source "update.erb"
204     owner "taginfo"
205     group "taginfo"
206     mode 0o755
207     variables :name => site_name, :directory => directory
208   end
209
210   passenger_application "#{directory}/taginfo/web/public"
211
212   ssl_certificate site_name do
213     domains [site_name] + site_aliases
214     notifies :reload, "service[apache2]"
215   end
216
217   apache_site site_name do
218     template "apache.erb"
219     directory "#{directory}/taginfo/web/public"
220     variables :aliases => site_aliases
221   end
222 end