組み込みJetty サーバー

Version 25.1.9209


組み込みJetty サーバー


API Server にはJetty 上に構築されたWeb サーバーがバンドルされており、ほとんどのデプロイメントシナリオに最適です。CData では、別の設定が必要な場合を除き、この組み込みJetty サーバーを使用することを推奨しています。

アプリケーションの起動

以下のセクションで説明する方法で、アプリケーションを起動できます。

Java コマンドを使用

API Server をJava コマンドを使って開始するには:

  1. ターミナルを開き、API Server のインストールディレクトリに移動します。

  2. 次のJava コマンドを発行して、apiserver.jar ファイルを実行します:

    java -jar apiserver.jar
    

Linux サービスを使用

Linux プラットフォームにAPI Server をサービスとしてインストールすると、次の構文で示すように、ターミナルを使用してAPI Server の開始停止、および再開コマンドを発行できます:

systemctl [start | stop | restart] cdata-apiserver

管理コンソールへのアクセス

デフォルトでは、組み込みサーバーはポート8080 でAPI Server をホストし、プレーンテキスト接続(つまり、HTTPS ではなくHTTP)のみを許容します。

サーバーを起動したら、Web ブラウザでURL:http://localhost:8080 にアクセスし、管理コンソールにアクセスします。UI にアクセスするには、デフォルトのユーザー名とパスワード認証情報(admin / admin)を使用します。

アプリケーションの設定

組み込みWeb サーバーの構成は、webapp/apiserver.xml に含まれています。このファイルは、デプロイに合わせて変更できます。apiserver.xml ファイルのコンテンツ内のXML コメントにいくつか変更例がありますが、有効なjetty.xml 設定であれば受け入れるべきです。

ポートの変更

組み込みサーバーがリッスンするポートを設定するには:

  1. インストールディレクトリにあるapiserver.xml ファイルを開きます。次に、以下に示すHTTP コネクタの定義を見つけます:

    <New id="httpConnector" class="org.eclipse.jetty.server.ServerConnector">
    
  2. この定義内で、次の行を探してデフォルトのポートを使用するポートに置き換えます:

    <Set name="port">8080</Set>
    

SSL / TLS の有効化

SSL / TLS 接続(HTTPS)を有効にするには:

  1. インストールディレクトリにあるapiserver.xml ファイルを開き、以下に示すHTTP コネクタの定義を見つけます:

    <New id="httpConnector" class="org.eclipse.jetty.server.ServerConnector">
    
  2. この定義内で(手順1 で示す<New> エレメントの直接の子として)、次のXML ブロックを追加することでsslContextFactory 引数を指定します:

        <Arg name="sslContextFactory">
           <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory$Server">
              <Set name="KeyStorePath"><SystemProperty name="apiserver.home" default="." />/keystore</ Set>
              <Set name="KeyStorePassword">MyPassword</Set>
           </New>
        </Arg>
    

    Note:上記の<Arg> エレメントは、コネクタ定義の先頭で他の<Arg> エレメントに隣接している必要があります。このブロックは、例えばサーバーポートを定義する<Set> エレメントの後ろに配置してはいけません。

    KeyStorePath プロパティは、SSL / TLS サーバーをホストするときに使用されるSSL / TLS 証明書の場所を定義します。前の例では、API Server のデータディレクトリ(デフォルトではC:\ProgramData\CData\apiserver 内)にkeystore という名前のJava keystore ファイルが作成されていることを仮定しています。KeyStorePassword プロパティは、構成された証明書に対応するパスワードに設定する必要があります。

    また、次の例のように、パスワード付きのキー参照を追加することで、PFX ファイル経由で秘密鍵を参照することができます:

      <Arg name="sslContextFactory">
        <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
          <Set name="KeyStorePath"><SystemProperty name="apiserver.home" default="."/>MyCertificate.pfx</Set>
          <Set name="KeyStorePassword">MyPassword</Set>
          <Set name="KeyStoreType">PKCS12</Set>
        </New>
      </Arg>
    

    Note:API Server で設定するために外部秘密鍵を取得する場合は、必ず証明書の所有者をAPI Server をホストするために使用されるサービスアカウントに変更してください。

ユーザークレデンシャルの変更

API Server のWeb UI にログイン可能なユーザーアカウント(ユーザー)は、インストールディレクトリにあるapiserverRealm.properties ファイルで定義されています。このファイルの各行は、次の構文を使ってユーザーを定義します:

Username:Password\[Roles]

新しいユーザーを定義するには行を追加し、デフォルトのログイン認証情報を変更する場合は既存の行を変更してください。

ロードバランシングの設定

組み込みJetty サーバーでロードバランシングの設定を行うには、以下のアイテムの同期が維持されていることを確認する必要があります。

  • API Server アプリケーションファイル(apiserver.war)

  • データソースへの接続に使用するJDBC ドライバー

Jetty の設定ファイルには直接アクセスできません。代わりに、インストールした場所のwebapp\ サブディレクトリにあるapiserver.xml ファイルの<WebAppContext> エレメントで、カスタムデータベースリソースを設定することができます。次の例は、<WebAppContext> の設定を示します:

<WebAppContext>
  <Call name="setHandler">
    <Arg>
      <New id="apiserver" class="org.eclipse.jetty.webapp.WebAppContext">
        [...]
        <Call name="setInitParameter">
          <Arg>APP_DB</Arg>
          <Arg>jdbc:mysql:Server=MyServer;Port=3306;Database=MyDatabase;User=MyUser;Password=MyPassword</Arg>
        </Call>
        <Call name="setInitParameter">
          <Arg>APP_USERS</Arg>
          <Arg>jdbc:mysql:Server=MyServer;Port=3306;Database=MyDatabase;User=MyUser;Password=MyPassword</Arg>
        </Call>
        <Call name="setInitParameter">
          <Arg>APP_LOGS</Arg>
          <Arg>jdbc:mysql:Server=MyServer;Port=3306;Database=MyDatabase;User=MyUser;Password=MyPassword</Arg>
        </Call>
      </New>
    </Arg>
  </Call>
</WebAppContext>

API Server のベースURL が、API Server がインストールされているサーバーと一致しない場合は、ベースURL を手動で設定する必要があります。以下の手順で行います:

  1. API Server に管理者(admin)としてログインします。

  2. 設定 > サーバーを選択します。

  3. サーバータブのODataセクションで、ベースURLテキストボックスに必要なURL を入力します。

API Server を参照するURL(例えばメタデータURL)が生成される場合、それらはこのカスタムベースURL を指します。

管理API の有効化

デフォルトでは、管理API は有効化されています。admin ユーザーはadmin.rst およびadmin.rsc エンドポイントからAPI Server 管理API にアクセスできます。

Note:管理API には、admin という名前のAPI ユーザーのみがアクセス可能で、エンタープライズプランとレガシープランに制限されています。その他のAPI ユーザーへのアクセスは拒否されます。

手動で管理API を無効化する場合は、以下の手順で行います:

  1. WEB-INF/web.xml ファイルを任意のテキストエディタで開きます。

  2. Restrict direct access to Management API という名前のsecurity-constraint セクションに移動します。

  3. 以下の<auth-constraint> 要素を見つけて、<role-name> 行全体を削除してロールを削除します。

     ```xml
     <auth-constraint>
        <role-name>cdata_admin</role-name>
     </auth-constraint>
     ```  
    
  4. ファイルへの変更を保存します。

  5. API Server を再起動します。

これらの手順を完了すると、admin ユーザーはAPI Server 管理API にアクセスできなくなります。

AWS AMI 環境でのAPI Server の有効化

AWS Amazon Machine Image(AMI)のAPI Server は、Java サーブレットコンテナのJetty で実行されます。この環境で管理API を有効にするには、前のセクションと同じ手順に従います。この場合、web.xml ファイルは以下にあります:

/opt/apiserver/work/jetty-0.0.0.0-8443-apiserver.war-_-any-/webapp/WEB-INF/web.xml

API Server サービスを再起動するには、次のコマンドを使用します:

systemctl restart jetty

通知の管理

E メール通知を受け取るようにAPI Server を設定するには:

  1. 管理コンソールで設定 > 通知を選択します。

  2. E メールサーバー設定カテゴリで、送信元宛先、および件名プロパティを指定します。

  3. SMTP サーバーの認証とセキュリティプロパティを指定します(SMTP ServerUserPasswordPort、およびTLS Start Mode)。

  4. テストメールを送信をクリックして、通知を受信することを確認します。