mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-27 06:51:42 +03:00
add deployment documentation for Python frontend
This commit is contained in:
parent
3bb27fbee6
commit
2c24ba6d2d
@ -1,4 +1,4 @@
|
|||||||
# Deploying Nominatim
|
# Deploying Nominatim using the PHP frontend
|
||||||
|
|
||||||
The Nominatim API is implemented as a PHP application. The `website/` directory
|
The Nominatim API is implemented as a PHP application. The `website/` directory
|
||||||
in the project directory contains the configured website. You can serve this
|
in the project directory contains the configured website. You can serve this
|
115
docs/admin/Deployment-Python.md
Normal file
115
docs/admin/Deployment-Python.md
Normal file
@ -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`.
|
@ -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
|
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`.
|
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
|
To run Nominatim via webservers like Apache or nginx, please continue reading
|
||||||
[Deployment chapter](Deployment.md).
|
[Deploy the PHP frontend](Deployment-PHP.md) or
|
||||||
|
[Deploy the Python frontend](Deployment-Python.md).
|
||||||
|
|
||||||
## Adding search through category phrases
|
## Adding search through category phrases
|
||||||
|
|
||||||
|
@ -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.
|
|
||||||
|
|
||||||
|
|
@ -22,7 +22,8 @@ nav:
|
|||||||
- 'Basic Installation': 'admin/Installation.md'
|
- 'Basic Installation': 'admin/Installation.md'
|
||||||
- 'Import' : 'admin/Import.md'
|
- 'Import' : 'admin/Import.md'
|
||||||
- 'Update' : 'admin/Update.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'
|
- 'Nominatim UI' : 'admin/Setup-Nominatim-UI.md'
|
||||||
- 'Advanced Installations' : 'admin/Advanced-Installations.md'
|
- 'Advanced Installations' : 'admin/Advanced-Installations.md'
|
||||||
- 'Maintenance' : 'admin/Maintenance.md'
|
- 'Maintenance' : 'admin/Maintenance.md'
|
||||||
|
@ -59,7 +59,7 @@ class SourceTable(enum.Enum):
|
|||||||
"""
|
"""
|
||||||
TIGER = 3
|
TIGER = 3
|
||||||
""" TIGER address data contains US addresses imported on the side,
|
""" 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
|
TIGER address are also interpolations. The addresses always refer
|
||||||
to a street from OSM data. The OSM id in the result refers to
|
to a street from OSM data. The OSM id in the result refers to
|
||||||
that street.
|
that street.
|
||||||
|
Loading…
Reference in New Issue
Block a user