+%w(backup-nominatim vacuum-db-nominatim).each do |fname|
+ template "/usr/local/bin/#{fname}" do
+ source "#{fname}.erb"
+ owner "root"
+ group "root"
+ mode 0o755
+ variables :db => node[:nominatim][:dbname]
+ end
+end
+
+## webserver frontend
+
+template "#{build_directory}/settings/ip_blocks.conf" do
+ action :create_if_missing
+ source "ipblocks.erb"
+ owner "nominatim"
+ group "nominatim"
+ mode 0o664
+end
+
+file "#{build_directory}/settings/apache_blocks.conf" do
+ action :create_if_missing
+ owner "nominatim"
+ group "nominatim"
+ mode 0o664
+end
+
+file "#{build_directory}/settings/ip_blocks.map" do
+ action :create_if_missing
+ owner "nominatim"
+ group "nominatim"
+ mode 0o664
+end
+
+include_recipe "apache"
+
+package "php"
+package "php-fpm"
+package "php-pgsql"
+package "php-pear"
+package "php-db"
+package "php-intl"
+
+apache_module "rewrite"
+apache_module "proxy"
+apache_module "proxy_fcgi"
+apache_module "proxy_http"
+apache_module "headers"
+apache_module "reqtimeout"
+
+service "php7.0-fpm" do
+ action [:enable, :start]
+ supports :status => true, :restart => true, :reload => true
+end
+
+node[:nominatim][:fpm_pools].each do |name, data|
+ template "/etc/php/7.0/fpm/pool.d/#{name}.conf" do
+ source "fpm.conf.erb"
+ owner "root"
+ group "root"
+ mode 0o644
+ variables data.merge(:name => name)
+ notifies :reload, "service[php7.0-fpm]"
+ end
+end
+
+ssl_certificate "nominatim.openstreetmap.org" do
+ domains ["nominatim.openstreetmap.org",
+ "nominatim.osm.org",
+ "nominatim.openstreetmap.com",
+ "nominatim.openstreetmap.net",
+ "nominatim.openstreetmaps.org",
+ "nominatim.openmaps.org"]
+ notifies :reload, "service[apache2]"
+end
+
+apache_site "nominatim.openstreetmap.org" do
+ template "apache.erb"
+ directory build_directory
+ variables :pools => node[:nominatim][:fpm_pools]
+end
+
+apache_site "default" do
+ action [:disable]
+end
+
+template "/etc/logrotate.d/apache2" do
+ source "logrotate.apache.erb"
+ owner "root"
+ group "root"
+ mode 0o644
+end
+
+include_recipe "fail2ban"
+
+web_servers = search(:node, "recipes:web\\:\\:frontend").collect do |n| # ~FC010
+ n.ipaddresses(:role => :external)
+end.flatten
+
+fail2ban_filter "nominatim" do
+ failregex '^<HOST> - - \[\] "[^"]+" (408|429) '
+end
+
+fail2ban_jail "nominatim" do
+ filter "nominatim"
+ logpath "/var/log/apache2/nominatim.openstreetmap.org-access.log"
+ ports [80, 443]
+ maxretry 100
+ ignoreips web_servers
+end
+