X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/86833454a4fc9bb8ae7817415a281768a3bfcd18..f79bd4873d84906236710135d6536e8e14579d67:/docs/admin/Installation.md diff --git a/docs/admin/Installation.md b/docs/admin/Installation.md index ce7fb412..0dd6579b 100644 --- a/docs/admin/Installation.md +++ b/docs/admin/Installation.md @@ -1,79 +1,108 @@ +# Basic Installation + This page contains generic installation instructions for Nominatim and its prerequisites. There are also step-by-step instructions available for the following operating systems: + * [Ubuntu 18.04](../appendix/Install-on-Ubuntu-18.md) * [Ubuntu 16.04](../appendix/Install-on-Ubuntu-16.md) * [CentOS 7.2](../appendix/Install-on-Centos-7.md) These OS-specific instructions can also be found in executable form in the `vagrant/` directory. -# Prerequisites - -## Software +Users have created instructions for other frameworks. We haven't tested those +and can't offer support. -For compiling: + * [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) - * [cmake](https://cmake.org/) - * [libxml2](http://xmlsoft.org/) - * a recent C++ compiler +## Prerequisites -Nominatim comes with its own version of osm2pgsql. See the -osm2pgsql README for additional dependencies required for compiling osm2pgsql. +### Software -For running tests: +For compiling: - * [behave](http://pythonhosted.org/behave/) - * [Psycopg2](http://initd.org/psycopg) - * [nose](https://nose.readthedocs.io) - * [phpunit](https://phpunit.de) + * [cmake](https://cmake.org/) + * [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 + * a recent C++ compiler (gcc 5+ or Clang 3.8+) For running Nominatim: - * [PostgreSQL](http://www.postgresql.org) (9.1 or later) - * [PostGIS](http://postgis.refractions.net) (2.0 or later) - * [PHP](http://php.net) (5.4 or later) + * [PostgreSQL](https://www.postgresql.org) (9.3 - 11) + * [PostGIS](https://postgis.org) (2.2 - 2.5) + * [Python 3](https://www.python.org/) + * [Psycopg2](https://initd.org/psycopg) + * [PHP](https://php.net) (7.0 or later) * PHP-pgsql * PHP-intl (bundled with PHP) - * [PEAR::DB](http://pear.php.net/package/DB) * a webserver (apache or nginx are recommended) +!!! 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. + For running continuous updates: - * [pyosmium](http://osmcode.org/pyosmium/) + * [pyosmium](https://osmcode.org/pyosmium/) (with Python 3) -## Hardware +For running tests: + + * [behave](http://pythonhosted.org/behave/) + * [nose](https://nose.readthedocs.io) + * [phpunit](https://phpunit.de) + +### Hardware A minimum of 2GB of RAM is required or installation will fail. For a full -planet import 32GB of RAM or more strongly are recommended. +planet import 64GB of RAM or more are strongly recommended. Do not report +out of memory problems if you have less than 64GB RAM. -For a full planet install you will need about 600GB of hard disk space (as of -January 2017, take into account that the OSM database is growing fast). SSD disks +For a full planet install you will need at least 800GB of hard disk space +(take into account that the OSM database is growing fast). SSD disks will help considerably to speed up import and queries. -On a 6-core machine with 32GB RAM and SSDs the import of a full planet takes -a bit more than 2 days. Without SSDs 7-8 days are more realistic. +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. +## Setup of the server -# Setup of the server - -## PostgreSQL tuning +### PostgreSQL tuning 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. - shared_buffers (2GB) - maintenance_work_mem (10GB) - work_mem (50MB) - effective_cache_size (24GB) + shared_buffers = 2GB + maintenance_work_mem = (10GB) + autovacuum_work_mem = 2GB + work_mem = (50MB) + effective_cache_size = (24GB) synchronous_commit = off checkpoint_segments = 100 # only for postgresql <= 9.4 + max_wal_size = 1GB # postgresql > 9.4 checkpoint_timeout = 10min checkpoint_completion_target = 0.9 The numbers in brackets behind some parameters seem to work fine for -32GB RAM machine. Adjust to your setup. +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. + +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. For the initial import, you should also set: @@ -81,16 +110,16 @@ For the initial import, you should also set: full_page_writes = off Don't forget to reenable them after the initial import or you risk database -corruption. Autovacuum must not be switched off because it ensures that the -tables are frequently analysed. +corruption. + -## Webserver setup +### Webserver setup The `website/` directory in the build directory contains the configured website. Include the directory into your webbrowser to serve php files from there. -### Configure for use with Apache +#### Configure for use with Apache Make sure your Apache configuration contains the required permissions for the directory and create an alias: @@ -109,7 +138,7 @@ build directory. After making changes in the apache config you need to restart apache. The website should now be available on http://localhost/nominatim. -### Configure for use with Nginx +#### Configure for use with Nginx Use php-fpm as a deamon for serving PHP cgi. Install php-fpm together with nginx.