Vagrant.configure("2") do |config|
# Apache webserver
config.vm.network "forwarded_port", guest: 80, host: 8089
+ config.vm.network "forwarded_port", guest: 8088, host: 8088
# If true, then any SSH connections made will enable agent forwarding.
config.ssh.forward_agent = true
+ # Never sync the current directory to /vagrant.
+ config.vm.synced_folder ".", "/vagrant", disabled: true
+
+
checkout = "yes"
- if ENV['CHECKOUT'] != 'y' then
+
+ config.vm.provider "virtualbox" do |vb|
+ vb.gui = false
+ vb.memory = 2048
+ vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate//vagrant","0"]
+ if ENV['CHECKOUT'] != 'y' then
config.vm.synced_folder ".", "/home/vagrant/Nominatim"
checkout = "no"
+ end
+ end
+
+ config.vm.provider "libvirt" do |lv|
+ lv.memory = 2048
+ lv.nested = true
+ if ENV['CHECKOUT'] != 'y' then
+ config.vm.synced_folder ".", "/home/vagrant/Nominatim", type: 'nfs'
+ checkout = "no"
+ end
end
config.vm.define "ubuntu", primary: true do |sub|
- sub.vm.box = "bento/ubuntu-20.04"
+ sub.vm.box = "generic/ubuntu2004"
sub.vm.provision :shell do |s|
s.path = "vagrant/Install-on-Ubuntu-20.sh"
s.privileged = false
end
end
- config.vm.define "ubuntu18", primary: true do |sub|
- sub.vm.box = "bento/ubuntu-18.04"
+ config.vm.define "ubuntu18" do |sub|
+ sub.vm.box = "generic/ubuntu1804"
sub.vm.provision :shell do |s|
s.path = "vagrant/Install-on-Ubuntu-18.sh"
s.privileged = false
end
end
- config.vm.define "ubuntu18nginx" do |sub|
- sub.vm.box = "bento/ubuntu-18.04"
- sub.vm.provision :shell do |s|
- s.path = "vagrant/Install-on-Ubuntu-18-nginx.sh"
- s.privileged = false
- s.args = [checkout]
- end
- end
-
- config.vm.define "ubuntu16" do |sub|
- sub.vm.box = "bento/ubuntu-16.04"
+ config.vm.define "ubuntu18-apache" do |sub|
+ sub.vm.box = "generic/ubuntu1804"
sub.vm.provision :shell do |s|
- s.path = "vagrant/Install-on-Ubuntu-16.sh"
+ s.path = "vagrant/Install-on-Ubuntu-18.sh"
s.privileged = false
- s.args = [checkout]
+ s.args = [checkout, "install-apache"]
end
end
- config.vm.define "travis" do |sub|
- sub.vm.box = "bento/ubuntu-14.04"
+ config.vm.define "ubuntu18-nginx" do |sub|
+ sub.vm.box = "generic/ubuntu1804"
sub.vm.provision :shell do |s|
- s.path = "vagrant/install-on-travis-ci.sh"
+ s.path = "vagrant/Install-on-Ubuntu-18.sh"
s.privileged = false
- s.args = [checkout]
+ s.args = [checkout, "install-nginx"]
end
end
s.args = "yes"
end
sub.vm.synced_folder ".", "/home/vagrant/Nominatim", disabled: true
- sub.vm.synced_folder ".", "/vagrant", disabled: true
end
config.vm.define "centos8" do |sub|
s.args = "yes"
end
sub.vm.synced_folder ".", "/home/vagrant/Nominatim", disabled: true
- sub.vm.synced_folder ".", "/vagrant", disabled: true
end
- config.vm.provider "virtualbox" do |vb|
- vb.gui = false
- vb.memory = 2048
- vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate//vagrant","0"]
- end
-
end
+++ /dev/null
-#!/bin/bash
-
-#
-# This is variation of Install-on-Ubuntu.sh showcasing how to use the
-# nginx webserver instead of Apache2. We might eventually merge both
-# files. Right now expect this file to become outdated/unmaintained
-# over time.
-#
-# This file lacks many comments found in Install-on-Ubuntu.sh, you
-# should check that file first to get a basic understanding.
-#
-
-# hacks for broken vagrant box
-sudo rm -f /var/lib/dpkg/lock
-sudo update-locale LANG=en_US.UTF-8
-export APT_LISTCHANGES_FRONTEND=none
-export DEBIAN_FRONTEND=noninteractive
-
- sudo apt-get update -qq
- sudo apt-get install -y build-essential cmake g++ libboost-dev libboost-system-dev \
- libboost-filesystem-dev libexpat1-dev zlib1g-dev\
- libbz2-dev libpq-dev libproj-dev \
- postgresql-server-dev-10 postgresql-10-postgis-2.4 \
- postgresql-contrib-10 \
- nginx php-fpm php php-pgsql \
- php-intl python3-setuptools python3-dev python3-pip \
- python3-psycopg2 python3-tidylib git
-
- export USERNAME=vagrant
- export USERHOME=/home/vagrant
-
- chmod a+x $USERHOME
-
-# Setting up PostgreSQL
-# ---------------------
-#
-# Tune the postgresql configuration, see same section in Install-on-Ubuntu.sh
-
- sudo systemctl restart postgresql
-
- sudo -u postgres createuser -s $USERNAME
- sudo -u postgres createuser www-data
-
-#
-# Setting up the Nginx Webserver
-# -------------------------------
-#
-# You need to configure php-fpm to listen on a Unix socket. Then create Nginx
-# configuration to forward localhost:80 requests to that socket.
-#
-
-
-sudo tee /etc/php/7.2/fpm/pool.d/www.conf << EOF_PHP_FPM_CONF
-[www]
-; Comment out the tcp listener and add the unix socket
-;listen = 127.0.0.1:9000
-listen = /var/run/php7.2-fpm.sock
-
-; Ensure that the daemon runs as the correct user
-listen.owner = www-data
-listen.group = www-data
-listen.mode = 0666
-
-; Unix user of FPM processes
-user = www-data
-group = www-data
-
-; Choose process manager type (static, dynamic, ondemand)
-pm = ondemand
-pm.max_children = 5
-EOF_PHP_FPM_CONF
-
-
-
-
-sudo tee /etc/nginx/sites-available/default << EOF_NGINX_CONF
-server {
- listen 80 default_server;
- listen [::]:80 default_server;
-
- root $USERHOME/build/website;
- index search.php index.html;
- 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/php7.2-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/php7.2-fpm.sock;
- fastcgi_index search.php;
- include fastcgi.conf;
- }
-}
-EOF_NGINX_CONF
-
-
-sudo sed -i 's:#.*::' /etc/nginx/sites-available/default
-
-
-#
-# Enable the configuration and restart Nginx
-#
-
- sudo systemctl stop apache2 # just in case it's installed as well
- sudo systemctl restart php7.2-fpm nginx
-
-# From here continue in the 'Installing Nominatim' section in
-# Install-on-Ubuntu.sh
-
# Make sure all packages are are up-to-date by running:
#
-#DOCS: :::sh
sudo apt-get -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" --force-yes -fuy install grub-pc #DOCS:
- sudo apt-get update -qq
+ sudo apt update -qq
# Now you can install all packages needed for Nominatim:
- sudo apt-get install -y build-essential cmake g++ libboost-dev libboost-system-dev \
- libboost-filesystem-dev libexpat1-dev zlib1g-dev\
- libbz2-dev libpq-dev libproj-dev \
- postgresql-server-dev-10 postgresql-10-postgis-2.4 \
- postgresql-contrib-10 postgresql-10-postgis-scripts \
- apache2 php php-pgsql libapache2-mod-php \
- php-intl python3-setuptools python3-dev python3-pip \
- python3-psycopg2 python3-tidylib git
+ sudo apt install -y php-cgi
+ sudo apt install -y build-essential cmake g++ libboost-dev libboost-system-dev \
+ libboost-filesystem-dev libexpat1-dev zlib1g-dev\
+ libbz2-dev libpq-dev libproj-dev \
+ postgresql-server-dev-10 postgresql-10-postgis-2.4 \
+ postgresql-contrib-10 postgresql-10-postgis-scripts \
+ php php-pgsql php-intl \
+ python3-psycopg2 git
#
sudo -u postgres createuser -s $USERNAME
sudo -u postgres createuser www-data
-#
-# Setting up the Apache Webserver
-# -------------------------------
-#
-# You need to create an alias to the website directory in your apache
-# configuration. Add a separate nominatim configuration to your webserver:
-
-#DOCS:```sh
-sudo tee /etc/apache2/conf-available/nominatim.conf << EOFAPACHECONF
-<Directory "$USERHOME/build/website"> #DOCS:<Directory "$USERHOME/Nominatim/build/website">
- Options FollowSymLinks MultiViews
- AddType text/html .php
- DirectoryIndex search.php
- Require all granted
-</Directory>
-
-Alias /nominatim $USERHOME/build/website #DOCS:Alias /nominatim $USERHOME/Nominatim/build/website
-EOFAPACHECONF
-#DOCS:```
-
-sudo sed -i 's:#.*::' /etc/apache2/conf-available/nominatim.conf #DOCS:
-
-#
-# Then enable the configuration and restart apache
-#
-
- sudo a2enconf nominatim
- sudo systemctl restart apache2
-
#
# Installing Nominatim
# ====================
# The code must be built in a separate directory. Create this directory,
# then configure and build Nominatim in there:
- cd $USERHOME #DOCS: :::sh
+ cd $USERHOME
mkdir build
cd build
cmake $USERHOME/Nominatim
make
+
+# Nominatim is now ready to use. You can continue with
+# [importing a database from OSM data](../admin/Import.md). If you want to set up
+# a webserver first, continue reading.
+#
+# Setting up a webserver
+# ======================
+#
+# Option 1: Using Apache
+# ----------------------
+#
+if [ "x$2" == "xinstall-apache" ]; then #DOCS:
+#
+# Apache has a PHP module that can be used to serve Nominatim. To install them
+# run:
+
+ sudo apt install -y apache2 libapache2-mod-php
+
+# You need to create an alias to the website directory in your apache
+# configuration. Add a separate nominatim configuration to your webserver:
+
+#DOCS:```sh
+sudo tee /etc/apache2/conf-available/nominatim.conf << EOFAPACHECONF
+<Directory "$USERHOME/build/website">
+ Options FollowSymLinks MultiViews
+ AddType text/html .php
+ DirectoryIndex search.php
+ Require all granted
+</Directory>
+
+Alias /nominatim $USERHOME/build/website
+EOFAPACHECONF
+#DOCS:```
+
+#
+# Then enable the configuration and restart apache
+#
+
+ sudo a2enconf nominatim
+ sudo systemctl restart apache2
+
# You need to create a minimal configuration file that tells nominatim
# where it is located on the webserver:
EOF
#DOCS:```
+# The Nominatim API is now available at `http://localhost/nominatim/`.
+
+fi #DOCS:
+
+#
+# Option 2: Using nginx
+# ---------------------
+#
+if [ "x$2" == "xinstall-nginx" ]; then #DOCS:
+
+# Nginx has no native support for php scripts. You need to set up php-fpm for
+# this purpose. First install nginx and php-fpm:
+
+ sudo apt install -y nginx php-fpm
+
+# You need to configure php-fpm to listen on a Unix socket.
+
+#DOCS:```sh
+sudo tee /etc/php/7.2/fpm/pool.d/www.conf << EOF_PHP_FPM_CONF
+[www]
+; Replace the tcp listener and add the unix socket
+listen = /var/run/php7.2-fpm.sock
+
+; Ensure that the daemon runs as the correct user
+listen.owner = www-data
+listen.group = www-data
+listen.mode = 0666
+
+; Unix user of FPM processes
+user = www-data
+group = www-data
+
+; Choose process manager type (static, dynamic, ondemand)
+pm = ondemand
+pm.max_children = 5
+EOF_PHP_FPM_CONF
+#DOCS:```
+
+# Then create a Nginx configuration to forward http requests to that socket.
+
+#DOCS:```sh
+sudo tee /etc/nginx/sites-available/default << EOF_NGINX_CONF
+server {
+ listen 80 default_server;
+ listen [::]:80 default_server;
+
+ root $USERHOME/build/website;
+ index search.php index.html;
+ 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/php7.2-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/php7.2-fpm.sock;
+ fastcgi_index search.php;
+ include fastcgi.conf;
+ }
+}
+EOF_NGINX_CONF
+#DOCS:```
+
+#
+# Enable the configuration and restart Nginx
+#
+
+ sudo systemctl restart php7.2-fpm nginx
+
+# The Nominatim API is now available at `http://localhost/`.
+
+
-# Nominatim is now ready to use. Continue with
-# [importing a database from OSM data](../admin/Import.md).
+fi #DOCS: