OSSのローコード・ノーコードツール「プリザンター(Pleasanter)」をAWSのEC上でDockerを利用してセットアップする手順を説明します。公式のマニュアルはわかりづらい部分を補完してみました。利用するOS、ソフトウェアは以下の通りです。
OS | Red Hat Enterprise Linux 10 |
.NET | 8.0.410 |
DB | PostgreSQL17 |
Webサーバー | nginx 1.25.1 |
Pleasanter | プリザンター 1.4.0.0以降(最新版を利用) |
TLSの導入方法は以下の記事を参考にしてください。
本記事ではプリザンター、Postgres, nginxのDockerイメージをそのまま利用します。Dockerfileを利用したカスタムイメージを使って構築する場合は追加の手順が必要です。その場合は以下の公式手順を参照してください。(カスタムイメージを使わなくてもnginxの設定変更などは可能です)
事前準備
OSのロケール設定
デフォルトのロケールは英語なので日本語に変更します。まずは日本語ロケールをインストールします。
sudo yum install glibc-langpack-ja
ロケールを日本語に設定します。
sudo localectl set-locale LANG=ja_JP.utf8
タイムゾーンをJST(アジア/東京)へ変更します。
sudo timedatectl set-timezone Asia/Tokyo
日本語のキーマップをリストします。
localectl list-keymaps | grep jp
jp
jp-OADG109A
jp-dvorak
jp-kana86
jp106
リストアップされたものから日本語のキーマップを設定します。ここでは「jp106」を指定します。
sudo localectl set-keymap jp106
ロケールの設定を確認します。
localectl
System Locale: LANG=ja_JP.utf-8
VC Keymap: jp106
X11 Layout: jp
X11 Model: jp106
X11 Options: terminate:ctrl_alt_bksp
タイムゾーンがJSTに変更されていることを確認します。
date
Fri May 30 12:21:07 AM JST 2025
インストールに必要なツールのインストール
環境構築中に利用するコマンド・ツールをインストールしておきます。
sudo yum install wget
sudo dnf install unzip
sudo dnf install -y python3-pip
sudo pip3 install podman-compose
sudo dnf install -y podman
firewalldサービスをインストールし、有効化します。
sudo dnf install firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
以下のコマンドで起動状態を確認します。running
と表示されれば、firewalldは正常に動作しています。
sudo firewall-cmd --state
ファイアウォールでHTTPを許可します。
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
許可されているサービスをリストし、httpが追加されたことを確認します。
sudo firewall-cmd --list-services
EC2のセキュリティグループでもHTTP(80)ポートのインバウンドを許可しておきます。
プリザンター用ユーザー追加
プリザンターのサービス起動用ユーザーを作成します。ユーザー名は任意でOKです。ここでは「pleasanter」という名前で作成します。サービス起動に利用するユーザーであるため以下のオプションを付与しています。-r
: システムユーザーとして作成(ログイン不要)-s /bin/false
: シェルを無効化(ログイン不可
sudo useradd -r -s /bin/false pleasanter
プロジェクトルートフォルダの作成
プリザンターをインストールするためのプロジェクトルートフォルダを作成します。任意の場所で問題ありませんが、ここでは「/opt/pleasanter」をプロジェクトルートにし、所有者を作成したプリザンター用ユーザーに変更します。
sudo mkdir -p /opt/pleasanter
sudo chown pleasanter:pleasanter /opt/pleasanter
プリザンターのインストール準備(各サービスの設定ファイル作成)
環境変数ファイルの作成
以下の内容を /opt/pleasanter/.env に保存します。POSTGRES ではじまる環境変数はPostgreSQLのDocker公式イメージから参照され、コンテナの初期化時に実行される initdb で環境変数の値を使いPostgreSQLの初期設定が行われます。ユーザー名やパスワードは任意の内容に変更してください。
postgres – Official Image | Docker Hub
docker-library/postgres: Docker Official Image packaging for Postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=yourpassword
POSTGRES_DB=pleasanter
POSTGRES_HOST_AUTH_METHOD=scram-sha-256
POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256 --encoding=UTF-8"
# SA(スーパーユーザー)接続
Implem_Pleasanter_Rds_PostgreSQL_SaConnectionString='Server=db;Database=pleasanter;UID=postgres;PWD=yourpassword'
# 追加ユーザー(後ほど自作成する) 用の接続情報
Implem_Pleasanter_Rds_PostgreSQL_OwnerConnectionString='Server=db;Database=pleasanter;UID=pleasanter_owner;PWD=ownerpassword'
Implem_Pleasanter_Rds_PostgreSQL_UserConnectionString='Server=db;Database=pleasanter;UID=pleasanter_user;PWD=userpassword'
SaConnectionString、OwnerConnectionString、UserConnectionStringに指定している「Server=db;」の”db”はこのあとに作成するDocker Compose ファイル(compose.yaml)で指定するDBのサービス名と合わせておく必要があります。
コンテナ構成ファイル作成(docker-compose.yaml)
「/opt/pleasanter/docker-compose.yml」を以下の内容で作成します。「image:」でDockerから取得するイメージのバージョンを指定しています。必要に応じて任意の値に変更してください。
version: '3'
services:
db:
container_name: postgres
image: docker.io/postgres:17 #完全修飾イメージ名で指定
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_HOST_AUTH_METHOD=${POSTGRES_HOST_AUTH_METHOD}
- POSTGRES_INITDB_ARGS=${POSTGRES_INITDB_ARGS}
volumes:
- pg_data:/var/lib/postgresql/data
pleasanter:
container_name: pleasanter
image: docker.io/implem/pleasanter:latest #完全修飾イメージ名で指定
depends_on:
- db
ports:
- "8080:8080"
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: docker.io/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}
nginx:
container_name: nginx
image: docker.io/library/nginx:1.25.1-alpin
depends_on:
- pleasanter
# ホストネットワークで起動することで、nginx の内部の "localhost:8080" が
# ホストの8080番に向かうようにします。
network_mode: "host"
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
volumes:
pg_data:
nginx設定ファイルの作成 (nginx.conf)
nginxをリバースプロキシとして動作させるための設定を記載します。ここではHTTP(80)ポートで受けつけた通信を内部のプリザンターサービスのポート(8080)へ転送しています。
server {
listen 80;
server_name <IPアドレス or ホスト名>;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ここまでに作成したファイルの所有者も変更しておきます。
sudo chown pleasanter:pleasanter /opt/pleasanter/*
プリザンターのインストール
Dockerイメージの取得
プロジェクトルートに移動し、podman-composeで必要なDockerイメージを一括取得します。「docker-compose.yml」で指定したDockerイメージが取得されます。
cd /opt/pleasanter/
podman-compose pull
80ポートをrootlessで利用できるようにカーネル設定を変更
root以外でpodman を 利用する場合、デフォルトで1024 未満のポートはバインド不可なのでバインド可能なように設定します。
「sudo podman-compose up -d」のようにすることで回避も可能ですが、参考として手順を記載しておきます。
# 即時設定
sudo sysctl net.ipv4.ip_unprivileged_port_start=80
# 永続化
echo "net.ipv4.ip_unprivileged_port_start=80" | sudo tee -a /etc/sysctl.conf
Postgresユーザーの作成
Postgres用ユーザーを作成するためにDBサービスのみ立ち上げ、コンテナに接続します。
podman-compose up -d db
podman exec -it postgres psql -U postgres -d pleasanter
このあとの手順でCodeDefiner コンテナを実行し、Postgresの初期化を行いますが、その前にPostgreSQLに接続用のユーザーを手動で作成します。作成するのは「/opt/pleasanter/.env」のDB接続文字列のUIDで指定しているユーザーです。
CREATE ROLE pleasanter_owner WITH LOGIN PASSWORD 'ownerpassword';
CREATE ROLE pleasanter_user WITH LOGIN PASSWORD 'userpassword';
-- 必要に応じて、pleasanter_owner をデータベースの所有者にするか、すべての権限を付与します。
GRANT ALL PRIVILEGES ON DATABASE pleasanter TO pleasanter_owner;
-- アプリケーションでの利用に応じた権限設定を行う
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO pleasanter_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO pleasanter_user;
DBユーザーが作成されたことを確認します。
\du
「\q」を入力し、psqlを終了します。
CodeDefiner コンテナの実行
CodeDefiner コンテナは、プリザンターの初期セットアップおよび構成を行うためのユーティリティコンテナです。このコンテナを利用し、データベースに対して必要なスキーマの作成、初期データの投入、アプリケーションパラメータ設定など、運用開始前の準備作業(初期構成)を自動で実施します。
podman-compose run --rm codedefiner _rds /l "ja" /z "Asia/Tokyo"
全サービスの起動
これでセットアップは完了です!一旦コンテナを終了し、全コンテナを起動します。
podman-compose down
podman-compose up -d
プリザンター接続確認
「http://<IPアドレス or ホスト名>」にアクセスし、プリザンターのログイン画面が表示されることを確認します。
ユーザー名は「Administrator」、パスワードは「pleasanter」です。
うまく動作しない場合は
curl -v http://<IPアドレス>
などでアクセスして、HTTPレスポンスを確認したり、
podman logs nginx
などでログを確認してみましょう。
podman, podman-composeコマンドの使い方
# 停止
podman-compose stop
# 再起動
podman-compose start
# 全コンテナの停止・削除
podman-compose down
# 永続データも含めて削除
podman-compose down -v
# 実行中コンテナを表示
podman ps -a
# コンテナを個別に停止
podman stop <コンテナ名>
# ログ確認
podman logs <コンテナ名>
以上