🐈

Pleasanter を QNAP の ContainerStation にセットアップする方法

2024/10/11に公開

概要

QNAP の ContainerStation で Pleasanter を運用するための、私的構築手順を記します。

セットアップ方法は、Pleasanter Docker 公式の方法を踏襲します。
したがって、QNAP に対して SSH で接続する必要があります。

注意点

WEB インターフェイスで起動しないため、QNAP を再起動するなどした場合、コンテナが立ち上がってこないことがあります。

.env

公式の説明にある様に、.env ファイルを用意します。
公式の内容に追加して、日本環境の設定を追加します。

LANG=ja_JP.UTF-8
LANGUAGE=ja_JP:ja
TZ=Asia/Tokyo
LC_CTYPE=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8

日本環境の設定は無くても動作しますが、サーバスクリプトでタイムゾーンが違ってくることがあります。

docker-compose.yml

公式の内容に対して、日本環境の環境変数を 3 つのサービスそれぞれに反映させます。

PostgreSQL の永続化のために Volume を設定しています。

再起動ポリシーを PostgreSQL には追加してありますが、Pleasanter には追加していません。これは、Pleasanter のコンテナには再起動ポリシーが反映されないからです。

Pleasanter で ActiveDirectory アカウントを試用したいので、docker-compose.yml と同じディレクトリに、Authentication.json、BackgroundService.json を用意して、Bind しています。

version: "3"

services:
  db:
    container_name: postgres
    image: postgres:16
    restart: unless-stopped
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER
      - POSTGRES_PASSWORD
      - POSTGRES_DB
      - POSTGRES_HOST_AUTH_METHOD
      - POSTGRES_INITDB_ARGS
      - LANG
      - LANGUAGE
      - TZ
      - LC_CTYPE
      - LC_ALL
    volumes:
      - type: volume
        source: pleasanter_db_data
        target: /var/lib/postgresql/data

  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}
      LANG: ${LANG}
      LANGUAGE: ${LANGUAGE}
      TZ: ${TZ}
      LC_CTYPE: ${LC_CTYPE}
      LC_ALL: ${LC_ALL}
    volumes:
      - type: bind
        source: ./Authentication.json
        target: /app/App_Data/Parameters/Authentication.json
      - type: bind
        source: ./BackgroundService.json
        target: /app/App_Data/Parameters/BackgroundService.json

  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}
      LANG: ${LANG}
      LANGUAGE: ${LANGUAGE}
      TZ: ${TZ}
      LC_CTYPE: ${LC_CTYPE}
      LC_ALL: ${LC_ALL}
volumes:
  pleasanter_db_data:

Start Pleasanter

codedefiner を実行する

公式では、日本環境の引数はないが、今回は環境変数も付与しているので、こちらにも付けます。

docker compose run codedefiner _rds /l "ja" /z "Asia/Tokyo"

Pleasanter を実行する

公式と同じですが、detach オプションを付けたり、サーバスクリプトでデバッグをするためのポートを解放したりしています。

docker compose run -d -p 50001:8080 -p 9222:9222 pleasanter

さいごに

前にも書きましたが、コンソールで作成すると、QNAP の再起動時にコンテナは自動で起動しません。
WEB インターフェイスの yml を使用すれば、この問題も解決できるのではと試しましたが、上手く作成できませんでした。
WEB インターフェイスの docker-compose がどのディレクトリで実行しているのか分からないし、env ファイルをフルパスで指定してみたのですが、上手くいきませんでした。

ならばと、単体のコンテナをそれぞれ作ろうかと思ったのですが、ネットワークの設定が QNAP 独自の区分で分かりずらかったので断念しました。

それで、今の形に落ち着きました。
再起動に関しては、WEB インターフェイスからコンテナを手動で起動できますので、おおむね問題なく運用できています。

Discussion