Pleasanter を QNAP の ContainerStation にセットアップする方法
概要
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