]> git.openstreetmap.org Git - nominatim.git/blob - VAGRANT.md
add migration to add new derived_names column
[nominatim.git] / VAGRANT.md
1 # Install Nominatim in a virtual machine for development and testing
2
3 This document describes how you can install Nominatim inside a Ubuntu 16
4 virtual machine on your desktop/laptop (host machine). The goal is to give
5 you a development environment to easily edit code and run the test suite
6 without affecting the rest of your system. 
7
8 The installation can run largely unsupervised. You should expect 1h from
9 start to finish depending on how fast your computer and download speed
10 is.
11
12 ## Prerequisites
13
14 1. [Virtualbox](https://www.virtualbox.org/wiki/Downloads)
15
16 2. [Vagrant](https://www.vagrantup.com/downloads.html)
17
18 3. Nominatim 
19
20         git clone --recursive https://github.com/openstreetmap/Nominatim.git
21
22     If you forgot `--recursive`, it you can later load the submodules using
23     
24         git submodule init
25         git submodule update
26
27
28
29 ## Installation
30
31 1. Start the virtual machine
32
33         vagrant up ubuntu
34
35 2. Log into the virtual machine
36
37         vagrant ssh ubuntu
38
39 3. Import a small country (Monaco)
40     
41     See the FAQ how to skip this step and point Nominatim to an existing database.
42
43       ```
44       # inside the virtual machine:
45       cd build
46       wget --no-verbose --output-document=/tmp/monaco.osm.pbf http://download.geofabrik.de/europe/monaco-latest.osm.pbf
47       ./utils/setup.php --osm-file /tmp/monaco.osm.pbf --osm2pgsql-cache 1000 --all 2>&1 | tee monaco.$$.log
48       ```
49
50     To repeat an import you'd need to delete the database first
51
52         dropdb --if-exists nominatim
53
54
55
56 ## Development
57
58 Vagrant maps the virtual machine's port 8089 to your host machine. Thus you can
59 see Nominatim in action on [locahost:8089](http://localhost:8089/nominatim/).
60
61 You edit code on your host machine in any editor you like. There is no need to
62 restart any software: just refresh your browser window.
63
64 Note that the webserver uses files from the /build directory. If you change
65 files in Nominatim/website or Nominatim/utils for example you first need to
66 copy them into the /build directory by running the `cmake` step from the
67 installation.
68
69 PHP errors are written to `/var/log/apache2/error.log`.
70
71 With `echo` and `var_dump()` you write into the output (HTML/XML/JSON) when
72 you either add `&debug=1` to the URL (preferred) or set
73 `@define('CONST_Debug', true);` in `settings/local.php`.
74
75 In the Python BDD test you can use `logger.info()` for temporary debug
76 statements.
77
78
79
80 ## Running unit tests
81
82     cd ~/Nominatim/tests/php
83     phpunit ./
84
85
86 ## Running PHP code style tests
87
88     cd ~/Nominatim
89     phpcs --colors .
90
91
92 ## Running functional tests
93
94 Tests in `test/bdd/db` and `test/bdd/osm2pgsql` have to pass 100%. Other
95 tests might require full planet-wide data. Sadly even if you have your own
96 planet-wide data there will be enough differences to the openstreetmap.org
97 installation to cause false positives in the other tests (see FAQ). 
98
99 To run the full test suite
100
101     cd ~/Nominatim/test/bdd
102     behave -DBUILDDIR=/home/vagrant/build/ db osm2pgsql
103
104 To run a single file
105
106     behave -DBUILDDIR=/home/vagrant/build/ api/lookup/simple.feature
107
108 Or a single test by line number
109
110     behave -DBUILDDIR=/home/vagrant/build/ api/lookup/simple.feature:34
111     
112 To run specific groups of tests you can add tags just before the `Scenario line`, e.g.
113
114     @bug-34
115     Scenario: address lookup for non-existing or invalid node, way, relation
116
117 and then
118
119     behave -DBUILDDIR=/home/vagrant/build/ --tags @bug-34
120
121
122
123
124
125
126 ## FAQ
127
128 ##### Will it run on Windows?
129
130 Yes, Vagrant and Virtualbox can be installed on MS Windows just fine. You need a 64bit
131 version of Windows.
132
133
134 ##### Why Monaco, can I use another country?
135
136 Of course! The Monaco import takes less than 30 minutes and works with 2GB RAM.
137
138 ##### Will the results be the same as those from nominatim.openstreetmap.org?
139
140 No. Long running Nominatim installations will differ once new import features (or
141 bug fixes) get added since those usually only get applied to new/changed data.
142
143 Also this document skips the optional Wikipedia data import which affects ranking
144 of search results. See [Nominatim installation](https://nominatim.org/release-docs/latest/admin/Installation) for details.
145
146 ##### Why Ubuntu? Can I test CentOS/Fedora/CoreOS/FreeBSD?
147
148 There is a Vagrant script for CentOS available, but the Nominatim directory
149 isn't symlinked/mounted to the host which makes development trickier. We used
150 it mainly for debugging installation with SELinux.
151
152 In general Nominatim will run in the other environments. The installation steps
153 are slightly different, e.g. the name of the package manager, Apache2 package
154 name, location of files. We chose Ubuntu because that is closest to the
155 nominatim.openstreetmap.org production environment.
156
157 You can configure/download other Vagrant boxes from [https://app.vagrantup.com/boxes/search](https://app.vagrantup.com/boxes/search).
158
159 ##### How can I connect to an existing database?
160
161 Let's say you have a Postgres database named `nominatim_it` on server `your-server.com` and port `5432`. The Postgres username is `postgres`. You can edit `settings/local.php` and point Nominatim to it.
162
163     pgsql:host=your-server.com;port=5432;user=postgres;dbname=nominatim_it
164     
165 No data import or restarting necessary.
166
167 If the Postgres installation is behind a firewall, you can try
168
169     ssh -L 9999:localhost:5432 your-username@your-server.com
170
171 inside the virtual machine. It will map the port to `localhost:9999` and then
172 you edit `settings/local.php` with
173
174     @define('CONST_Database_DSN', 'pgsql:host=localhost;port=9999;user=postgres;dbname=nominatim_it');
175
176 To access postgres directly remember to specify the hostname, e.g. `psql --host localhost --port 9999 nominatim_it`
177
178
179 ##### My computer is slow and the import takes too long. Can I start the virtual machine "in the cloud"?
180
181 Yes. It's possible to start the virtual machine on [Amazon AWS (plugin)](https://github.com/mitchellh/vagrant-aws)
182 or [DigitalOcean (plugin)](https://github.com/smdahlen/vagrant-digitalocean).
183
184
185
186