]> git.openstreetmap.org Git - nominatim.git/blob - docs/admin/Installation.md
add wiki link to osm2psql README
[nominatim.git] / docs / admin / Installation.md
1 # Basic Installation
2
3 This page contains generic installation instructions for Nominatim and its
4 prerequisites. There are also step-by-step instructions available for
5 the following operating systems:
6
7   * [Ubuntu 18.04](../appendix/Install-on-Ubuntu-18.md)
8   * [Ubuntu 16.04](../appendix/Install-on-Ubuntu-16.md)
9   * [CentOS 7.2](../appendix/Install-on-Centos-7.md)
10
11 These OS-specific instructions can also be found in executable form
12 in the `vagrant/` directory.
13
14 Users have created instructions for other frameworks. We haven't tested those
15 and can't offer support.
16
17   * [Docker](https://github.com/mediagis/nominatim-docker)
18   * [Docker on Kubernetes](https://github.com/peter-evans/nominatim-k8s)
19   * [Ansible](https://github.com/synthesio/infra-ansible-nominatim)
20
21 ## Prerequisites
22
23 ### Software
24
25 For compiling:
26
27   * [cmake](https://cmake.org/)
28   * [libxml2](http://xmlsoft.org/)
29   * a recent C++ compiler
30
31 Nominatim comes with its own version of osm2pgsql. See the
32 [osm2pgsql README](https://github.com/openstreetmap/osm2pgsql/blob/master/README.md#building)
33 for additional dependencies required for compiling osm2pgsql.
34
35 For running tests:
36
37   * [behave](http://pythonhosted.org/behave/)
38   * [Psycopg2](https://initd.org/psycopg)
39   * [nose](https://nose.readthedocs.io)
40   * [phpunit](https://phpunit.de)
41
42 For running Nominatim:
43
44   * [PostgreSQL](https://www.postgresql.org) (9.3 or later)
45   * [PostGIS](https://postgis.org) (2.2 or later)
46   * [PHP](https://php.net) (7.0 or later)
47   * PHP-pgsql
48   * PHP-intl (bundled with PHP)
49   * [PEAR::DB](https://pear.php.net/package/DB)
50   * a webserver (apache or nginx are recommended)
51
52 For running continuous updates:
53
54   * [pyosmium](https://osmcode.org/pyosmium/) (with Python 3)
55
56 ### Hardware
57
58 A minimum of 2GB of RAM is required or installation will fail. For a full
59 planet import 32GB of RAM or more are strongly recommended.
60
61 For a full planet install you will need at least 700GB of hard disk space
62 (take into account that the OSM database is growing fast). SSD disks
63 will help considerably to speed up import and queries.
64
65 On a 6-core machine with 32GB RAM and SSDs the import of a full planet takes
66 a bit more than 2 days. Without SSDs 7-8 days are more realistic.
67
68
69 ## Setup of the server
70
71 ### PostgreSQL tuning
72
73 You might want to tune your PostgreSQL installation so that the later steps
74 make best use of your hardware. You should tune the following parameters in
75 your `postgresql.conf` file.
76
77     shared_buffers (2GB)
78     maintenance_work_mem (10GB)
79     work_mem (50MB)
80     effective_cache_size (24GB)
81     synchronous_commit = off
82     checkpoint_segments = 100 # only for postgresql <= 9.4
83     checkpoint_timeout = 10min
84     checkpoint_completion_target = 0.9
85
86 The numbers in brackets behind some parameters seem to work fine for
87 32GB RAM machine. Adjust to your setup.
88
89 For the initial import, you should also set:
90
91     fsync = off
92     full_page_writes = off
93
94 Don't forget to reenable them after the initial import or you risk database
95 corruption. Autovacuum must not be switched off because it ensures that the
96 tables are frequently analysed.
97
98 ### Webserver setup
99
100 The `website/` directory in the build directory contains the configured
101 website. Include the directory into your webbrowser to serve php files
102 from there.
103
104 #### Configure for use with Apache
105
106 Make sure your Apache configuration contains the required permissions for the
107 directory and create an alias:
108
109     <Directory "/srv/nominatim/build/website">
110       Options FollowSymLinks MultiViews
111       AddType text/html   .php
112       DirectoryIndex search.php
113       Require all granted
114     </Directory>
115     Alias /nominatim /srv/nominatim/build/website
116
117 `/srv/nominatim/build` should be replaced with the location of your
118 build directory.
119
120 After making changes in the apache config you need to restart apache.
121 The website should now be available on http://localhost/nominatim.
122
123 #### Configure for use with Nginx
124
125 Use php-fpm as a deamon for serving PHP cgi. Install php-fpm together with nginx.
126
127 By default php listens on a network socket. If you want it to listen to a
128 Unix socket instead, change the pool configuration (`pool.d/www.conf`) as
129 follows:
130
131     ; Comment out the tcp listener and add the unix socket
132     ;listen = 127.0.0.1:9000
133     listen = /var/run/php5-fpm.sock
134
135     ; Ensure that the daemon runs as the correct user
136     listen.owner = www-data
137     listen.group = www-data
138     listen.mode = 0666
139
140 Tell nginx that php files are special and to fastcgi_pass to the php-fpm
141 unix socket by adding the location definition to the default configuration.
142
143     root /srv/nominatim/build/website;
144     index search.php index.html;
145     location ~ [^/]\.php(/|$) {
146         fastcgi_split_path_info ^(.+?\.php)(/.*)$;
147         if (!-f $document_root$fastcgi_script_name) {
148             return 404;
149         }
150         fastcgi_pass unix:/var/run/php5-fpm.sock;
151         fastcgi_index search.php;
152         include fastcgi.conf;
153     }
154
155 Restart the nginx and php5-fpm services and the website should now be available
156 at `http://localhost/`.
157
158
159 Now continue with [importing the database](Import-and-Update.md).