+# 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](../osm2pgsql/README.md) 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:
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:
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.