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

# UCIDM API

UCIDM は ID 連携のための Web API を提供します。

さまざまな機能を提供します。

- ユーザ・グループ操作
- 外部連携先設定操作
- 履歴情報一覧
- ID 連携ジョブ管理
- LDAP サーバー管理
- アカウント管理
- システム設定

UCIDM API はコンテナとして稼働させます。次のように `compose.yml` に設定します。

```yml
  api:
    depends_on:
      mongo:
        condition: service_healthy
      rabbitmq:
        condition: service_healthy
    container_name: api
    hostname: api
    image: docker.io/osstech/ucidm-api:latest
    logging: *default-logging
    volumes:
      - type: bind
        source: ./server-data
        target: /ucidm
        bind:
          create_host_path: false
      - type: bind
        source: ./server-data/files
        target: /files
        bind:
          create_host_path: true
      #- type: bind
      #  source: ./certs/chainCA.crt
      #  target: ${SSL_CERT_FILE}
      #  read_only: true
      #  bind:
      #    create_host_path: false
    entrypoint:
      - ./bin/entrypoint.sh
      - -port
      - ${API_PORT}
      - -jsonl
    environment:
      TZ: "${TZ}"
      # SSL_CERT_FILE: "${SSL_CERT_FILE}"
      MONGO_USER: "${MONGO_USER}"
      MONGO_PASSWORD: "${MONGO_PASSWORD}"
      MONGO_DATABASE: "${MONGO_DATABASE}"
      MONGO_HOSTS: "${MONGO_HOSTS}"
      MONGO_REPLICA_SET: "${MONGO_REPLICA_SET}"
      RABBITMQ_USER: "${RABBITMQ_USER}"
      RABBITMQ_PASSWORD: "${RABBITMQ_PASSWORD}"
      RABBITMQ_HOST: "${RABBITMQ_HOST}"
    ports:
      - 127.0.0.1:${API_PORT}:${API_PORT}
    restart: "always"
```

ここで参照する環境変数は `.env` に設定します。

## 環境変数の設定 \{#environment-variables}

### API サーバー \{#api-server}

| 環境変数          |   値   | 既定値 | 説明                                    |
| :------------ | :---: | :-: | :------------------------------------ |
| TZ            |   任意  |  -- | タイムゾーン情報                              |
| API_PORT      | 18080 |  -- | 接続を受け付けるポート番号                         |
| SSL_CERT_FILE |   任意  |  -- | LDAP サーバーとの接続において<br />信頼する CA 証明書を指定 |

### ミドルウェア \{#middleware}

| 環境変数                  |  値  |  既定値  | 説明                          |
| :-------------------- | :-: | :---: | :-------------------------- |
| MONGO_USER            |  任意 |   --  | 接続する MongoDB のユーザ名          |
| MONGO_PASSWORD        |  任意 |   --  | 接続する MongoDB のパスワード         |
| MONGO_DATABASE        |  任意 | ucidm | 接続する MongoDB のデータベース        |
| MONGO_HOSTS           |  任意 |   --  | 接続する MongoDB のホスト           |
| MONGO_REPLICA_SET     |  任意 |   --  | 接続する MongoDB のレプリカセットの名前    |
| RABBITMQ_USER         |  任意 |   --  | 接続する RabbitMQ のユーザ名         |
| RABBITMQ_PASSWORD     |  任意 |   --  | 接続する RabbitMQ のパスワード        |
| RABBITMQ_HOST         |  任意 |   --  | 接続する RabbitMQ のホスト          |
| MAX_PRODUCER_SESSIONS |  任意 |  512  | RabbitMQ Producer の最大セッション数 |

## ホスト名を名前解決できないとき \{#extra_hosts}

コンテナ内からホスト OS の `/etc/hosts` を参照することはできません。コンテナ内からアクセスするホスト名を DNS で解決できない場合、コンテナ内に `/etc/hosts` を配置するのに相当する設定が [extra_hosts](https://docs.docker.com/reference/compose-file/services/#extra_hosts) になります。

```yml
  api:
    ...
    ports:
      - 127.0.0.1:${API_PORT}:${API_PORT}
    extra_hosts:
      - "host1.example.com:10.0.100.1"
      - "host2.example.com:10.0.100.2"
      - "host3.example.com:10.0.100.3"
```
