mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-11-26 13:27:52 +03:00
restructure webserver setup in ubuntu 18 script
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.
This commit is contained in:
parent
ab4fe4d58a
commit
91219bb3dd
61
Vagrantfile
vendored
61
Vagrantfile
vendored
@ -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"
|
||||
config.vm.define "ubuntu18-apache" do |sub|
|
||||
sub.vm.box = "generic/ubuntu1804"
|
||||
sub.vm.provision :shell do |s|
|
||||
s.path = "vagrant/Install-on-Ubuntu-18-nginx.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 "ubuntu16" do |sub|
|
||||
sub.vm.box = "bento/ubuntu-16.04"
|
||||
config.vm.define "ubuntu18-nginx" 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]
|
||||
end
|
||||
end
|
||||
|
||||
config.vm.define "travis" do |sub|
|
||||
sub.vm.box = "bento/ubuntu-14.04"
|
||||
sub.vm.provision :shell do |s|
|
||||
s.path = "vagrant/install-on-travis-ci.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
|
||||
|
@ -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
|
||||
|
@ -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/`.
|
||||
|
||||
# Nominatim is now ready to use. Continue with
|
||||
# [importing a database from OSM data](../admin/Import.md).
|
||||
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/`.
|
||||
|
||||
|
||||
|
||||
fi #DOCS:
|
||||
|
Loading…
Reference in New Issue
Block a user