こんにちは、CData Software Japanテクニカルサポートエンジニアの大川です。
本記事では、これまでお問い合わせいただいた内容をもとに、弊社製品をLinux上でお使いいただく際のTipsをいくつかご紹介します。
1. 今回ご紹介するTipsのプロダクト
CData Sync
www.cdata.com
CData API Server
www.cdata.com
2. CData SyncやCData API Serverのサービス化
インストール後、インストールディレクトリ配下のservice
コマンドを実行することで、自動的にサービス実行用のユーザが作成され、systemdのサービスとして登録できます。(デフォルトのインストール先へインストールした場合の例。「%」はプロンプトです、以下同様)
CData Syncの場合
% sudo systemctl /opt/sync/service
JAVA: [/bin/java]
PRODUCT_HOME: [/opt/sync]
Installing CData Sync service into /etc/systemd/system/cdatasync.service
Created symlink from /etc/systemd/system/multi-user.target.wants/cdatasync.service to /etc/systemd/system/cdatasync.service.
Done
% sudo systemctl start cdatasync
% sudo systemctl status cdatasync
● cdatasync.service - CData Sync
Loaded: loaded (/etc/systemd/system/cdatasync.service; enabled; vendor preset: disabled)
Active: active (running) since ...
CData API Serverの場合
% sudo /opt/apiserver/service
JAVA: [/bin/java]
PRODUCT_HOME: [/opt/apiserver]
Installing API Server 2021 service into /etc/systemd/system/apiserver.service
Created symlink from /etc/systemd/system/multi-user.target.wants/apiserver.service to /etc/systemd/system/apiserver.service.
% sudo systemctl start apiserver
% sudo systemctl status apiserver
● apiserver.service - API Server 2021
Loaded: loaded (/etc/systemd/system/apiserver.service; enabled; vendor preset: disabled)
Active: active (running) since ...
いずれも上記でenabledの状態になりますので、サーバを再起動した場合でも自動起動されるようになります。また、それぞれ自動的にcdatasync
, apiserver
というユーザが作成され、それらのユーザでサービスが起動されるようになりますので、rootユーザで直接起動するよりセキュリティ的にも好ましい起動方法となります。
JVMオプションの指定
上記で作成したサービスのUnit定義ファイルはそれぞれ /etc/systemd/system/cdatasync.service
と /etc/systemd/system/apiserver.service
になります。この中の[Service]
セクションでjava
コマンドが起動されますので、そちらに直接オプションを指定していただいてもよいですし、同じ[Service]
セクションにJAVA_TOOL_OPTIONS
環境変数を指定する方法でもよいです。
例えばJVMのメモリ監視等を行うためにJMXを使いたい場合、以下のようにEnvironment
オプションで設定できます(以下はあくまで例であり接続認証無しとなりますので、詳しい設定値はJREのマニュアル等を参照してください)。
...
[Service]
Environment="JAVA_TOOL_OPTIONS=-Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1"
...
Unit定義ファイルを変更したら、systemdへ変更を反映しサービスを再起動することで設定が反映されます(以下はcdatasyncの例)。
% sudo systemctl daemon-reload
% sudo systemctl restart cdatasync
以下のようにVisualVM (https://visualvm.github.io/) でSSHトンネル経由でリモートからJMX接続できました。
3. リバースプロキシの利用
API Serverをお使いのお客様で「URL(リソース)ごとにIPアドレスの制限を行いたい」といったご要望や「APIのレスポンス時間を知りたい」といったご要望をいただくことがあります。現状ではAPI Server自体ではそれらをサポートしていませんので、対応案としてApacheなどのリバースプロキシを挟み、リバースプロキシ側で実現する構成があります。もちろん、サーブレットコンテナへ配備してそちらのセキュリティ機能を利用する方法もありますが、ここではApacheをリバースプロキシとして利用する手順の例をご紹介します。
なお、以下はAPI Server向けの手順例ですが、Syncでも同様の手順で構築いただけます。
3.1. Apacheのインストール
まずはhttpd (Debian系ではapache2) パッケージをインストールします。以後、Amazon Linux 2を利用した場合の手順です。OS起動時にApacheも起動するようにしておきます。
% sudo yum install httpd
% sudo systemctl enable httpd
3.2. リバースプロキシの設定
CData API Server用の設定ファイルを作成し、mod_proxyの設定をします。
% sudo vi /etc/httpd/conf.d/apiserver.conf
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPreserveHost On
3.3. ログの設定
例としてApacheのログにリクエストが到着してからレスポンスを返し終わるまでの時間を出力するようにしてみます。設定ファイル /etc/httpd/conf/httpd.conf
で「combinedio
」という文字列を検索すると'LogFormat'の設定がありますので、以下のように「%D
」を追加します。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O %D" combinedio
同じ設定ファイルのCustomLog
設定の行で、以下のようにフォーマットをcombined
からcombinedio
に変更します。
CustomLog "logs/access_log" combinedio
3.4. Apacheの起動
以下のようにApacheを起動します。
% sudo systemctl start httpd
起動したら、http://localhost/
でApache経由でAPI Serverにアクセスできることを確認してください。
3.5. その他
URLごとのアクセス制御やHTTPS対応も、Apacheをリバースプロキシとして使うことで可能になります。本記事では詳しい設定方法は省略しますが、ネット上に多くの情報があります。
3.6. 注意点
リバースプロキシを挟むことでレイヤが1つ増えるため、セキュリティについて追加の考慮が必要になることに留意してください。
例えばAPI Serverからは全ての接続元がlocalhostとして認識されるため、API Server上の「信頼されたIP アドレス」の設定は効果がなくなります。そのため、アクセス元のIPアドレスでアクセスを制限したい場合はApache側の設定で行うか、OSのfirewalldで行うか、更に上位のファイアウォールで行うか等の検討が必要です。また、元々のポート(今回の例では8080番)には外部からアクセスされないよう、同じくファイアウォール等で対応する必要がある点も考慮が必要です。
4. 最後に
今後も弊社製品をLinuxでご利用する場合の情報について、Tipsとして紹介していきたいと思います。
関連コンテンツ