SPARQLthon46/togogenome-proxy

提供:TogoWiki

移動: 案内, 検索

sparql-proxy を dev.togogenome.org/sparql にデプロイする。

目次

インストール

インストール先は、例として /opt/proxy/{bin,git,src,log,cache} というディレクトリ構成とする。

% mkdir -p /opt/proxy
% cd /opt/proxy

% mkdir bin
% mkdir cache
% mkdir git
% mkdir log
% mkdir src

% cd src
% curl -O https://nodejs.org/dist/v6.3.1/node-v6.3.1-linux-x64.tar.xz
% tar xvf node-v6.3.1-linux-x64.tar.xz

% cd ../bin
% ln -s ../src/node-v6.3.1-linux-x64/bin/* .

% cd ../git
% git clone git@github.com:enishitech/sparql-proxy.git
% cd sparql-proxy
% npm install

なお、LTS 版の Node.js v4..4.7 では依存ライブラリのインストールに失敗するので、v0.12.5 か、上記のように最新版 (Node.js のサイト https://nodejs.org/en/download/ 参照) を使うのがよさそう。

テスト

プロキシを起動するポート番号、バックエンドの実際のSPARQLエンドポイント、管理ユーザの ID とパスワードを指定して起動。

% PORT=3000 SPARQL_BACKEND=http://sparql.uniprot.org/sparql ADMIN_USER=ore ADMIN_PASSWORD=himitsu npm start

として、http://localhost:3000/ を開き、

PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?image
WHERE {
  ?tax_id foaf:depiction ?image .
  ?image a foaf:Image .
}
LIMIT 10

を検索。結果が出ることを確認したら、http://localhost:3000/admin に↑で指定した user, password でログインして管理画面を開く。 指定したクエリ、実行時間などが表示されていることを確認。

起動スクリプト

ログファイルとキャッシュのディレクトリを指定し、プロキシを起動するポート番号、バックエンドの実際のSPARQLエンドポイント、管理ユーザの ID とパスワードを適宜書き換えて起動。

#!/bin/sh

PREFIX=/opt/proxy

export PATH="$PREFIX/bin:$PATH"

(
cd $PREFIX/git/sparql-proxy

QUERY_LOG_PATH=$PREFIX/log/proxy.log \
CACHE_STORE=file \
CACHE_STORE_PATH=$PREFIX/cache \
MAX_CONCURRENCY=3 \
TRUST_PROXY=true \
PORT=ポート番号 \
SPARQL_BACKEND=SPARQLエンドポイントのURI \
ADMIN_USER=管理ユーザ名 \
ADMIN_PASSWORD=パスワード \
$PREFIX/bin/npm start 2>&1 >> $PREFIX/log/server.log & 
)

Nginx の設定

sparql-proxy をそのまま公開する場合は、80 番ポートで起動するか、

server {
    listen       80;
    server_name  ホスト名;

    location / {
        proxy_pass http://localhost:ポート番号/;
    }
}

のようにすればよい。すでに既存のサービスがホスト名で動いており、サブパスにデプロイしたい場合は、

http {
  server {
    listen 80;
    location ~ ^/proxy/(.*)$ {
      proxy_pass http://localhost:ポート番号/$1$is_args$args;
      proxy_redirect / /proxy/;
      proxy_cookie_path / /proxy/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }
  }
}

のようにすると http://ホスト名/proxy に設置できる。この場合 SPARQL エンドポイントは http://ホスト名/proxy/spraql 管理画面は http://ホスト名/proxy/admin となる。

TogoGenome 開発環境の場合

TogoGenome の場合、上記に加え、SPARQL エンドポイントは http://dev.togogenome.org/sparql で運用していたため、 もともとの SPARQL エンドポイントの設定 location /sparql {} を location /sparql-backend {} に変更し、 location /sparql {} を sparql-proxy のもの http://localhost:ポート番号/sparql で置き換えた (この proxy は /sparql-backend を使用するように設定して起動しておく)。

TogoGenome ではバックエンドがさらに複数台サーバにロードバランスされているので、下記のような設定になった。

upstream virtuoso_cluster_dev_togogenome {
    least_conn;
    server ep3:ポート番号;
    server ep4:ポート番号;
    server ep5:ポート番号;
}

server {
    listen 80;
    server_name dev.togogenome.org;

    location /sparql {
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers X-Requested-With;
        proxy_pass http://localhost:ポート番号/sparql;
        proxy_redirect default;
    }
    location /sparql-backend {
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers X-Requested-With;
        proxy_pass http://virtuoso_cluster_dev_togogenome/sparql;
        proxy_redirect default;
    }
}

これで、もともと素の Virtuoso が晒されていた SPARQL エンドポイントがプロキシサーバで隠蔽されるとともに、キャッシュによって高速なレスポンスが期待できる。

  • と思ったが、ログを見るとどうも使われていない…。開発環境の TogoGenome とスタンザはどのエンドポイントを見ているのか?!
    • http://dev.togogenome.org/sparql-test だった orz
    • そして sparql-proxy は SPARQL をパースしているので「Error: Parse error on line 1: DEFINE sql:select-op」という Virtuoso 独自の SPARQL 拡張で落ちた。オワタ
  • TODO
    • ホスト名/proxy は ホスト名/sparql が sparql-proxy 自身を指すようになっていないと動かない気がするので確認
    • ホスト名/admin を localhost:ポート番号/admin に proxy_pass できても良さそうなんだがリダイレクトがあるので確認
    • sparql-proxy の github が非公開のような気がするので引き取って公開