2018-08-24 00:12:10 +03:00
|
|
|
# Basic Installation
|
|
|
|
|
2016-06-09 00:03:11 +03:00
|
|
|
This page contains generic installation instructions for Nominatim and its
|
|
|
|
prerequisites. There are also step-by-step instructions available for
|
|
|
|
the following operating systems:
|
|
|
|
|
2020-05-07 01:36:13 +03:00
|
|
|
* [Ubuntu 20.04](../appendix/Install-on-Ubuntu-20.md)
|
2018-08-24 22:33:24 +03:00
|
|
|
* [Ubuntu 18.04](../appendix/Install-on-Ubuntu-18.md)
|
2020-05-07 22:55:04 +03:00
|
|
|
* [CentOS 8](../appendix/Install-on-Centos-8.md)
|
2018-01-15 01:43:15 +03:00
|
|
|
* [CentOS 7.2](../appendix/Install-on-Centos-7.md)
|
2016-06-09 00:03:11 +03:00
|
|
|
|
|
|
|
These OS-specific instructions can also be found in executable form
|
|
|
|
in the `vagrant/` directory.
|
|
|
|
|
2018-02-21 20:31:16 +03:00
|
|
|
Users have created instructions for other frameworks. We haven't tested those
|
|
|
|
and can't offer support.
|
|
|
|
|
|
|
|
* [Docker](https://github.com/mediagis/nominatim-docker)
|
|
|
|
* [Docker on Kubernetes](https://github.com/peter-evans/nominatim-k8s)
|
|
|
|
* [Ansible](https://github.com/synthesio/infra-ansible-nominatim)
|
|
|
|
|
2018-08-24 00:12:10 +03:00
|
|
|
## Prerequisites
|
2016-06-09 00:03:11 +03:00
|
|
|
|
2018-08-24 00:12:10 +03:00
|
|
|
### Software
|
2016-06-09 00:03:11 +03:00
|
|
|
|
|
|
|
For compiling:
|
|
|
|
|
|
|
|
* [cmake](https://cmake.org/)
|
2020-01-25 00:53:26 +03:00
|
|
|
* [expat](https://libexpat.github.io/)
|
|
|
|
* [proj](https://proj.org/)
|
|
|
|
* [bzip2](http://www.bzip.org/)
|
|
|
|
* [zlib](https://www.zlib.net/)
|
|
|
|
* [Boost libraries](https://www.boost.org/), including system and filesystem
|
|
|
|
* PostgreSQL client libraries
|
2020-01-22 14:02:38 +03:00
|
|
|
* a recent C++ compiler (gcc 5+ or Clang 3.8+)
|
2016-06-09 00:03:11 +03:00
|
|
|
|
|
|
|
For running Nominatim:
|
|
|
|
|
2020-02-25 11:44:32 +03:00
|
|
|
* [PostgreSQL](https://www.postgresql.org) (9.3 - 11)
|
|
|
|
* [PostGIS](https://postgis.org) (2.2 - 2.5)
|
2020-01-25 00:53:26 +03:00
|
|
|
* [Python 3](https://www.python.org/)
|
|
|
|
* [Psycopg2](https://initd.org/psycopg)
|
2019-05-21 14:55:16 +03:00
|
|
|
* [PHP](https://php.net) (7.0 or later)
|
2016-06-09 00:03:11 +03:00
|
|
|
* PHP-pgsql
|
2017-06-01 20:34:16 +03:00
|
|
|
* PHP-intl (bundled with PHP)
|
2016-06-09 00:03:11 +03:00
|
|
|
* a webserver (apache or nginx are recommended)
|
|
|
|
|
2020-02-25 11:44:32 +03:00
|
|
|
!!! danger "Important"
|
|
|
|
Postgresql 12+ and Postgis 3.0+ are known to cause performance issues. They are
|
|
|
|
not recommended for a production installation at the moment.
|
|
|
|
|
2016-06-09 00:03:11 +03:00
|
|
|
For running continuous updates:
|
|
|
|
|
2019-07-28 21:36:35 +03:00
|
|
|
* [pyosmium](https://osmcode.org/pyosmium/) (with Python 3)
|
2016-06-09 00:03:11 +03:00
|
|
|
|
2020-01-25 00:53:26 +03:00
|
|
|
For running tests:
|
|
|
|
|
|
|
|
* [behave](http://pythonhosted.org/behave/)
|
|
|
|
* [nose](https://nose.readthedocs.io)
|
2020-05-07 00:47:16 +03:00
|
|
|
* [phpunit](https://phpunit.de) >= 7.3
|
2020-01-25 00:53:26 +03:00
|
|
|
|
2018-08-24 00:12:10 +03:00
|
|
|
### Hardware
|
2016-06-09 00:03:11 +03:00
|
|
|
|
|
|
|
A minimum of 2GB of RAM is required or installation will fail. For a full
|
2019-11-24 12:31:34 +03:00
|
|
|
planet import 64GB of RAM or more are strongly recommended. Do not report
|
|
|
|
out of memory problems if you have less than 64GB RAM.
|
2016-06-09 00:03:11 +03:00
|
|
|
|
2019-11-24 12:31:34 +03:00
|
|
|
For a full planet install you will need at least 800GB of hard disk space
|
2018-08-24 00:12:10 +03:00
|
|
|
(take into account that the OSM database is growing fast). SSD disks
|
2016-06-09 00:03:11 +03:00
|
|
|
will help considerably to speed up import and queries.
|
|
|
|
|
2019-11-24 12:31:34 +03:00
|
|
|
Even on a well configured machine the import of a full planet takes
|
|
|
|
at least 2 days. Without SSDs 7-8 days are more realistic.
|
2016-06-09 00:03:11 +03:00
|
|
|
|
2018-08-24 00:12:10 +03:00
|
|
|
## Setup of the server
|
2016-06-09 00:03:11 +03:00
|
|
|
|
2018-08-24 00:12:10 +03:00
|
|
|
### PostgreSQL tuning
|
2016-06-09 00:03:11 +03:00
|
|
|
|
|
|
|
You might want to tune your PostgreSQL installation so that the later steps
|
|
|
|
make best use of your hardware. You should tune the following parameters in
|
|
|
|
your `postgresql.conf` file.
|
|
|
|
|
2019-11-24 12:31:34 +03:00
|
|
|
shared_buffers = 2GB
|
|
|
|
maintenance_work_mem = (10GB)
|
|
|
|
autovacuum_work_mem = 2GB
|
|
|
|
work_mem = (50MB)
|
|
|
|
effective_cache_size = (24GB)
|
2016-06-09 00:03:11 +03:00
|
|
|
synchronous_commit = off
|
2016-08-04 23:17:05 +03:00
|
|
|
checkpoint_segments = 100 # only for postgresql <= 9.4
|
2019-11-24 12:31:34 +03:00
|
|
|
max_wal_size = 1GB # postgresql > 9.4
|
2016-06-09 00:03:11 +03:00
|
|
|
checkpoint_timeout = 10min
|
|
|
|
checkpoint_completion_target = 0.9
|
|
|
|
|
|
|
|
The numbers in brackets behind some parameters seem to work fine for
|
2019-11-24 12:31:34 +03:00
|
|
|
64GB RAM machine. Adjust to your setup. A higher number for `max_wal_size`
|
|
|
|
means that PostgreSQL needs to run checkpoints less often but it does require
|
|
|
|
the additional space on your disk.
|
2016-06-09 00:03:11 +03:00
|
|
|
|
2020-01-22 14:02:38 +03:00
|
|
|
Autovacuum must not be switched off because it ensures that the
|
|
|
|
tables are frequently analysed. If your machine has very little memory,
|
|
|
|
you might consider setting:
|
|
|
|
|
|
|
|
autovacuum_max_workers = 1
|
|
|
|
|
|
|
|
and even reduce `autovacuum_work_mem` further. This will reduce the amount
|
|
|
|
of memory that autovacuum takes away from the import process.
|
|
|
|
|
2016-06-09 00:03:11 +03:00
|
|
|
For the initial import, you should also set:
|
|
|
|
|
|
|
|
fsync = off
|
|
|
|
full_page_writes = off
|
|
|
|
|
|
|
|
Don't forget to reenable them after the initial import or you risk database
|
2020-01-22 14:02:38 +03:00
|
|
|
corruption.
|
|
|
|
|
2016-06-09 00:03:11 +03:00
|
|
|
|
2018-08-24 00:12:10 +03:00
|
|
|
### Webserver setup
|
2016-06-09 00:03:11 +03:00
|
|
|
|
|
|
|
The `website/` directory in the build directory contains the configured
|
|
|
|
website. Include the directory into your webbrowser to serve php files
|
|
|
|
from there.
|
|
|
|
|
2018-08-24 00:12:10 +03:00
|
|
|
#### Configure for use with Apache
|
2016-06-09 00:03:11 +03:00
|
|
|
|
|
|
|
Make sure your Apache configuration contains the required permissions for the
|
|
|
|
directory and create an alias:
|
|
|
|
|
|
|
|
<Directory "/srv/nominatim/build/website">
|
|
|
|
Options FollowSymLinks MultiViews
|
2016-08-24 02:45:36 +03:00
|
|
|
AddType text/html .php
|
2016-12-16 04:16:47 +03:00
|
|
|
DirectoryIndex search.php
|
2016-06-09 00:03:11 +03:00
|
|
|
Require all granted
|
|
|
|
</Directory>
|
|
|
|
Alias /nominatim /srv/nominatim/build/website
|
|
|
|
|
|
|
|
`/srv/nominatim/build` should be replaced with the location of your
|
|
|
|
build directory.
|
|
|
|
|
|
|
|
After making changes in the apache config you need to restart apache.
|
|
|
|
The website should now be available on http://localhost/nominatim.
|
|
|
|
|
2018-08-24 00:12:10 +03:00
|
|
|
#### Configure for use with Nginx
|
2016-06-09 00:03:11 +03:00
|
|
|
|
|
|
|
Use php-fpm as a deamon for serving PHP cgi. Install php-fpm together with nginx.
|
|
|
|
|
|
|
|
By default php listens on a network socket. If you want it to listen to a
|
|
|
|
Unix socket instead, change the pool configuration (`pool.d/www.conf`) as
|
|
|
|
follows:
|
|
|
|
|
|
|
|
; Comment out the tcp listener and add the unix socket
|
|
|
|
;listen = 127.0.0.1:9000
|
|
|
|
listen = /var/run/php5-fpm.sock
|
|
|
|
|
|
|
|
; Ensure that the daemon runs as the correct user
|
|
|
|
listen.owner = www-data
|
|
|
|
listen.group = www-data
|
|
|
|
listen.mode = 0666
|
|
|
|
|
|
|
|
Tell nginx that php files are special and to fastcgi_pass to the php-fpm
|
|
|
|
unix socket by adding the location definition to the default configuration.
|
|
|
|
|
2016-12-16 04:16:47 +03:00
|
|
|
root /srv/nominatim/build/website;
|
|
|
|
index search.php index.html;
|
2016-06-09 00:03:11 +03:00
|
|
|
location ~ [^/]\.php(/|$) {
|
|
|
|
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
|
|
|
if (!-f $document_root$fastcgi_script_name) {
|
|
|
|
return 404;
|
|
|
|
}
|
|
|
|
fastcgi_pass unix:/var/run/php5-fpm.sock;
|
2016-12-16 04:16:47 +03:00
|
|
|
fastcgi_index search.php;
|
2016-06-09 00:03:11 +03:00
|
|
|
include fastcgi.conf;
|
|
|
|
}
|
|
|
|
|
|
|
|
Restart the nginx and php5-fpm services and the website should now be available
|
2018-01-15 01:43:15 +03:00
|
|
|
at `http://localhost/`.
|
2016-06-09 00:03:11 +03:00
|
|
|
|
|
|
|
|
2017-06-25 18:18:21 +03:00
|
|
|
Now continue with [importing the database](Import-and-Update.md).
|