プリザンターの公式DockerイメージをComposeで動かす

## 変更あり

文中の「データベース初期化クエリ」は記述から削除しました。(プリザンターバージョンアップに伴う)

## はじめに

このエントリはこちらの続きです。

[プリザンターを公式Dockerイメージで動かす \- Qiita](https://qiita.com/imp-kawano/items/b5d7d933e36ce1ce15ad)

今回はDocker Composeを使って楽に動かします。

## 準備

必要なファイルを用意します。

- ~~データベース初期化クエリ~~
- 環境変数ファイル
- docker-compose.yml

~~1. データベース初期化クエリの作成~~

   ~~データベース初期化クエリはComposeで動かす場合でも必要ですので [前回](https://qiita.com/imp-kawano/items/b5d7d933e36ce1ce15ad#%E6%BA%96%E5%82%99) を参考に用意してください。~~

2. 環境変数を指定するファイルの作成

   前回と指定する内容は同じですが記述が少し変わります。  
   またPostgreSQLの初期化に必要な設定値も一緒に記述します。

   `PWD=<Any ... Password>`は接続先DBの各ユーザのパスワードですので前回同様それぞれ書きかえてください。  
   `POSTGRES_HOST_AUTH_METHOD`と`POSTGRES_INITDB_ARGS`が前回から増えています。認証方式を明示的に指定するようにしています。

   変更したら`.env`として保存しましょう。

   ```bash
   Implem_Pleasanter_Rds_PostgreSQL_SaConnectionString='Server=db;Database=postgres;UID=postgres;PWD=<Any Sa password>'
   Implem_Pleasanter_Rds_PostgreSQL_OwnerConnectionString='Server=db;Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=<Any Owner password>'
   Implem_Pleasanter_Rds_PostgreSQL_UserConnectionString='Server=db;Database=#ServiceName#;UID=#ServiceName#_User;PWD=<Any User password>'
   POSTGRES_USER=<Any Sa User>
   POSTGRES_PASSWORD=<Any Sa Password>
   POSTGRES_DB=<Any system db name>
   POSTGRES_HOST_AUTH_METHOD=scram-sha-256
   POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256"
   ```

3. docker-compose.yml

   ```yaml
   version: '3'

   services:
     db:
       container_name: postgres
       image: postgres:15
       ports:
         - "5432:5432"
       environment:
         - POSTGRES_USER
         - POSTGRES_PASSWORD
         - POSTGRES_DB
         - POSTGRES_HOST_AUTH_METHOD
         - POSTGRES_INITDB_ARGS

     pleasanter:
       container_name: pleasanter
       image: implem/pleasanter
       depends_on:
         - db
       environment:
         Implem.Pleasanter_Rds_PostgreSQL_SaConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_SaConnectionString}
         Implem.Pleasanter_Rds_PostgreSQL_OwnerConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_OwnerConnectionString}
         Implem.Pleasanter_Rds_PostgreSQL_UserConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_UserConnectionString}

     codedefiner:
       container_name: codedefiner
       image: implem/pleasanter:codedefiner
       depends_on:
         - db
       environment:
         Implem.Pleasanter_Rds_PostgreSQL_SaConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_SaConnectionString}
         Implem.Pleasanter_Rds_PostgreSQL_OwnerConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_OwnerConnectionString}
         Implem.Pleasanter_Rds_PostgreSQL_UserConnectionString: ${Implem_Pleasanter_Rds_PostgreSQL_UserConnectionString}
   ```

4. ファイル配置はこうなります。

    ```text
    .
    +-- .env
    +-- docker-compose.yml
    ```

## 実行

準備が整いましたので実行していきます。

1. CodeDefinerの実行

   ```shell
   docker compose run codedefiner _rds 
   ```

1. Peasanter起動

   ```shell
   docker compose run -p 50001:80 pleasanter
   ```

## アクセスする

Pleasanterの起動時に`-p`で指定している`50001`がアクセス先のポート番号です。お使いの環境に合わせて変更してください。  
ではアクセスします  
 <http://localhost:50001/>

いかがですか？ いつものログイン画面が表示されましたでしょうか。  
初期ユーザ、初期パスワードを入力します。

- ユーザ: `Administrator`
- パスワード: `pleasanter`

ログインしますとパスワード変更を求められますので入力してください。

## 終了する

Pleasanterを起動した画面で`Ctrl-C`とするとコンテナを終了できます。  
作成したリソースを削除して終了します。

```shell
docker compose down -v --remove-orphans
```

`docker ps`や`docker volume ls`で確認すると綺麗に消えているのがわかります。

## 解説

前回のエントリで実行手順はこうでした。

1. Dockerネットワークを作成
2. PostgreSQL起動
3. CodeDefiner実行
4. Pleasanter起動

Docker Composeでも内部的に実行されていることは前回と同じになります。  
CodeDefinerを実行すると、1, 2, 3 と順番に実行されます。

またコマンドラインのパラメータの数が圧倒的に少なく、docker-compose.ymlに記述されていますので打ち間違いの心配もぐっと減ります。

## あとがき

ますますプリザンターを手軽に試せるようになったのでどんどん試してみてください。

## 参考エントリ

- [プリザンターを公式Dockerイメージで動かす \- Qiita](https://qiita.com/imp-kawano/items/b5d7d933e36ce1ce15ad)
- [PleasanterをDockerで動かす \- Qiita](https://qiita.com/imp-kawano/items/3bd23f0139a53957134b)