]> git.openstreetmap.org Git - chef.git/blob - cookbooks/overpass/recipes/default.rb
Use volume for nested podman container storage
[chef.git] / cookbooks / overpass / recipes / default.rb
1 #
2 # Cookbook:: overpass
3 # Recipe:: default
4 #
5 # Copyright:: 2021, 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 include_recipe "apache"
21 include_recipe "prometheus"
22 include_recipe "ruby"
23
24 username = "overpass"
25 basedir = "/srv/query.openstreetmap.org"
26 web_passwords = data_bag_item("web", "passwords")
27
28 group username do
29   gid 528
30   append true
31 end
32
33 user username do
34   uid 528
35   gid 528
36   comment "query.openstreetmap.org"
37   home basedir
38   shell "/usr/sbin/nologin"
39   manage_home true
40 end
41
42 %w[bin site diffs db src].each do |dirname|
43   directory "#{basedir}/#{dirname}" do
44     owner username
45     group username
46     mode "755"
47     recursive true
48   end
49 end
50
51 ## Install overpass from source
52
53 srcdir = "#{basedir}/src/osm-3s_v#{node[:overpass][:version]}"
54
55 package %w[
56   build-essential
57   libexpat1-dev
58   zlib1g-dev
59   liblz4-dev
60   pyosmium
61   osmium-tool
62 ]
63
64 remote_file "#{srcdir}.tar.gz" do
65   action :create_if_missing
66   source "https://dev.overpass-api.de/releases/osm-3s_v#{node[:overpass][:version]}.tar.gz"
67   owner username
68   group username
69   mode "644"
70 end
71
72 execute "source_tarball" do
73   cwd "#{basedir}/src"
74   command "tar -xf #{srcdir}.tar.gz"
75   user username
76   notifies :run, "execute[install_overpass]"
77   not_if { ::File.exist?(srcdir) }
78 end
79
80 execute "install_overpass" do
81   action :nothing
82   user username
83   cwd srcdir
84   command "./configure --enable-lz4 --prefix=#{basedir} && make -j#{node.cpu_cores} install"
85   notifies :restart, "service[overpass-dispatcher]"
86   notifies :restart, "service[overpass-area-dispatcher]"
87 end
88
89 ## Setup Apache
90
91 gem_package "rotp" do
92   gem_binary node[:ruby][:gem]
93 end
94
95 directory "#{basedir}/apache" do
96   owner "root"
97   group "root"
98   mode "755"
99 end
100
101 template "#{basedir}/apache/totp-filter" do
102   source "totp-filter.erb"
103   owner "root"
104   group "root"
105   mode "755"
106   variables :totp_key => web_passwords["totp_key"]
107 end
108
109 ssl_certificate node[:fqdn] do
110   domains [node[:fqdn],
111            node[:overpass][:fqdn]]
112   notifies :reload, "service[apache2]"
113 end
114
115 apache_module "cgi"
116 apache_module "headers"
117 apache_module "rewrite"
118
119 apache_site "default" do
120   action :disable
121 end
122
123 apache_site node[:overpass][:fqdn] do
124   template "apache.erb"
125   directory "#{basedir}/site"
126   variables :script_directory => "#{basedir}/cgi-bin"
127 end
128
129 ## Overpass deamons
130
131 meta_map_short = {
132   "no" => "",
133   "meta" => "--meta",
134   "attic" => "--attic"
135 }
136
137 logdir = node[:overpass][:logdir]
138
139 directory logdir do
140   owner username
141   group username
142   mode "755"
143   recursive true
144 end
145
146 %w[overpass-update-db overpass-update-areas].each do |fname|
147   template "#{basedir}/bin/#{fname}" do
148     source "#{fname}.erb"
149     owner "overpass"
150     group "overpass"
151     mode "700"
152     variables :basedir => basedir, :srcdir => srcdir
153   end
154 end
155
156 template "#{basedir}/bin/overpass-import-db" do
157   source "overpass-import-db.erb"
158   owner "root"
159   group "root"
160   mode "755"
161   variables :basedir => basedir, :username => username, :srcdir => srcdir
162 end
163
164 systemd_service "overpass-dispatcher" do
165   description "Overpass Main Dispatcher"
166   wants ["overpass-area-dispatcher.service"]
167   working_directory basedir
168   exec_start "#{basedir}/bin/dispatcher --allow-duplicate-queries=yes --osm-base #{meta_map_short[node[:overpass][:meta_mode]]} --db-dir=#{basedir}/db --rate-limit=#{node[:overpass][:rate_limit]} --space=#{node[:overpass][:dispatcher_space]}"
169   exec_stop "#{basedir}/bin/dispatcher --osm-base --terminate"
170   standard_output "append:#{logdir}/osm_base.log"
171   user username
172 end
173
174 service "overpass-dispatcher" do
175   action [:enable]
176 end
177
178 systemd_service "overpass-area-dispatcher" do
179   description "Overpass Area Dispatcher"
180   after ["overpass-dispatcher.service"]
181   working_directory basedir
182   exec_start "#{basedir}/bin/dispatcher --allow-duplicate-queries=yes --areas #{meta_map_short[node[:overpass][:meta_mode]]} --db-dir=#{basedir}/db"
183   exec_stop "#{basedir}/bin/dispatcher --areas --terminate"
184   standard_output "append:#{logdir}/areas.log"
185   user username
186 end
187
188 service "overpass-area-dispatcher" do
189   action [:enable]
190 end
191
192 systemd_service "overpass-update" do
193   description "Overpass Update Application"
194   after ["overpass-dispatcher.service"]
195   wants ["overpass-area-processor.service"]
196   working_directory basedir
197   exec_start "#{basedir}/bin/overpass-update-db"
198   standard_output "append:#{logdir}/update.log"
199   user username
200   restart "on-success"
201 end
202
203 if node[:overpass][:meta_mode] == "attic"
204   systemd_service "overpass-area-processor" do
205     description "Overpass Area Processor"
206     after ["overpass-area-dispatcher.service", "overpass-update.service"]
207     working_directory basedir
208     exec_start "#{basedir}/bin/overpass-update-areas"
209     standard_output "append:#{logdir}/area-processor.log"
210     restart "on-success"
211     nice 19
212     user username
213   end
214 else
215   systemd_service "overpass-area-processor" do
216     description "Overpass Area Processor"
217     after ["overpass-area-dispatcher.service", "overpass-update.service"]
218     working_directory basedir
219     exec_start "#{basedir}/bin/osm3s_query --progress --rules"
220     standard_input "file:#{srcdir}/rules/areas.osm3s"
221     standard_output "append:#{logdir}/area-processor.log"
222     restart "on-success"
223     nice 19
224     user username
225   end
226 end
227
228 systemd_timer "overpass-area-processor" do
229   action :delete
230 end
231
232 service "overpass-area-processor" do
233   action [:disable]
234 end
235
236 template "/etc/logrotate.d/overpass" do
237   source "logrotate.erb"
238   owner "root"
239   group "root"
240   mode "644"
241   variables :logdir => logdir
242 end
243
244 prometheus_exporter "overpass" do
245   port 9898
246   user username
247   restrict_address_families "AF_UNIX"
248   options [
249     "--overpass.base-directory=#{basedir}"
250   ]
251 end