> For AI agents: the complete documentation index is available at /resource/ucidm/docs/on-premise/1.8.0/llms.txt, the full documentation bundle is available at /resource/ucidm/docs/on-premise/1.8.0/llms-full.txt.

# Compose サービスの準備 \{#configure-compose}

UCIDM は [Docker Compose](https://docs.docker.com/compose/) を使い、複数のアプリケーションやミドルウェアのコンテナを起動して、それぞれのサービスが協調してシステムを構成しています。

これらはすべて `compose.yml` に設定します。また `compose.yml` はデフォルトの動作として環境変数を同じディレクトリ内の `.env` から読み込みます。

`.env` ファイルはパスワードなどの機密情報を含むため、ファイルを保管するマシンへのアクセス権限に注意してください。ここでは ucidm ユーザーがアクセス権限をもつと仮定して設定作業を行います。

## コンテナレジストリへのアクセス設定

[OSSTech 社のコンテナレジストリ](https://hub.docker.com/u/osstech) にアクセスするには [Docker Hub](https://hub.docker.com/) へ [ログイン](https://docs.docker.com/engine/reference/commandline/login/) する必要があります。作業するユーザーの初回設定時のみ、次のようにしてログインしてください。実際に設定するパスワードは弊社のサポート担当者にご確認ください。

```bash
$ docker login --username osstech
Password:  # パスワードを入力
...
Login Succeeded
```

ログインに成功すると、ホームディレクトリの `.docker` ディレクトリ配下に `config.json` というファイルが作成されて認証情報が保存されます。すでに `config.json` が存在するのであれば今回の設定が追加されます。

```bash
$ cat $HOME/.docker/config.json
```

設定後、次のように実行してください。認証情報が正しければコンテナイメージを取得してコンテナを実行できます。

```bash
$ docker run docker.io/osstech/test-myrepo
...
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
```

## Docker Compose の設定ファイル

ucidm ユーザーのホームディレクトリである `/var/opt/osstech/lib/ucidm` に `compose.yml` を配置します。

```bash
$ cd
```

Docker Compose の設定のサンプルファイルを `/var/opt/osstech/lib/ucidm` ディレクトリにコピーします。`compose.yml` で扱う変数はデフォルトで `.env` ファイルで解決されます。この `.env` ファイルを直接使うデメリットとして次があります。

- `-a` オプションなしの ls コマンドで表示されないために `.env` ファイルを探しにくい
- シェルのワイルドカード展開で対象から除外されるために grep コマンドなどでフィルターされない

`.env` ファイル以外のファイル名で使う場合、docker コマンドへのオプション指定や環境変数設定が必要になります。これらのデメリットを解消した上で追加設定を不要にするため、`ucidm.env` を参照するシンボリックリンクとして `.env` を作成します。

```bash
$ cp /opt/osstech/share/ucidm/compose.yml .
$ cp /opt/osstech/share/ucidm/ucidm.env.example ucidm.env
$ ln -s "$(pwd)/ucidm.env" "$(pwd)/.env"
```

Docker Compose 上でコンテナとして稼働するアプリケーションやミドルウェアの設定のサンプルファイルも一緒にコピーします。これらのディレクトリはコンテナのサービスごとに永続化データ、設定情報やスクリプト等のファイルを配置しています。コンテナを起動したときに、さらにディレクトリを作る場合もあります。

```bash
$ cp -a /opt/osstech/share/ucidm/{mongodb,rabbitmq,agent-data,server-data,ucidm-ui} .
$ ls -p  # 次のファイルやディレクトリがあることを確認
agent-data/  compose.yml  mongodb/  rabbitmq/  server-data/  ucidm-ui/  ucidm.env
```

`compose.yml` の構文チェックを行います。次のように実行してワーニングやエラーが出力されないことを確認します。

```bash
$ docker compose config 1>/dev/null
$ echo $?
0
```

### コンテナイメージの取得

`compose.yml` を配置できました。この後にいくつか環境変数を設定していきますが、先にコンテナイメージをローカルに取得しておきます。すでにコンテナイメージを取得済みであっても、より新しいイメージがあれば最新のイメージを取得します。

```bash
$ docker compose pull
```

ローカルに取得したコンテナイメージを確認します。

```bash
$ docker image ls
```

Docker Compose 上で稼働させるアプリケーションやミドルウェアの設定の詳細は次のページでみていきます。

1. [MongoDB](/resource/ucidm/docs/on-premise/1.8.0/configuration/mongodb.md)
2. [RabbitMQ](/resource/ucidm/docs/on-premise/1.8.0/configuration/rabbitmq.md)
3. [UCIDM API](/resource/ucidm/docs/on-premise/1.8.0/configuration/ucidm-api.md)
4. [ID 連携管理画面](/resource/ucidm/docs/on-premise/1.8.0/configuration/admin-ui.md)
5. [ユーザープロファイル画面](/resource/ucidm/docs/on-premise/1.8.0/configuration/ucidm-ui.md)
6. [外部連携](/resource/ucidm/docs/on-premise/1.8.0/configuration/destination/index.md) のそれぞれのサービス
   - サンプルの `compose.yml` から必要なサービス定義以外は削除してください
7. [Agent モジュール](/resource/ucidm/docs/on-premise/1.8.0/configuration/agent/index.md) のそれぞれのサービス
   - サンプルの `compose.yml` から必要なサービス定義以外は削除してください
