Last active
April 17, 2017 12:26
-
-
Save freretuc/82f3801fcefee458da87d9a5bbb37a7b to your computer and use it in GitHub Desktop.
Overpass API setup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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