ラズパイをタイル配信だけ行うサーバーにしてみます。
目的:リクエストがキャッシュにあれば配信、なければ何もしない。
データベースとosm2pgsqlが正常にインストールされていないと、タイルの有効期限などを決めるexpireメソッドが機能しないと考えられる?あるいは、たとえデータベースがあっても更新されなければ、タイルexpiryは無効?mod_tileのソースを読んでみる必要ありですが…..。
OpenStreetMapのタイルサーバーですがデータベースを持たないタイプです、やってみます。
ラズパイは3でも4でもどっちでもいいです。
MicroSD設定
MicroSDは16GBを使用
Desktop環境は不要です。以下の設定もすべてSSHで接続したCUIでまかなえます。
新規にtileserverというユーザーを作成してログインしておいてください。
以下の設定の場合、MicroSDの消費は9GBちょっとです。
サーバー構成
1:Softwareインストール
さまざまな依存関係を最初にインストールしておきます。
以下はUbuntu 18.04がターゲットです、20.04の場合はコチラのページをご参照ください。
1 2 3 4 5 6 7 |
sudo add-apt-repository multiverse sudo apt update sudo apt install libboost-all-dev git-core tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev libgeos-dev libgeos++-dev libpq-dev libbz2-dev libproj-dev munin-node munin libprotobuf-c0-dev protobuf-c-compiler libfreetype6-dev libtiff5-dev libicu-dev libgdal-dev libcairo-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev liblua5.2-dev ttf-unifont lua5.1 liblua5.1-dev libgeotiff-epsg |
2:Apache HTTP Serverをインストール
1 2 3 |
sudo apt-get install -y apache2 apache2-dev |
Apacheがインストールされたかチェック
1 2 3 4 5 |
sudo apt install curl curl localhost| grep 'It works!' |
It works! が表示されればOK。
PHPもインストールしておく場合
最新版は7.4です、お好みの問題ですが7.4の場合は以下のバージョン番号を書き換えてください。
1 2 |
sudo apt install php7.2-cli sudo apt install php7.2 libapache2-mod-php7.2 |
3:mapnikをインストール
mod_tileのインストールに必要です。
Ubuntu 20.04の場合はコチラのページをご参照ください。
1 2 3 4 |
sudo apt install autoconf apache2-dev libtool libxml2-dev libbz2-dev libgeos-dev libgeos++-dev libproj-dev gdal-bin libmapnik-dev mapnik-utils python-mapnik python3-psycopg2 |
4:mod_tileとrenderdインストール
mod_tileをインストールします。
「mod_tile」は、タイルのリクエストを処理するApacheモジュールです。
「renderd」は、「mod_tile」がタイルを要求したときに実際にタイルをレンダリングするデーモンです。
今回はrenderdはインストールされますが何もしません。
mod_tileのソースをコンパイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mkdir ~/src;cd ~/src git clone -b switch2osm git://github.com/SomeoneElseOSM/mod_tile.git cd mod_tile ./autogen.sh ./configure make sudo make install sudo make install-mod_tile sudo ldconfig |
5:Apacheの構成
Apacheに「mod_tile」について通知する必要があります。
1 2 3 4 5 |
sudo mkdir /var/lib/mod_tile sudo chown tileserver /var/lib/mod_tile sudo chmod -R a+x /var/lib/mod_tile |
mod_tile.confを新規に作成
1 2 3 |
sudo nano /etc/apache2/conf-available/mod_tile.conf |
以下を追記
1 2 3 |
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so |
mod_tileを起動
1 2 3 |
sudo a2enconf mod_tile |
次に、Apacheに「レンダリング」について通知する必要があります。
今回はレンダリングしませんが、この設定は必要です。
000-default.confをnanoなどのテキストエディターで編集します。
1 2 3 |
sudo nano /etc/apache2/sites-available/000-default.conf |
「ServerAdmin」行と「DocumentRoot」行の間に次を追加します。
1 2 3 4 5 6 7 8 |
LoadTileConfigFile /usr/local/etc/renderd.conf ModTileRenderdSocketName /var/run/renderd/renderd.sock # Timeout before giving up for a tile to be rendered ModTileRequestTimeout 0 # Timeout before giving up for a tile to be rendered that is otherwise missing ModTileMissingRequestTimeout 30 |
Apacheを2回リロードします。
(Apacheは、実行時に再構成すると「混乱」するため、2回実行する必要があります)
1 2 3 4 |
sudo service apache2 reload sudo service apache2 reload |
6:外部データストレージ用のマウントポイント作成
1 2 3 4 5 |
mkdir /var/lib/mod_tile/ajt sudo chmod 666 /var/lib/mod_tile/ajt |
タイルデータが保存されている外部ストレージをマウント
ストレージ(NAS)にはTileというフォルダーを作成し、ここにデータが保存されるものとします。
サンプルデータ(700MBくらいのZIP)は4sharedにアップしています。
東京23区近辺のデータです。だいたいこのへん。
ダウンロードしてTileフォルダーにコピーしておきます。
サンプルデータは1GBもないので、USBメモリにコピーしてもいいかもしれません。
このTileフォルダー(NAS)やUSBメモリーにマウントして使います。
マウントの方法はここを参照
配信確認用htmlファイル作成
タイルを表示するために、mod_tileの「extras」フォルダーにある「sample_leaflet.html」というHTMLファイルを使ってみます。
Webのドキュメントルートは/var/www/htmlですので、ここにコピーします。
sample_leaflet.htmlはLeafletライブラリを使った地図表示用のWebアプリです。
lf.htmlという名前にしてみます。
1 2 3 |
sudo cp /home/tileserver/src/mod_tile/extra/sample_leaflet.html /var/www/html/lf.html |
編集してIPアドレスなどを変更します。
1 2 3 |
sudo nano /var/www/html/lf.html |
2か所変更
1 2 3 4 5 |
var map = L.map('map').setView([34.673791, 135.511708], 5); //<---------zoom level 5で日本の上にViewを持ってきます L.tileLayer('http://127.0.0.1/hot/{z}/{x}/{y}.png', { //<----------127.0.0.1をあなたのローカルIPに変更してください |
以下にアクセス
http://<IPアドレス>/lf.html
上記の東京23区付近のエリアにアクセスしてレベル18まで表示されればOK。
レベル16ならこんな風に見えます。
ズームボタンは表示されるものの、グレイの画面のままの場合
sudo chmod -R a+x /var/lib/mod_tile
で、リロードしてみてください。
Web配信はWi-Fiでも有線でもどちらでもいいですが、Wi-Fiの場合タイル配信の精度が低下する場合があります(レベル17や18のタイルが配信されない)。
Wi-Fi状態をチェック
iwconfigは引数無しで実行すると状態を表示してくれます。
1 2 3 4 5 |
sudo apt install wireless-tools iwconfig |
RateやLinkの質が低下した場合は、イーサネットケーブル接続に切り替えます。
Wi-Fi 停止
1 2 3 |
sudo iwconfig wlan0 txpower off |
ケーブル接続
Wi-Fi 再開する場合(ケーブルは接続したまま)
1 2 3 |
sudo iwconfig wlan0 txpower auto |
レンダリングについてはこのページ参照
レンダリング実行時間はラズパイよりJetson Nanoの方が若干はやいような気がします。
render_list関数はCPUのみ使うそうですので、GPUの恩恵は何もないはずなんですが(^^)。
このページではタイルデータを外部ストレージに置いて、これをマウントして使用していますが、場合によってはMicroSDに直に置いた方がいい場合もあるでしょう。
そういう場合のデータサイズ(日本全体)の例
z 0 ~17 ー> 105GB (491990 Files、125647 Folders)
z 18 ー> 74.6GB (1009236 Files、254891 Folders)
最後にレスポンスですが、これはWebサービスプラットフォームとしてのラズパイやJetsonといったシングルボードコンピュータの能力の問題になります。
タイルデータがNASにあろうと本家(https://tile.openstreetmap.org)にあろうと関係ないです(^^)。
表示の速度は端末の能力の問題です(スマホよりPCの方が機敏です)。
インターネット環境が無い(使えない/使わない)場合のアドホックな構成も準備中
OSMタイルサーバーにしたラズパイをWi-Fiのアクセスポイントにしてみる
シングルボードコンピュータでOpenstreetMapのデータを使ってタイルデータの作成(レンダリング)をしてみましょう。
シングルボードコンピューターにOpenStreetMapのタイルサーバーを立ててみる
USBストレージに小分けしたデータを抜き差ししながら、こまめに使う
ラズパイ起動後にUSBストレージを挿入したら自動で検知して、マウントする
Leave a Reply