Deploying Nominatim
The Nominatim API is implemented as a PHP application. The website/
directory
in the project directory contains the configured website. You can serve this
in a production environment with any web server that is capable to run
PHP scripts.
This section gives a quick overview on how to configure Apache and Nginx to serve Nominatim. It is not meant as a full system administration guide on how to run a web service. Please refer to the documentation of Apache and Nginx for background information on configuring the services.
Note
Throughout this page, we assume that your Nominatim project directory is
located in /srv/nominatim-project
and that you have installed Nominatim
using the default installation prefix /usr/local
. If you have put it
somewhere else, you need to adjust the commands and configuration
accordingly.
We further assume that your web server runs as user www-data
. Older
versions of CentOS may still use the user name apache
. You also need
to adapt the instructions in this case.
Making the website directory accessible
You need to make sure that the website
directory is accessible for the
web server user. You can check that the permissions are correct by accessing
on of the php files as the web server user:
sudo -u www-data head -n 1 /srv/nominatim-project/website/search.php
If this shows a permission error, then you need to adapt the permissions of
each directory in the path so that it is executable for www-data
.
If you have SELinux enabled, further adjustments may be necessary to give the web server access. At a minimum the following SELinux labelling should be done for Nominatim:
sudo semanage fcontext -a -t httpd_sys_content_t "/usr/local/nominatim/lib/lib-php(/.*)?"
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/nominatim-project/website(/.*)?"
sudo semanage fcontext -a -t lib_t "/srv/nominatim-project/module/nominatim.so"
sudo restorecon -R -v /usr/local/lib/nominatim
sudo restorecon -R -v /srv/nominatim-project
Nominatim with Apache
Installing the required packages
With Apache you can use the PHP module to run Nominatim.
Under Ubuntu/Debian install them with:
sudo apt install apache2 libapache2-mod-php
Configuring Apache
Make sure your Apache configuration contains the required permissions for the directory and create an alias:
<Directory "/srv/nominatim-project/website">
Options FollowSymLinks MultiViews
AddType text/html .php
DirectoryIndex search.php
Require all granted
</Directory>
Alias /nominatim /srv/nominatim-project/website
After making changes in the apache config you need to restart apache.
The website should now be available on http://localhost/nominatim
.
Nominatim with Nginx
Installing the required packages
Nginx has no built-in PHP interpreter. You need to use php-fpm as a deamon for serving PHP cgi.
On Ubuntu/Debian install nginx and php-fpm with:
sudo apt install nginx php-fpm
Configure php-fpm and Nginx
By default php-fpm listens on a network socket. If you want it to listen to a
Unix socket instead, change the pool configuration
(/etc/php/<php version>/fpm/pool.d/www.conf
) as follows:
; Replace the tcp listener and add the unix socket
listen = /var/run/php-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.
root /srv/nominatim-project/website;
index search.php;
location / {
try_files $uri $uri/ @php;
}
location @php {
fastcgi_param SCRIPT_FILENAME "$document_root$uri.php";
fastcgi_param PATH_TRANSLATED "$document_root$uri.php";
fastcgi_param QUERY_STRING $args;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index search.php;
include fastcgi.conf;
}
Restart the nginx and php-fpm services and the website should now be available
at http://localhost/
.