Kimaiで工数管理 (3) LDAPサーバとの連携

前回までは下記を参照ください。

https://qiita.com/inakano_ojisan/items/3f10b919f270200f2488

Kimaiではチームメンバの工数管理しますので、まずはユーザーを追加しなければ始まりません。
「システム」→「ユーザー」から手作業で追加することは可能です。

![スクリーンショット 2024-08-29 9.48.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/0303e59f-60ae-c8a4-9fe0-0e44e96cc7b6.png)

メンバーがほとんど変動しない場合は、上の画面でユーザーを追加して良いと思います。

ただ、メンバーの人数が多かったり、メンバー変更が頻繁にある場合は、メンテナンスの手間がかかります。特にKimai以外にも複数のシステムがある場合はなおさら大変です。

また、システム毎にパスワードが異なると、これもメンバーにとっては負担だったりします。

## LDAPサーバー
これらを解決するために、LDAP（Lightweight Directory Access Protocol）を利用します。LDAP導入には最初に少し手間が掛かりますが、その後の管理の手間を大きく低減できます。
ここでは簡単に触れますが、OpenLDAPというものを利用します。

https://github.com/openldap/openldap

OpenLDAPのDockerイメージには下記があります。

https://github.com/osixia/docker-openldap

OpenLDAPに加えて、メンテナンスを容易化するために、管理ツールであるphpLDAPadminを導入します。

https://github.com/osixia/docker-phpLDAPadmin

また、メンバーが好きなパスワード変更可能とするためのSelf Service Passwordも導入すると良いです。

https://github.com/ltb-project/self-service-password

これらもDockerコンテナが存在するので、導入は容易です。詳しい導入手順は、また別の機会に、記載したいと思います。

## LDAP structureの作成
既に立ち上げているLDAPサーバーがある場合は、できるだけ今ある組織単位（OU）やユーザー情報、グループ情報を使うようにします。

もしLDAPサーバーから立ち上げる場合は、下記にサンプルがあるので、それを使います。

https://github.com/kevinpapst/kimai-ldap-example

作成したLDIFファイルを、phpLDAPadminからインポートします。
今回の記事用に、まっさらのLDAPサーバーをMac上で立ち上げて、kimai-ldap-exampleをインポートしてみました。
インポート後は、下記の様になります。

![スクリーンショット 2024-08-29 15.27.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/813446f3-c9a1-121a-9803-446b94dd7f95.png)

DCを「dc=example,dc=com」に変更しました。

## local.yaml
KimaiからLDAPサーバーにアクセスするための設定を行います。

以下の「The local.yaml settings」のところにサンプルファイルがあります。

https://www.kimai.org/documentation/ldap-example.html

修正した箇所は以下の2箇所です。
- user:とrole:のDCを「dc=example,dc=com」に変更
- connection:に接続するためのusernameとpasswordを追加（下記参照）

```yaml
kimai:
    ldap:
        activate: true
        connection:
            host: host.docker.internal
            username: cn=admin,dc=example,dc=com
            password: adminpw
```

:::note warn
上記ではパスワードはデフォルトになってますので変更してください。
:::

作成したらkimaiのdocker-compose.yamlのあるディレクトリに保存します。

local.yamlファイルは、Kimaiのカスタマイズするための設定ファイルです。コンテナ内の/opt/kimai/config/packages/local.yamlに置くことで読み込まれます。

ホストに置いたlocal.yamlをKimaiのコンテナから参照できる様にdocker-compose.yamlを修正します。

```yaml
  kimai:
    image: kimai/kimai2:apache
    volumes:
      - data:/opt/kimai/var/data
      - ./local.yaml:/opt/kimai/config/packages/local.yaml
```

以上でLDAPサーバーを参照するための設定は完了です。

## ログイン確認
Kimaiのdockerコンテナを再起動し、LDAPサーバーにあるユーザ情報でログインしてみます。

ユーザー名に「user-ldap」、パスワードは「kitten」と入力し、「ログインする」を押します。

:::note warn
kimai-ldap-exampleのパスワードはデフォルトで「kitten」になってますので適宜変更してください。
:::

![スクリーンショット 2024-08-29 16.31.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/0d658ff8-83dd-cca8-0bac-612cf6fd7bbd.png)

ようこそ画面に続いて、個人設定の画面が表示されます。ユーザー毎に好きな言語を設定できます。前回日本語にしておいたのでデフォルトは日本語になっています。

![スクリーンショット 2024-08-29 16.32.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/3faebbc6-262e-9ced-249f-abaf3a620489.png)

ログインできたら成功です。

![スクリーンショット 2024-08-29 16.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202767/603654eb-ea97-d73b-23dc-63c2fcf5d056.png)

なお、この時点ではまだ工数を記録することはできません。
次回以降でプロジェクトやアクティビティを登録することによって、各ユーザーが実績工数を記録できる様になります。

今回、KimaiとLDAPサーバーと連携させることで、管理者の手間を省くことが可能になりました。

## 次回

顧客名やプロジェクト、アクティビティ、タグ名などの登録していきます。

https://qiita.com/inakano_ojisan/items/ea649d6038e22e58aac1