- mode "644"
- end
-
- %w[gb_postcodes.csv.gz us_postcodes.csv.gz].each do |fname|
- remote_file "#{project_directory}/#{fname}" do
- action :create
- source "https://nominatim.org/data/#{fname}"
- owner "nominatim"
- group "nominatim"
- mode "644"
- end
- end
-
- # Webserver + frontend
-
- %w[user_agent referrer email generic].each do |name|
- file "#{cfg_directory}/nginx_blocked_#{name}.conf" do
- action :create_if_missing
- owner "nominatim"
- group "adm"
- mode "664"
- end
- end
-
- if node[:nominatim][:api_flavour] == "php"
- node[:nominatim][:fpm_pools].each do |name, data|
- php_fpm name do
- port data[:port]
- pm data[:pm]
- pm_max_children data[:max_children]
- pm_start_servers 20
- pm_min_spare_servers 10
- pm_max_spare_servers 20
- pm_max_requests 10000
- prometheus_port data[:prometheus_port]
- end
- end
- elsif node[:nominatim][:api_flavour] == "python"
- systemd_service "nominatim" do
- description "Nominatim running as a gunicorn application"
- user "www-data"
- group "www-data"
- working_directory project_directory
- standard_output "append:#{node[:nominatim][:logdir]}/gunicorn.log"
- standard_error "inherit"
- exec_start "#{python_directory}/bin/gunicorn --max-requests 200000 -b unix:/run/gunicorn-nominatim.openstreetmap.org.sock -w #{node[:nominatim][:api_workers]} -k uvicorn.workers.UvicornWorker nominatim_api.server.falcon.server:run_wsgi"
- exec_reload "/bin/kill -s HUP $MAINPID"
- environment :PYTHONPATH => "/usr/local/lib/nominatim/lib-python/"
- kill_mode "mixed"
- timeout_stop_sec 5
- private_tmp true
- requires "nominatim.socket"
- after "network.target"
- end
-
- systemd_socket "nominatim" do
- description "Gunicorn socket for Nominatim"
- listen_stream "/run/gunicorn-nominatim.openstreetmap.org.sock"
- socket_user "www-data"
- end
- end
-
- ssl_certificate node[:fqdn] do
- domains [node[:fqdn],
- "nominatim.openstreetmap.org",
- "nominatim.osm.org",
- "nominatim.openstreetmap.com",
- "nominatim.openstreetmap.net",
- "nominatim.openstreetmaps.org",
- "nominatim.openmaps.org",
- "nominatim.qgis.org"]
- notifies :reload, "service[nginx]"
- end
-
- include_recipe "nginx"
-
- nginx_site "default" do
- action [:delete]
- end
-
- frontends = search(:node, "recipes:web\\:\\:frontend").sort_by(&:name)
-
- nginx_site "nominatim" do
- template "nginx.erb"
- directory project_directory
- variables :pools => node[:nominatim][:fpm_pools],
- :frontends => frontends,
- :confdir => "#{basedir}/etc",
- :ui_directory => ui_directory
- end
-
- template "/etc/logrotate.d/nginx" do
- source "logrotate.nginx.erb"
- owner "root"
- group "root"
- mode "644"
- end
-
- # Updates
-
- %w[nominatim-update
- nominatim-update-source
- nominatim-update-refresh-db
- nominatim-update-data
- nominatim-daily-maintenance].each do |fname|
- template "#{bin_directory}/#{fname}" do
- source "#{fname}.erb"
- owner "nominatim"
- group "nominatim"
- mode "554"
- variables :bindir => bin_directory,
- :srcdir => source_directory,
- :builddir => build_directory,
- :projectdir => project_directory,
- :qabindir => qa_bin_directory,
- :qadatadir => qa_data_directory
- end
- end
-
- systemd_service "nominatim-update" do
- description "Update the Nominatim database"
- exec_start "#{bin_directory}/nominatim-update"
- restart "on-success"
- standard_output "append:#{node[:nominatim][:logdir]}/update.log"
- standard_error "inherit"
- working_directory project_directory
- end
-
- systemd_service "nominatim-update-maintenance-trigger" do
- description "Trigger daily maintenance tasks for Nominatim DB"
- exec_start "ln -sf #{bin_directory}/nominatim-daily-maintenance #{bin_directory}/maintenance/"
- user "nominatim"
- end
-
- systemd_timer "nominatim-update-maintenance-trigger" do
- action node[:nominatim][:state] != "off" ? :create : :delete
- description "Schedule daily maintenance tasks for Nominatim DB"
- on_calendar "*-*-* 02:03:00 UTC"
- end
-
- service "nominatim-update-maintenance-trigger" do
- action node[:nominatim][:state] != "off" ? :enable : :disable
- end
-
- # Nominatim UI
-
- git ui_directory do
- action :sync
- repository node[:nominatim][:ui_repository]
- revision node[:nominatim][:ui_revision]
- user "nominatim"
- group "nominatim"