はじめに
待望のPleasanter PostgreSQL対応版がリリースされました!
Linux上に展開する場合、.NetCore版は以前から公開されていましたがSQL Serverを使うのは遠慮したい、私もそのように思っていた一人でした。
DBにPostgreSQLを利用することによって、いろんな制限またはコストを取っ払うことができますね。
ここではひと手間加えて、PleasanterをDockerコンテナ環境で稼働させたいと思います。
docker インストール
割愛します。他サイト等を参照してインストールしてください。
PostgreSQLコンテナ
- 以下内容でDockerfileを作成します。
FROM postgres:12.2
RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.utf8`
- ビルドします。
$ docker build -t mypostgres:12.2 .
PostgreSQLのdockerイメージが作成されたことを確認できます。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mypostgres 12.2 1fe9d8a7f265 17 seconds ago 318MB
- ネットワークを作成します。
$ docker network create -d bridge mynetwork
ネットワークが作成されました。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
ab78a3703a75 bridge bridge local
54459fa57282 host host local
e975faae9194 mynetwork bridge local
cda8e2c61db1 none null local
- PostgreSQLコンテナを起動します。
$ docker run -d --name mypostgres12 -e POSTGRES_PASSWORD=password --net="mynetwork" mypostgres:12.2
PostgresSQLコンテナが起動したことを確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ebba7a31bed mypostgres:12.2 "docker-entrypoint.s…" 17 seconds ago Up 15 seconds 5432/tcp mypostgres12
- PostgreSQLコンテナにアタッチします。
$ docker exec -it mypostgres12 bash
- データベースを作成します。
# su - postgres
$ psql
postgres=# create database "Implem.Pleasanter";
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-------------------+----------+----------+------------+------------+-----------------------
Implem.Pleasanter | postgres | UTF8 | ja_JP.utf8 | ja_JP.utf8 |
以上でDBコンテナ(PostgreSQL)の準備は完了です。
Pleasanterコンテナ
- まずはsystemdが有効なcentos7のイメージを準備します。
イメージ作成手順は割愛します。docker hubを参照してください。
- 作成したイメージをもとにコンテナを起動します。
$ docker run --privileged -d --name pleasanter --net="mynetwork" -p 8080:80 pleasanter-centos7 /sbin/init
コンテナが起動したことを確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f272229599c pleasanter-centos7 "/sbin/init" 10 seconds ago Up 9 seconds 0.0.0.0:8080->80/tcp pleasanter
- コンテナにアタッチします。
$ docker exec -it pleasanter bash
- Git client、.NetCore 3.1、GDI+ をインストールします。
# yum -y install git
# rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
# yum -y update
# yum -y install dotnet-sdk-3.1
# yum -y install epel-release
# yum -y install libgdiplus
- PleasanterアプリケーションをDLし展開します。
公式DLサイトからzipをDLし適当なディレクトリに展開します。
当サイトの例では「/web」ディレクトリ以下に「pleasanter」ディレクトリを配置しています。
/web/pleasanter/
- ファイルを編集しDB構成を設定します。
{
"Dbms": "PostgreSQL",
"Provider": "Local",
"TimeZoneInfo": "Asia/Tokyo",
"SaConnectionString": "Server=mypostgres12;Database=postgres;UID=postgres;PWD=password",
"OwnerConnectionString": "Server=mypostgres12;Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=SetAdminsPWD",
"UserConnectionString": "Server=mypostgres12;Database=#ServiceName#;UID=#ServiceName#_User;PWD=SetUsersPWD",
"SqlCommandTimeOut": 600,
"MinimumTime": 3,
"DeadlockRetryCount": 4,
"DeadlockRetryInterval": 1000
}
- CodeDefinerを実行します。
# cd /web/pleasanter/Implem.CodeDefiner
# dotnet Implem.CodeDefiner.NetCore.dll _rds
- サービス用スクリプトを作成します。
[Unit]
Description = Pleasanter
Documentation =
Wants=network.target
After=network.target
[Service]
ExecStart = /usr/bin/dotnet Implem.Pleasanter.NetCore.dll
WorkingDirectory = /web/pleasanter/Implem.Pleasanter
Restart = always
RestartSec = 10
KillSignal=SIGINT
SyslogIdentifier=dotnet-pleasanter
User = root
Group = root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy = multi-user.target
- サービスの登録および起動します。
# systemctl daemon-reload
# systemctl enable pleasanter
# systemctl start pleasanter
- NginXのリポジトリを登録します。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
- NginXをインストールします。
# yum -y install nginx
- NginXサービスを登録します。
# systemctl enable nginx
- NginXでリバースプロキシを設定します。
server {
listen 80;
server_name 192.168.0.200;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
※server_name 行には実際アクセスする際のIPアドレスまたはホスト名を記載してください。
- NginXを再起動します。
# systemctl restart nginx
利用開始
Webブラウザからアクセス(192.168.0.200:8080/users/login)するとログイン画面が表示されます。
ID:Administrator
PW:pleasanter
※初回ログイン時にPW変更を求められますので、任意のPWを設定してください。
おわりに
今回は公式サイトの手順に準じたうえで、Pleasanterをdockerコンテナにデプロイ、その際アプリケーションとDBをそれぞれ別のコンテナとしました。
上記例では実施していませんが、実際に利用する場合にはDBやアプリケーションデータの永続化なども検討要ですね。