]> git.openstreetmap.org Git - nominatim.git/commitdiff
add deployment documentation for Python frontend
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 27 Aug 2023 19:27:16 +0000 (21:27 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 27 Aug 2023 19:27:16 +0000 (21:27 +0200)
docs/admin/Deployment-PHP.md [moved from docs/admin/Deployment.md with 99% similarity]
docs/admin/Deployment-Python.md [new file with mode: 0644]
docs/admin/Import.md
docs/library/Introduction.md [deleted file]
docs/mkdocs.yml
nominatim/api/results.py

similarity index 99%
rename from docs/admin/Deployment.md
rename to docs/admin/Deployment-PHP.md
index 8b63554608a96d753b6c3598a7fc5de7066ae443..0e253d3dd63c11e1efd4ee8834f34b832bedb673 100644 (file)
@@ -1,4 +1,4 @@
-# Deploying Nominatim
+# Deploying Nominatim using the PHP frontend
 
 The Nominatim API is implemented as a PHP application. The `website/` directory
 in the project directory contains the configured website. You can serve this
diff --git a/docs/admin/Deployment-Python.md b/docs/admin/Deployment-Python.md
new file mode 100644 (file)
index 0000000..fcbe948
--- /dev/null
@@ -0,0 +1,115 @@
+# Deploying the Nominatim Python frontend
+
+The Nominatim can be run as a Python-based web application. You have the
+choice between [Falcon](https://falcon.readthedocs.io/en/stable/)
+and [Starlette](https://www.starlette.io/) as the ASGI framework.
+
+This section gives a quick overview on how to configure Nginx to server
+Nominatim. Please refer to the documentation of
+[Nginx](https://nginx.org/en/docs/) for background information on how to configure it.
+
+!!! Note
+    Throughout this page, we assume that your Nominatim project directory is
+    located in `/srv/nominatim-project` and that you have installed Nominatim
+    using the default installation prefix `/usr/local`. If you have put it
+    somewhere else, you need to adjust the commands and configuration
+    accordingly.
+
+    We further assume that your web server runs as user `www-data`. Older
+    versions of CentOS may still use the user name `apache`. You also need
+    to adapt the instructions in this case.
+
+### Installing the required packages
+
+The recommended way to deploy Python ASGI application is to run
+the ASGI runner (uvicorn)[https://uvicorn.org/]
+together with (gunicorn)[https://gunicorn.org/] HTTP server. We use
+Falcon here as the web framework.
+
+Create a virtual environment for the Python packages and install the necessary
+dependencies:
+
+``` sh
+sudo apt install virtualenv
+virtualenv /srv/nominatim-venv
+/srv/nominatim-venv/bin/pip install SQLAlchemy PyICU psycopg[binary]\
+   psycopg2-binary python-dotenv PyYAML falcon uvicorn gunicorn
+```
+
+### Setting up Nominatim as a systemd job
+
+Next you need to set up the application that serves Nominatim. This is
+easiest done with a systemd job.
+
+Create the following file `/etc/systemd/system/nominatim.service`:
+
+``` systemd
+[Unit]
+Description=Nominatim running as a gunicorn application
+After=network.target
+Requires=nominatim.socket
+
+[Service]
+Type=simple
+Environment="PYTHONPATH=/usr/local/lib/nominatim/lib-python/"
+User=www-data
+Group=www-data
+WorkingDirectory=/srv/nominatim-project
+ExecStart=/srv/nominatim-venv/bin/gunicorn -b unix:/run/nominatim.sock -w 14 -k uvicorn.workers.UvicornWorker nominatim.server.falcon.server:run_wsgi
+ExecReload=/bin/kill -s HUP $MAINPID
+StandardOutput=append:/ssd/nominatim/log/gunicorn.log
+StandardError=inherit
+PrivateTmp=true
+TimeoutStopSec=5
+KillMode=mixed
+
+[Install]
+WantedBy=multi-user.target
+```
+
+Make the new service known to systemd and start it:
+
+``` sh
+sudo systemctl daemon-reload
+sudo systemctl enable nominatim
+sudo systemctl start nominatim
+```
+
+This sets the service up, so that Nominatim is automatically started
+on reboot.
+
+### Configuring nginx
+
+To make the service available to the world, you need to proxy it through
+nginx. Add the following definition to the default configuration:
+
+``` nginx
+upstream nominatim_service {
+  server unix:/run/nominatim.sock fail_timeout=0;
+}
+
+server {
+    listen 80;
+    listen [::]:80;
+
+    root /var/www/html;
+    index /search;
+
+    location / {
+            proxy_set_header Host $http_host;
+            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header X-Forwarded-Proto $scheme;
+            proxy_redirect off;
+            proxy_pass http://nominatim_service;
+    }
+}
+```
+
+Reload nginx with
+
+```
+sudo systemctl reload nginx
+```
+
+and you should be able to see the status of your server under
+`http://localhost/status`.
index d84a2376097605765ee3579732b39077acb7bda9..62c127340cfeb37b5e1c72981205e0e9e6b58815 100644 (file)
@@ -268,8 +268,9 @@ You can also run a search query, e.g. `http://localhost:8088/search.php?q=Berlin
 Note that search query is not supported for reverse-only imports. You can run a
 reverse query, e.g. `http://localhost:8088/reverse.php?lat=27.1750090510034&lon=78.04209025`.
 
-To run Nominatim via webservers like Apache or nginx, please read the
-[Deployment chapter](Deployment.md).
+To run Nominatim via webservers like Apache or nginx, please continue reading
+[Deploy the PHP frontend](Deployment-PHP.md) or
+[Deploy the Python frontend](Deployment-Python.md).
 
 ## Adding search through category phrases
 
diff --git a/docs/library/Introduction.md b/docs/library/Introduction.md
deleted file mode 100644 (file)
index 3700bca..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Nominatim Frontend as a Library
-
-The Nominatim search frontend can directly be used as a Python library in
-scripts and applications. When you have imported your own Nominatim database,
-then it is no longer necessary to run a full web service for it and access
-the database through http requests. With the Nominatim library it is possible
-to access all search functionality directly from your Python code. There are
-also less constraints on the kinds of data that can be accessed. The library
-allows to get access to more detailed information about the objects saved
-in the database.
-
-
index df68cda877780b515167ae6988847453fdfe5ad2..fb8ad07205dbb520eb440d58dd1ecbecbaf77568 100644 (file)
@@ -22,7 +22,8 @@ nav:
         - 'Basic Installation': 'admin/Installation.md'
         - 'Import' : 'admin/Import.md'
         - 'Update' : 'admin/Update.md'
-        - 'Deploy' : 'admin/Deployment.md'
+        - 'Deploy (PHP frontend)' : 'admin/Deployment-PHP.md'
+        - 'Deploy (Python frontend)' : 'admin/Deployment-Python.md'
         - 'Nominatim UI'  : 'admin/Setup-Nominatim-UI.md'
         - 'Advanced Installations' : 'admin/Advanced-Installations.md'
         - 'Maintenance' : 'admin/Maintenance.md'
index 18df486f3a9eb17f3c036dd694ab4fc336e59432..0183f5b9f35e1cf201773104aee7821653f78402 100644 (file)
@@ -59,7 +59,7 @@ class SourceTable(enum.Enum):
     """
     TIGER = 3
     """ TIGER address data contains US addresses imported on the side,
-        see [Installing TIGER data](../../customize/Tiger.md).
+        see [Installing TIGER data](../customize/Tiger.md).
         TIGER address are also interpolations. The addresses always refer
         to a street from OSM data. The OSM id in the result refers to
         that street.