]> git.openstreetmap.org Git - nominatim.git/commitdiff
restructure webserver setup in ubuntu 18 script
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 16 Sep 2020 09:19:38 +0000 (11:19 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 16 Sep 2020 09:19:38 +0000 (11:19 +0200)
Unify the two vagrant scripts for Ubuntu 18. The script can now
be run in three modes: no webserver, with apache, with nginx.
The default mode is to not install any webserver at all. This is
normally sufficient when just developping.

The commit also switches from bento to generic boxes and adds config
for running with a libvirt provider. You need an NFS deamon for
synchronized folders.

Vagrantfile
vagrant/Install-on-Ubuntu-18-nginx.sh [deleted file]
vagrant/Install-on-Ubuntu-18.sh

index 87118c43524dbc9a66934afa9053ec84c54b1b32..dff597d69daf56d9541ab914fb80079245cf7133 100644 (file)
@@ -4,18 +4,38 @@
 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
@@ -23,8 +43,8 @@ Vagrant.configure("2") do |config|
       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
@@ -32,30 +52,21 @@ Vagrant.configure("2") do |config|
       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
 
@@ -67,7 +78,6 @@ Vagrant.configure("2") do |config|
         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|
@@ -78,14 +88,7 @@ Vagrant.configure("2") do |config|
         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
diff --git a/vagrant/Install-on-Ubuntu-18-nginx.sh b/vagrant/Install-on-Ubuntu-18-nginx.sh
deleted file mode 100755 (executable)
index 382df6b..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/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
-
index 34e6aaa05de10b3b9fcb4dad0fb789eb452d9132..52f01715ef33d42dde5870cd356e5704af320882 100755 (executable)
@@ -18,20 +18,19 @@ export DEBIAN_FRONTEND=noninteractive #DOCS:
 # 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
 
 
 #
@@ -87,35 +86,6 @@ export DEBIAN_FRONTEND=noninteractive #DOCS:
     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
 # ====================
@@ -143,12 +113,53 @@ fi                                 #DOCS:
 # 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:
 
@@ -159,6 +170,88 @@ tee settings/local.php << EOF
 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: