Skip to content

Instantly share code, notes, and snippets.

@freretuc
Last active April 17, 2017 12:26
Show Gist options
  • Save freretuc/82f3801fcefee458da87d9a5bbb37a7b to your computer and use it in GitHub Desktop.
Save freretuc/82f3801fcefee458da87d9a5bbb37a7b to your computer and use it in GitHub Desktop.
Overpass API setup
# http://wiki.openstreetmap.org/wiki/Overpass_API/Installation
# Ubuntu 16.04
# Intel(R) Xeon(R) CPU W3520 @ 2.67GHz
# 16GB RAM
# 2To
# update && upgrade
apt-get update && apt-get -y upgrade
# installation des paquets utiles (le screen sera utile par la suite)
apt-get -y install wget g++ make expat libexpat1-dev zlib1g-dev screen
# l'arborescence de travail :
# /opt/osm contiendra l'ensemble des binaires
# /data/db contiendra la base de données importée
# /data/import contiendra les données à importer (planet.osm...)
# /data/diffs contiendra l'ensemble des différences à importer dans la base
mkdir -p /data/db
mkdir -p /data/import
mkdir -p /data/diffs
##
# Récupération des sources et compilation
##
# récupération des sources
cd /opt/
wget http://dev.overpass-api.de/releases/osm-3s_v0.7.53.tar.gz
gunzip <osm-3s_v0.7.53.tar.gz | tar xvf -
mv osm-3s_v0.7.53 /opt/osm
cd osm/
./configure --prefix="`pwd`"
# je vous conseille d'exécuter la commande make via screen, la compilation pouvant prendre du temps
make
###
# Importation des données
###
# Vous pouvez récupérer les fichiers via des mirroirs, type http://download.geofabrik.de/europe/france.html
# Je vous conseille de travailler avec un petit pays/départemetn pour valider le processus avant d'importer la planète
# L'importation de la France a pris 3h30
cd /data/import
# on récupère la corse par exemple
wget -O corse.osm.bz2 "http://download.geofabrik.de/europe/france/corse-latest.osm.bz2"
# france : http://download.geofabrik.de/europe/france-latest.osm.bz2
# La commande suivante est à lancer en screen ou nohup.
/opt/osm/bin/init_osm3s.sh /data/import/corse.osm.bz2 "/data/db/" "/opt/osm/"
# Si vous voulez rajouter les meta, la commande devient :
#/opt/osm/bin/init_osm3s.sh /data/import/corse.osm.bz2 "/data/db/" "/opt/osm/" --meta
# L'import est complètement terminé lorsque "Update complete" est indiqué sur la console ou dans nohup.out
# Vous devriez pouvoir faire un test de fonctionnement via la requête :
/opt/osm/bin/osm3s_query --db-dir=/data/db
# un interpréteur s'affiche, vous pouvez indiquer une requête en XML (à adapter en fonction de la zone importée) :
# <query type="node"><bbox-query n="51.0" s="50.9" w="6.9" e="7.0"/><has-kv k="amenity" v="pub"/></query><print/>
# finissez par Ctrl + D et vous devriez avoir un retour.
# La requête ci-dessus retourne la liste des pubs de la ville de Cologne en Allemange
##
# Executer l'interpreteur en mode daemon
##
# Le truc intéressant c'est d'en faire une API web, donc de faire en sorte qu'au démarrage, le système parse les données
# On va donc créer un script dans /etc/init.d/
cd /etc/init/
nano overpass.sh
# Copiez le contenu suivant
#!/bin/sh
### BEGIN INIT INFO
# Provides: overpass
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Put a short description of the service here
# Description: Put a long description of the service here
### END INIT INFO
# Change the next 3 lines to suit where you install your script and what you want to call it
DB=/data/db
DIR=/opt/osm
DAEMON=$DIR/bin/dispatcher
DAEMON_NAME=overpass
# Add any command line options for your daemon here
DAEMON_OPTS="--osm-base --db-dir=$DB"
# This next line determines what user the script runs as.
# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
DAEMON_USER=root
# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/$DAEMON_NAME.pid
. /lib/lsb/init-functions
do_start () {
# Il faut nettoyer les fichiers possiblement présents
log_daemon_msg "Cleaning..."
rm $DB/osm3s*
rm /dev/shm/osm3s*
# On démarre vraiment le daemon
log_daemon_msg "Starting system $DAEMON_NAME daemon"
start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS
log_end_msg $?
}
do_stop () {
log_daemon_msg "Stopping system $DAEMON_NAME daemon"
start-stop-daemon --stop --pidfile $PIDFILE --retry 10
log_end_msg $?
}
case "$1" in
start|stop)
do_${1}
;;
restart|reload|force-reload)
do_stop
do_start
;;
status)
status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
exit 1
;;
esac
exit 0
# Ctrl + X pour fermer, en validant les changements
chmod +x overpass.sh
update-rc.d overpass.sh defaults
# on démarre le daemon
/etc/init.d/overpass.sh start
# en faisant un ps aux | grep "dispatcher", on devrait voir que le système est fonctionnel
##
# Apache et web API
##
apt-get -y install apache2
a2enmod cgi
a2enmod ext_filter
# Le host qui nous intéresse (vous devriez avoir une version supérieure à Apache 2.4)
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ExtFilterDefine gzip mode=output cmd=/bin/gzip
# DocumentRoot du serveur par défaut
DocumentRoot /var/www
ScriptAlias /api/ /opt/osm/cgi-bin/
<Directory "/opt/osm/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
#SetOutputFilter gzip
#Header set Content-Encoding gzip
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
# On redémarre Apache
/etc/init.d/apache2 restart
# On teste que tout fonctionne
wget --output-document=test.xml http://[__IP__ou__domaine__]/api/interpreter?data=%3Cprint%20mode=%22body%22/%3E
# Vous devriez avoir quelquechose du type :
<?xml version="1.0" encoding="UTF-8"?>
<osm-derived>
<note>
The data included in this document is from www.openstreetmap.org. It has there been collected
by a large group of contributors. For individual attribution of each item please refer to
http://www.openstreetmap.org/api/0.6/[node|way|relation]/#id/history
</note>
<meta osm_base=""/>
</osm-derived>
# Si vous n'avez pas de messages d'erreur, c'est bien, on va pouvoir poursuivre...
# on va installer letsencrypt pout mettre un certificat SSL sur notre seveur
# il faut que les DNS soient actifs vers votre serveur
apt-get -y install git
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt --depth=1
# On demande le certificat pour notre domaine ici osm.domain.com
/opt/letsencrypt/letsencrypt-auto certonly --webroot -w /var/www/osm.domain.com -d osm.domain.com -m [email protected] --agree-tos
# Une fois le certificat obtenu, on va configurer apache et le vhost :
a2enmod ssl
a2enmod headers
nano /etc/letsencrypt/options-ssl-apache.conf
# Baseline setting to Include for SSL sites
SSLEngine on
# Intermediate configuration, tweak to your needs
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
#CustomLog /var/log/apache2/access.log vhost_combined
#LogLevel warn
#ErrorLog /var/log/apache2/error.log
# Always ensure Cookies have "Secure" set (JAH 2012/1)
#Header edit Set-Cookie (?i)^(.*)(;\s*secure)??((\s*;)?(.*)) "$1; Secure$3$4"
##EOF
# On enregistre
# On s'attaque maintenant à notre vhost :
<VirtualHost *:80>
ServerName osm.domain.com
ServerAlias *.domain.com
Redirect permanent / https://osm.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName osm.domain.com
ServerAlias *.domain.com
ServerAdmin [email protected]
ServerSignature Off
ExtFilterDefine gzip mode=output cmd=/bin/gzip
DocumentRoot /var/www/
ScriptAlias /api/ /opt/osm/cgi-bin/
<Directory "/opt/osm/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
#SetOutputFilter gzip
#Header set Content-Encoding gzip
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
SSLCertificateFile /etc/letsencrypt/live/osm.domain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/osm.domain.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/osm.domain.com/chain.pem
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
##EOF
# On redémarre apache
/etc/init.d/apache2 restart
#
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment