LoginSignup
3
2

DockerでPleasanterの環境を構築したメモ

Last updated at Posted at 2024-05-13

動機

ローコード開発プラットフォームを色々と触ってみる中で、Pleasanterも試してみました。その際いくつか詰まったところがあったので、その記録として。

環境

  • WSL2 Ubuntu24.04 LTS
  • Docker 及び Docker compose plugin

本題

基本的な内容は開発元の方による以下の記事に沿っています。

変更点

  • DBデータ永続化方法の変更

VolumesからBindマウントへ、これによってホストから直接コンテナが利用するディレクトリに触れるようになる

  • 割り当てポートの変更

当環境では8080番ポートへつなぐ必要があったので、割り当ての変更

  • /app/App_Data以下の取り扱いの変更

拡張SQL等の利用にはコンテナ内の/app/App_Data以下へ設定ファイルを配置する必要があるようで、上記導入記事ではそれをDockerイメージのビルドの際に行っていますが、都度ビルドするのはめんどくさそうなので
ただしこちらについては導入以降の動作確認を行っていません

.envファイル

Implem_Pleasanter_Rds_PostgreSQL_SaConnectionString='Server=pleasanter_db;Database=pleasanter_db;UID=postgres;PWD=password'
Implem_Pleasanter_Rds_PostgreSQL_OwnerConnectionString='Server=pleasanter_db;Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=password'
Implem_Pleasanter_Rds_PostgreSQL_UserConnectionString='Server=pleasanter_db;Database=#ServiceName#;UID=#ServiceName#_User;PWD=password'

docker-compose.yml

services:

  pleasanter:
    container_name: pleasanter
    image: implem/pleasanter:1.4.5.0
    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}
    depends_on:
      pleasanter_db:
        condition: service_healthy
    restart: no
#    volumes:
#      - "./pleasanter:/app/appdata"
#    volumes:
#      - "./pleasanter/App_Data:/app/App_Data"
    ports:
      - '127.0.0.1:8880:80'
      - '127.0.0.1:8881:8080'
    networks:
      - pleasanter_network

  codedefiner:
    container_name: codedefiner
    image: implem/pleasanter:codedefiner
    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}
    depends_on:
      pleasanter_db:
        condition: service_healthy
    restart: no
    networks:
      - pleasanter_network

  pleasanter_db:
    container_name: pleasanter_db
    image: postgres:16.2
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=pleasanter_db
      - POSTGRES_HOST_AUTH_METHOD=scram-sha-256
      - POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256"
    healthcheck:
      interval: 10s
      retries: 10
      test: 'pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB"'
      timeout: 2s
    restart: no
    volumes:
      - "./postgres:/var/lib/postgresql/data"
    networks:
      - pleasanter_network

networks:
  pleasanter_network: 
    external: true

手順

  • 事前準備

  1. 今回の導入例では、Bindによるコンテナ内部データの永続化を行います。そのため、DBデータ等の保存先として適切なディレクトリを用意しておいてください。作業時にはそのディレクトリを使用します

        volumes:
          - "./postgres:/var/lib/postgresql/data"
    

    この記述がBindによるマウントを表すものでホストの./postgresをコンテナ内の/var/lib/postgresql/dataと紐づけるものとなります

  2. 事前にネットワークを作成します。以下のコマンドを実行してください。
    docker network create pleasanter_network
    なお、ネットワーク名は任意のものに変更しても問題ありませんが、docker-compose.ymlの記述と一致させるようにしてください

  3. .envファイルおよびdocker-compose.ymlに記述されたpasswordを任意のものに変更してください。また、使用するコンテナのバージョン等も適宜指定してください
    本記事ではそれぞれ以下の通りとしています

        image: implem/pleasanter:1.4.5.0
        image: postgres:16.2
    

  4. docker-compose.ymlにて、以下の通りにコメントアウトを解除してください

        volumes:
          - "./pleasanter:/app/appdata"
    #    volumes:
    #      - "./pleasanter/App_Data:/app/App_Data"
    

  5. 古いcodedefinerのイメージがある場合docker image rm implem/pleasanter:codedefinerで削除してください

  • 導入

  1. 作業ディレクトリでdocker compose run --rm codedefiner _rdsを実行します。すると、設定された依存関係に従ってpleasanter_dbが立ち上がり、次いでcodedefinerが起動します

  2. codedefinerが正常に終了したら、次にdocker compose up -d pleasanterを実行します。しばらく待つとPleasanterが立ち上がるはずなので、ブラウザでlocalhost:8881へ接続すると、ログイン画面が表示されると思います

  3. 再びターミナルへ戻りdocker exec -it pleasanter /bin/bashを実行します。この操作により、コンテナの中へと入ることができます

  4. コンテナ内で次のコマンドを実行します。cp -r App_Data appdataコピーが完了したらexitでコンテナから抜けます

  5. docker compose downで一旦コンテナを削除します

  6. docker-compose.ymlを編集して次の通りコメントアウトを設定してください
    #    volumes:
    #      - "./pleasanter:/app/appdata"
        volumes:
          - "./pleasanter/App_Data:/app/App_Data"
    

  7. docker compose up -d pleasanterでPleasanterを起動します。以降の停止・始動はdocker compose stopdocker compose start pleasanterでいいんじゃないでしょうか

付記

DockerのBindマウントはコンテナ内のディレクトリを上書きするそうなので、妙な手順を踏んでいます。Dockerの運用としても良い方策とは思えないので、あんまり推奨はいたしません。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2