> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sync.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 外部サーブレットへのCData Sync のデプロイ

export const companyNameLower = "cdata";

export const companyName = "CData";

export const siteNameShortLower = "sync";

export const siteNameShort = "Sync";

export const siteName = "CData Sync";

<Note>このページには、{siteNameShort} セルフホスト環境にのみ適用されるコンテンツが含まれています。</Note>

{siteName} のインストールにはApache Tomcat、Eclipse Jetty、またはIBM WebSphere などのJava サーブレットコンテナにデプロイ可能なWAR ファイルが含まれています。外部Java サーブレットコンテナへのデプロイにはサーブレット3.0（Jetty 8+、Tomcat 7+、WebSphere 8+、など）が必要です。

## Apache Tomcat での設定

### WAR ファイルの配布

Tomcat にWAR ファイルを配布するには2つのオプションがあります。

* `webapps` フォルダにWAR ファイルをコピーする。
* Tomcat の管理コンソール内でWAR ファイルの配布を行う。Apache Tomcat のドキュメントには、この方法のさらに詳しい説明があります。お使いのTomcat のバージョンのドキュメントを参照してください。

WAR ファイルがTomcat のファイルアップロードに許可されているデフォルトの最大サイズを超える可能性があります。デプロイメント中のエラーを解決するために、Manager アプリケーションのweb.xml ファイルを変更して、より大きなファイルを許可することができます。Tomcat の設定に応じて、このファイルは`/usr/share/tomcat7-admin/manager/WEB-INF`、または別の類似ディレクトリにある可能性があります。このファイルでは、許容される最大ファイルサイズ（バイト単位）を変更できます。例えば、200-MB のWAR ファイルのデプロイメントを許容するには、次の値を変更して許容される最大ファイルサイズを変更します。

```xml theme={null}
<multipart-config>
     <!-- 200-MB max -->
  <max-file-size>209715200</max-file-size>
  <max-request-size>209715200</max-request-size>
  <file-size-threshold>0</file-size-threshold>
</multipart-config>
```

### Java 認証・承認サービス（JAAS）の設定

{siteNameShort} がアプリケーション内で動的にユーザーを管理できるようにするには、次のサブセクションで説明するようにJAAS を設定する必要があります。

#### ログインモジュールの作成

`$CATALINA_BASE/conf/` フォルダに、jaas.config という名前のJAAS コンフィギュレーションファイルを作成します。

標準認証を使用するには、jaas.config に次の内容を含めます。

```
Sync {
  sync.LoginModule required;
};
```

LDAP またはWindows Active Directory を使用してユーザーを認証する場合は、代わりに以下の内容を追加します。

```
Sync {
  com.sun.security.auth.module.LdapLoginModule REQUIRED
    userProvider="ldaps://ab1cdef234.wfsaas.net:636/CN=Users,DC=example,DC=com"
    authIdentity="{USERNAME}@example.com"
    userFilter="(&(|(samAccountName={USERNAME})(userPrincipalName={USERNAME})(cn={USERNAME}))(objectClass=user))"
    useSSL=false;
  sync.LoginModule optional;
};
```

この例では、`userProvider`、`authIdentity`、および`userFilter` 属性の値を環境に合わせて変更する必要があります。

#### JAASRealm モジュールの作成（または変更）

以下にあるコンフィギュレーションXML ファイルを作成（既存の場合は変更）して、{siteNameShort} のコンテキストを作成します。

`$CATALINA_BASE/conf/Catalina/localhost/sync.xml`

<Note>Tomcat の構成によっては、このパスが若干異なる場合があります。この例では、`Catalina` はエンジン名、`localhost` はserver.xml で定義されたホスト名を示します。</Note>

以下で示すように、`&lt;Context&gt;` ブロックを定義して`&lt;Realm&gt;` 要素を追加します。

```xml theme={null}
<Context>
  <Realm className="org.apache.catalina.realm.JAASRealm" appName="Sync"
    userClassNames="sync.SimplePrincipal"
    roleClassNames="sync.GroupPrincipal" />
</Context>
```

次に、Tomcat サーバーのコンフィギュレーションファイルserver.xml の`&lt;Host&gt;` 要素を、以下のように`copyXML` 属性を`true` に設定して更新します。

```xml theme={null}
<Host name="localhost" appBase="webapps" unpackWARS="true" autoDeploy="true" copyXML="true">
  ...
</Host>
```

#### ログインモジュールの表示

コンフィギュレーションを表示するには、Java 仮想マシン（JVM）がログインモジュール（jaas.config）に誘導される必要があります。JVM の`java.security.auth.login.config` システムプロパティをjaas.config ファイルのパスに設定します。これを行うには、次の行を`$CATALINA_BASE/conf/catalina.properties` ファイルに追加します。

```bash theme={null}
java.security.auth.login.config=${catalina.base}/conf/jaas.config
```

### データディレクトリ権限の設定

Java サーブレットコンテナを実行するプロセスのユーザーに、以下のように、適切な場所にあるデータディレクトリへの読み / 書きのアクセス権限を許可します。

* **Windows：** `C:\ProgramData\CData\Sync\`
* **Linux：** `~/cdata/sync`

Tomcat サーバーを再起動して、変更を反映します。これでアプリケーションにログインすることができます。

### ログインのロックアウト

{siteNameShort} は、ブルートフォースアタックを防ぐために、不正なパスワードを何度も入力するユーザーを自動的にロックアウトします。デフォルトでは、5分以内に6回不正なパスワードを入力したユーザーは30分間ロックアウトされます。

Web サーバーの動作を規定するXML 設定ファイルを編集することで、ロックアウトの設定を変更できます。この3つの設定はロックアウトに関係します。

* LockoutFailedAttempts - ロックアウトのトリガーとなる不正なパスワードの数。ロックアウトを無効にするには、LockoutFailedAttempts を0に設定します。
* LockoutMinutes - ロックアウトする時間。デフォルトは30分です。
* LockoutTimeCheckPeriod - 失敗した試行回数を0にリセットするまでの時間。デフォルトは5分です。

Tomcat sync.xml ファイルのロックアウト設定を編集するための構文は以下のとおりです。

```xml theme={null}
<Context>
  <Parameter name="LockoutFailedAttempts" value="0" />
</Context>
```

## WebSphere での設定

### WebSphere クラスローダーの設定

WebSphere がアプリケーションリソースを正しくロードするためには、以下の手順に従ってください。

1. WebSphere で、**アプリケーション -> アプリケーション・タイプ -> WebSphere エンタープライズ・アプリケーション**に移動します。
2. **{siteNameShort}** を選択します。
3. **クラス・ロードおよび更新の検出**を選択します。
4. **最初にローカル・クラス・ローダーをロードしたクラス（親が最後）** を選択します。
5. **アプリケーションの単一クラス・ローダー**を選択します。
6. **OK** をクリックします。その後**保存**をクリックします。

### Java 認証・承認サービス（JAAS）の設定

次の手順でJAAS を設定し、{siteNameShort} がWebSphere Application Server 内で動的にユーザーを管理できるようにします。

1. {siteNameShort} をデプロイします。
   1. アプリケーションセキュリティを有効化します（**セキュリティー -> グローバル・セキュリティー -> アプリケーション・セキュリティーを使用可能にする**）。
   2. 次のように、システムログインにカスタムログインモジュールを追加します。
      1. **セキュリティー -> グローバル・セキュリティー -> Java 認証・承認サービス -> システム・ログイン -> WEB\_INBOUND** に移動します。**新規**をクリックして<code>{siteNameShortLower}.LoginModule</code> という名前の新しいエントリを追加します。<code>{siteNameShortLower}.LoginModule</code> は<code>com.ibm.ws.security.server.lm.ltpaLoginModule</code> の前にある必要があることに注意してください。
      2. **ログイン・モジュール・プロキシーの使用**チェックボックスを選択します。
      3. **認証ストラテジー**の**OPTIONAL** を選択します。
      4. **カスタム・プロパティー**の**isWebSphere** を追加して**true** に設定します。
2. グループを作成します。
   1. **ユーザーおよびグループ -> グループの管理 -> 作成**に移動します。
   2. **{companyNameLower}\_admin**、**{companyNameLower}\_standard**、および\*\*{companyNameLower}\_support\*\* グループを作成します。
3. グループをロールにマップします。
   1. **アプリケーション -> アプリケーション・タイプ -> WebSphere エンタープライズ・アプリケーション -> {siteNameShortLower}\_war -> ユーザー / グループへのセキュリティー・ロールのマッピング**に移動します。
   2. **{companyNameLower}\_admin** グループを\*\*{companyNameLower}\_admin\*\* ロールにマップします。
   3. **{companyNameLower}\_standard** グループを\*\*{companyNameLower}\_standard\*\* ロールにマップします。
   4. **{companyNameLower}\_support** グループを\*\*{companyNameLower}\_support\*\* ロールにマップします。
   5. **アプリケーションのレルム内で認証済みすべて**を\*\*{companyNameLower}\_user\*\* ロールにマップします。
4. `com.ibm.ws.webcontainer.AllowQueryParamWithNoEqual` プロパティを**true** に設定します。
   1. **サーバー -> サーバー・タイプ -> Web Sphere Application Server** に移動し、{siteNameShort} がホストされているサーバーを選択します。
   2. **コンテナー設定 -> Web コンテナー設定 -> Web コンテナー**を選択します。
   3. **追加プロパティー -> カスタム・プロパティー**を選択します。
   4. 新規プロパティ：`com.ibm.ws.webcontainer.AllowQueryParamWithNoEqual` を追加します。
   5. 値を**true** に設定します。
5. WebSphere を再起動します。

### データディレクトリ権限の設定

Java サーブレットコンテナを実行するプロセスのユーザーに、データディレクトリへの読み / 書きのアクセス権限を許可します。

* **Windows：** `C:\ProgramData\CData\Sync\`
* **Linux：** `~/cdata/sync`

WebSphere サーバーを再起動して、変更を反映します。これでアプリケーションにログインすることができます。

## Jetty での設定

{siteNameShort} にはJetty Web サーバーが組み込まれていますが、アプリケーションを外部のJetty 設定で使用することもできます。

### WAR ファイルの配布

WAR ファイルをJetty の`webapps` フォルダにコピーします。

### Java 認証・承認サービス（JAAS）の設定

JAAS を設定して{siteNameShort} がアプリケーションのユーザーを管理できるようにするには、次のサブセクションで説明する手順を実行する必要があります。

#### JAAS モジュールの追加

JAAS モジュールをインストールするには、次のコマンドを送信します。

```bash theme={null}
java -jar {JETTY_HOME}/start.jar --add-to-start=jaas
```

#### ログインモジュールの作成

`{JETTY_BASE}/etc/login.conf` フォルダに、login.config という名前のログインコンフィギュレーションファイルを作成します。

login.config ファイルに以下の内容を記述します。

```
Sync {
    sync.LoginModule required debug=true;
};
```

#### セキュリティハンドラの更新

セキュリティハンドラの設定は、sync.xml 設定ファイルにあります。`securityHandler` ブロックを以下のように変更します。

```xml theme={null}
<Set name="securityHandler">
  <New class="org.eclipse.jetty.security.ConstraintSecurityHandler">
   <Set name="loginService">
     <New class="org.eclipse.jetty.jaas.JAASLoginService">
          <!-- This name is the same as **login-config > realm-name** in web.xml.  -->
       <Set name="name">SyncRealm</Set>
          <!-- LoginModuleName must match the name of your LoginModule, as declared in your login-module configuration file. -->
       <Set name="loginModuleName">Sync</Set>
       <!-- Set the principal class name for the custom role. -->
       <Set name="roleClassNames">
           <Array type="java.lang.String">
             <Item>sync.GroupPrincipal</Item>
           </Array>
         </Set>
     </New>
   </Set>
  </New>
</Set>
```

### データディレクトリ権限の設定

Java サーブレットコンテナを実行するプロセスのユーザーに、データディレクトリへの読み / 書きのアクセス権限を許可します。

* **Windows：** `C:\ProgramData\CData\Sync\`
* **Linux：** `~/cdata/sync`

Jetty サーバーを再起動して、変更を反映します。これでアプリケーションにログインすることができます。

## アプリケーションディレクトリの設定

{siteNameShort} *`ApplicationDirectory`* フォルダには、アプリケーションで使用されるすべてのデータ（設定データ、アプリケーションデータ、ログデータ、証明書など）が格納されます。*`ApplicationDirectory`* のデフォルトの場所は、{siteNameShort} が組み込みWeb サーバー経由でホストされているか、外部のJava サーブレットコンテナ経由でホストされているかによって異なります。

{siteNameShort} が外部のJava サーブレットコンテナにホストされている場合、*`ApplicationDirectory`* はサーバーを実行しているユーザーのホームディレクトリからの相対パスです。

`~/sync`

このパスでは、'\~' はアプリケーションをホストするサーバーを実行しているユーザーのホームディレクトリに解決します。

*`ApplicationDirectory`* フォルダを構成でき、これはさまざまなシナリオで役立ちます。

* {siteNameShort} の複数インスタンスのクラスタリング
* アプリケーションデータ用の共有ネットワークドライブの使用
* 同じフォルダにアクセスする他のシステム内への{siteNameShort} の組み込み

*`ApplicationDirectory`* を変更すると、アプリケーションのデータファイルが移動します。ただし、EXE ファイルやJAR ファイルなどの他のアプリケーションリソースは移動しません。これらのリソースは *`InstallationDirectory`* フォルダに格納されます。このフォルダは *`ApplicationDirectory`* と同じ場合がありますが、*`ApplicationDirectory`* を変更しても、これらのリソースの場所は変わりません。

{siteNameShort} を外部のJava サーブレット（アプリケーションに含まれるJetty サーバー以外のサーバー）で使用する場合、アプリケーションのデータディレクトリの設定の詳細は使用する特定のサーブレットに依存します。特定のサーブレットに適した構文を使用する`AppDirectory` 環境変数を必要なディレクトリのパスに設定する必要があります。

{siteNameShort} が`AppDirectory` のパスを見つけることができ、そのパスで読み取りと書き込みができる適切なアクセス許可を持つ場合、指定したディレクトリ内にデータフォルダを作成します。

## アプリケーションデータベースの設定

{siteNameShort} のアプリケーションデータベースは、以下のようなアプリケーションデータの複数のテーブルを保存します。

* ジョブ
* タスク
* 接続
* 履歴（ジョブとタスク両方）
* アプリケーションログ（アプリケーションレベルのエラーとイベント）
* 監査ログ（ユーザーによる{siteNameShort} の設定変更）

バージョン26.2 以降、{siteNameShort} はデフォルトのアプリケーションデータベースとして組み込みH2 データベースを使用します。既存のインストールでは、引き続きレガシーの組み込みDerby データベースを使用します。{siteNameShort} は既存のインストールをH2 に自動的に移行しません。

また、Microsoft SQL Server、PostgreSQL、MySQL などのエンタープライズデータベースを使用するよう{siteNameShort} を設定することもできます。外部データベースを設定する別の方法もありますが（例えば、[AWS-AMI 版](./aws-ami-edition#アプリケーションデータベース)で説明されているように）、推奨されるアプローチは[移行ドキュメント](../administration/settings-page/migration)の手順に従うことです。

### データベース接続の設定

{siteNameShort} を外部のJava サーブレット（アプリケーションに含まれるJetty サーバー以外のサーバー）で使用する場合、アプリケーションのデータベースの設定の詳細は使用する特定のサーブレットに依存します。特定のサーブレットに適した構文を使用する、サーバーを設定する際のアプローチを次のいずれかから選択します。

* ターゲットデータベースの接続プロパティを含むJNDI データソースを定義。
* `APP_DB` 環境変数をJDBC 接続文字列に設定。

{siteNameShort} がJDNI データソースまたは`APP_DB` 接続文字列を使用してデータベースに接続できる場合、そのデータベースをアプリケーションデータベースとして使用します。

### Protect Your Database Credentials with an Encrypted Connection String

{siteNameShort} provides the ability to generate an encrypted connection string for your application database connection. You can use this encrypted connection string to specify the application database without storing your login credentials in plaintext in the {siteNameShort} properties file.

To generate an encrypted connection string, issue the following command in the installation directory where {siteNameShortLower}.jar is located, substituting your connection information for the example string in quotation marks:

```bash theme={null}
java -jar sync.jar -EncryptConnectionString "jdbc:cdata:mysql:Server=serverName;Port=1234;Database=databaseName;User=userName;Password=passwordSample"
```

After you issue the command, the command window prints the encrypted string, as shown in this example:

```bash theme={null}
ENCRYPTEDA:5TWyjE0U4GBEVNkd51SqbMXaBwVGqj5uyMfTHt48y/F5l3sDPZynNnPMb/ppXzuFTzFPywA1/SSKUgLy9nAuvA7RAdZj7WsKI1xAgDMmEFNQ68/lHjFYZpS10sIaoUloyZVDkj4uLHTZ0SaMD5PPUA==
```

You can use this encrypted string in place of the plaintext value for `cdata.app.db` when you configure the application database with the methods [explained earlier](#データベース接続の設定).
