はじめに
AWS EC2 上にUbuntu-16.04LTS上に、OpenStreetMapのデータを使って、ルート検索を行う routino を動作させるまでの設定です。
(追記)最新の Ubuntu-18.04LTS の設定手順に合わせて、タイプミスやバージョン等の表記を変更しました。
サーバの準備
AWS EC2 インスタンスの場合
インスタンス作成
今回は、t2.medium タイプを選んで、AWSのコンソール画面から起動しました。タイプ選択は「カン」です。
(追記)サーバ設定後は、swapファイル(1GB)を追加した t2.micro でも、ルート検索そのものは動作しています。どこまで耐えられるかは不明。
初期ログイン
ubuntu系は、起動時に設定した鍵ペアを使い、ユーザubuntuでログインします。
ssh -i XXXX.pem ubuntu@[ip address]
routinoの設定
初期更新
ログイン後とりあえずアップデート
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
ミドルウェア類のインストール
- 開発系ツール類
sudo apt-get install gcc make libc6-dev libz-dev libbz2-dev
sudo apt-get install libwww-perl liburi-perl libjson-pp-perl unzip
sudo apt-get install emacs
emacsは私の好みです。
- Webサーバ類
apt-get install apache2 cgi.pm
この次にPostgres+PostGISをインストールしましたが routino には不要です.
サクッと、「routinoの設定」まですっ飛ばしてください
- データベースのインストール
Postgres+PostGIS とデータ変換ツール osm2pgsql
sudo apt-get install postgresql postgis osm2pgsql
データベース初期設定
$ sudo -i -u postgres
$ psql
psql (9.5.5)
Type "help" for help.
postgres=# \du
<ロールの確認>
postgres=# CREATE ROLE gis LOGIN CREATEDB PASSWORD 'postgis';
postgres=# CREATE DATABASE osm;
ローカルからのDB認証方法を変更
# "local" is for Unix domain socket connections only
##local all all peer
local all all md5
$ sudo /etc/init.d/postgresql restart
POSTGISテンプレート設定
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/spatial_ref_sys.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis_comments.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/rtpostgis.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/raster_comments.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/topology.sql
psql -d template_postgis -f /usr/share/postgresql/9.5/contrib/postgis-2.2/topology_comments.sql
psql -d osm -f /usr/share/postgresql/9.5/contrib/postgis-2.2/postgis.sql
psql -d osm -f /usr/share/postgresql/9.5/contrib/postgis-2.2/spatial_ref_sys.sql
この後、osm2pgsql でデータを登録
routino の設定
routino のビルド
http://www.routino.org/download/ から最新版をダウンロード
wget http://www.routino.org/download/routino-3.2.tgz
展開してビルド(コンパイル)
tar xvfz routino-3.2.tgz
cd routino-3.2/
make
routino の配置
公開するディレクトリにコピー
sudo mkdir /var/www/routino/www
sudo cp -a web/* /var/www/routino/www
sudo chown -R www-data:www-data /var/www/routino
leaflet/OpenLayersのインストール。
いずれも install.sh は古いので編集が必要です。
- leaflet
routino-3.2 では、leafletのレガシーバージョン 0.7.7 を指定していて、install.sh を実行するだけです。
$ sudo ./install.sh
1.0.2 にしてしまいましたが、ルート検索結果の線が表示されないようです。0.7.3 に戻せば大丈夫かもしれません。(未確認)
- OpenLayers
こちらは OpenLayers 2 を使います。
#!/bin/sh -x
version=2.13.1
# Download the file.
#wget http://openlayers.org/download/OpenLayers-$version.tar.gz
wget https://github.com/openlayers/ol2/releases/download/release-${version}/OpenLayers-${version}.tar.gz
# Uncompress it.
tar -xzf OpenLayers-$version.tar.gz
# Create a custom OpenLayers file
(cd OpenLayers-$version/build && python build.py ../../routino.cfg && cp OpenLayers.js ..)
# Copy the files.
cp -p OpenLayers-$version/OpenLayers.js .
cp -pr OpenLayers-$version/img .
cp -pr OpenLayers-$version/theme .
# Delete the remainder
rm -rf OpenLayers-$version
OpenStreetMap データダウンロード&データ変換
日本全域のデータをダウンロードしてroutinoが扱えるように変換します。
下記のスクリプトを用意しておけば、データの更新は簡単です。もっとも、別のディレクトリで作成してコピーする手順にしないと、データ変換中は検索に失敗します。
#!/bin/sh -x
# This script can download from the GeoFabrik server.
# EDIT THIS to set the names of the files to download from GeoFabrik.
files="asia/japan-latest.osm.pbf"
server="download.geofabrik.de"
# Download the files
for file in $files; do
wget -N http://$server/$file
done
# Process the data
../bin/planetsplitter --errorlog *.osm.pbf
地図パラメータ設定
デフォルトのままだとイギリス近辺しか表示されないので、表示範囲を変更します。
設定ファイル:/var/www/routino/www/routino/mapprops.js
$ diff mapprops.js mapprops.js.ORIG
17,18c17,18
< // westedge: -11.0, // Minimum longitude (degrees)
< // eastedge: 2.0, // Maximum longitude (degrees)
---
> westedge: -11.0, // Minimum longitude (degrees)
> eastedge: 2.0, // Maximum longitude (degrees)
20,21c20,21
< // southedge: 49.5, // Minimum latitude (degrees)
< // northedge: 61.0, // Maximum latitude (degrees)
---
> southedge: 49.5, // Minimum latitude (degrees)
> northedge: 61.0, // Maximum latitude (degrees)
23,29c23,24
< westedge: 128.0, // Minimum longitude (degrees)
< eastedge: 145.0, // Maximum longitude (degrees)
< southedge: 26.0, // Minimum latitude (degrees)
< northedge: 45.5, // Maximum latitude (degrees)
<
< zoomout: 6, // Minimum zoom
< zoomin: 18, // Maximum zoom
---
> zoomout: 4, // Minimum zoom
> zoomin: 15, // Maximum zoom
apacheの設定
まず、環境に応じて、apacheの設定ファイルの ServerAdmin / ServerName などを適切に設定してください。
つぎにCGIを有効化します。(Ubuntuの場合)
$ sudo a2enmod cgid
routinoに関する設定を行います。、VirtualHost を使ったサンプルですが、単にroutinoの設定をまとめて移設しやすくするために使っているだけです。
###
# for routine
# hostname: routino.sample.com
####
<VirtualHost *:80>
ServerAdmin admin@zsample.com
ServerName routino.sample.com
DocumentRoot /var/www/routino/www/
<Directory /var/www/routino/www>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi
</Directory>
CustomLog ${APACHE_LOG_DIR}/routino.access.log combined
ErrorLog ${APACHE_LOG_DIR}/routino.error.log
ServerSignature Off
</VirtualHost>
設定ファイルを反映させ、apacheを再起動
$ sudo ln -s /etc/apache2/sites-available/routino.conf /etc/apache2/sites-enabled/routino.conf
$ sudo systemctl restart apache2
(追記)1行目のシンボリックリンク作成は、a2ensite を使ったほうが便利。
動作確認
ブラウザでアクセスし本家( http://www.routino.org/uk/ ) と同様の画面が表示されることを確認する。
ルート検索ができない場合は、CGIが動作しない設定になっている、あるいは、OSMデータ変換に失敗しているなどの可能性が考えられる。