]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/nominatim/recipes/default.rb
nominatim: add pyosmium to virtual env
[chef.git] / cookbooks / nominatim / recipes / default.rb
index 67fce4feba65800a81e76a82616f972f37ef0549..1d0ffe44ab23073cd3ee9968626335e7fe1f44a6 100644 (file)
@@ -18,7 +18,6 @@
 #
 
 include_recipe "accounts"
-include_recipe "munin"
 include_recipe "prometheus"
 
 if node[:nominatim][:api_flavour] == "php"
@@ -86,11 +85,6 @@ postgresql_user "www-data" do
   only_if { node[:nominatim][:state] != "slave" }
 end
 
-postgresql_munin "nominatim" do
-  cluster node[:nominatim][:dbcluster]
-  database node[:nominatim][:dbname]
-end
-
 directory "#{basedir}/tablespaces" do
   owner "postgres"
   group "postgres"
@@ -121,6 +115,9 @@ end
 ## Nominatim backend
 
 include_recipe "git"
+include_recipe "python"
+
+python_directory = "#{basedir}/venv"
 
 package %w[
   build-essential
@@ -136,6 +133,8 @@ package %w[
   libproj-dev
   liblua5.3-dev
   libluajit-5.1-dev
+  libicu-dev
+  nlohmann-json3-dev
   lua5.3
   python3-pyosmium
   python3-psycopg2
@@ -148,6 +147,8 @@ package %w[
   python3-sqlalchemy-ext
   python3-geoalchemy2
   python3-asyncpg
+  python3-dev
+  pkg-config
   ruby
   ruby-file-tail
   ruby-pg
@@ -160,11 +161,80 @@ if node[:nominatim][:api_flavour] == "php"
     php-intl
   ]
 elsif node[:nominatim][:api_flavour] == "python"
-  package %w[
-    gunicorn
-    uvicorn
-    python3-starlette
-  ]
+
+  python_virtualenv python_directory do
+    interpreter "/usr/bin/python3"
+  end
+
+  python_package "SQLAlchemy" do
+    python_virtualenv python_directory
+    version "2.0.32"
+  end
+
+  python_package "PyICU" do
+    python_virtualenv python_directory
+    version "2.13.1"
+  end
+
+  python_package "psycopg[binary]" do
+    python_virtualenv python_directory
+    version "3.2.1"
+  end
+
+  python_package "psycopg2-binary" do
+    python_virtualenv python_directory
+    version "2.9.9"
+  end
+
+  python_package "python-dotenv" do
+    python_virtualenv python_directory
+    version "1.0.1"
+  end
+
+  python_package "pygments" do
+    python_virtualenv python_directory
+    version "2.18.0"
+  end
+
+  python_package "PyYAML" do
+    python_virtualenv python_directory
+    version "6.0.2"
+  end
+
+  python_package "falcon" do
+    python_virtualenv python_directory
+    version "3.1.3"
+  end
+
+  python_package "uvicorn" do
+    python_virtualenv python_directory
+    version "0.30.5"
+  end
+
+  python_package "gunicorn" do
+    python_virtualenv python_directory
+    version "22.0.0"
+  end
+
+  python_package "jinja2" do
+    python_virtualenv python_directory
+    version "3.1.4"
+  end
+
+  python_package "datrie" do
+    python_virtualenv python_directory
+    version "0.8.2"
+  end
+
+  python_package "psutil" do
+    python_virtualenv python_directory
+    version "6.0.0"
+  end
+
+  python_package "osmium" do
+    python_virtualenv python_directory
+    version "3.7.0"
+  end
 end
 
 source_directory = "#{basedir}/src/nominatim"
@@ -236,7 +306,7 @@ execute "compile_nominatim" do
   action :nothing
   user "nominatim"
   cwd build_directory
-  command "cmake -D WITH_LUAJIT=ON #{source_directory} && make"
+  command "cmake #{source_directory} && make"
   notifies :run, "execute[install_nominatim]"
 end
 
@@ -258,7 +328,18 @@ template "#{project_directory}/.env" do
             :flatnode_file => node[:nominatim][:flatnode_file],
             :log_file => "#{node[:nominatim][:logdir]}/query.log",
             :tokenizer => node[:nominatim][:config][:tokenizer],
-            :forward_dependencies => node[:nominatim][:config][:forward_dependencies]
+            :forward_dependencies => node[:nominatim][:config][:forward_dependencies],
+            :pool_size => node[:nominatim][:api_pool_size],
+            :query_timeout => node[:nominatim][:api_query_timeout],
+            :request_timeout => node[:nominatim][:api_request_timeout]
+end
+
+remote_file "#{project_directory}/secondary_importance.sql.gz" do
+  action :create_if_missing
+  source "https://nominatim.org/data/wikimedia-secondary-importance.sql.gz"
+  owner "nominatim"
+  group "nominatim"
+  mode "644"
 end
 
 remote_file "#{project_directory}/wikimedia-importance.sql.gz" do
@@ -311,7 +392,7 @@ elsif node[:nominatim][:api_flavour] == "python"
     working_directory project_directory
     standard_output "append:#{node[:nominatim][:logdir]}/gunicorn.log"
     standard_error "inherit"
-    exec_start "/usr/bin/gunicorn -b unix:/run/gunicorn-nominatim.openstreetmap.org.sock -w 10 -k uvicorn.workers.UvicornWorker nominatim.server.starlette.server:run_wsgi"
+    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.server.falcon.server:run_wsgi"
     exec_reload "/bin/kill -s HUP $MAINPID"
     environment :PYTHONPATH => "/usr/local/lib/nominatim/lib-python/"
     kill_mode "mixed"
@@ -552,25 +633,6 @@ template "/etc/logrotate.d/nominatim" do
 end
 
 # Monitoring
-
-munin_plugin_conf "nominatim" do
-  template "munin.erb"
-  variables :db => node[:nominatim][:dbname],
-            :querylog => "#{node[:nominatim][:logdir]}/query.log"
-end
-
-munin_plugin "nominatim_importlag" do
-  target "#{source_directory}/munin/nominatim_importlag"
-end
-
-munin_plugin "nominatim_query_speed" do
-  target "#{source_directory}/munin/nominatim_query_speed_querylog"
-end
-
-munin_plugin "nominatim_requests" do
-  target "#{source_directory}/munin/nominatim_requests_querylog"
-end
-
 prometheus_exporter "nominatim" do
   port 8082
   user "www-data"