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 が非公開のような気がするので引き取って公開