LoginSignup
7
13

More than 3 years have passed since last update.

Pleasanter PostgreSQL対応版をDockerコンテナで稼働させる

Last updated at Posted at 2020-05-12

はじめに

待望のPleasanter PostgreSQL対応版がリリースされました!
Linux上に展開する場合、.NetCore版は以前から公開されていましたがSQL Serverを使うのは遠慮したい、私もそのように思っていた一人でした。
DBにPostgreSQLを利用することによって、いろんな制限またはコストを取っ払うことができますね。

ここではひと手間加えて、PleasanterをDockerコンテナ環境で稼働させたいと思います。

docker インストール

割愛します。他サイト等を参照してインストールしてください。

PostgreSQLコンテナ

  • 以下内容でDockerfileを作成します。
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構成を設定します。
/web/pleasanter/Implem.Pleasanter/App_Data/Parameters/Rds.json
{
    "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
  • サービス用スクリプトを作成します。
/etc/systemd/system/pleasanter.service
[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のリポジトリを登録します。
/etc/yum.repos.d/nginx.repo
[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でリバースプロキシを設定します。
/etc/nginx/conf.d/pleasanter.conf
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)するとログイン画面が表示されます。
image.png
ID:Administrator
PW:pleasanter
※初回ログイン時にPW変更を求められますので、任意のPWを設定してください。

おわりに

今回は公式サイトの手順に準じたうえで、Pleasanterをdockerコンテナにデプロイ、その際アプリケーションとDBをそれぞれ別のコンテナとしました。
上記例では実施していませんが、実際に利用する場合にはDBやアプリケーションデータの永続化なども検討要ですね。

7
13
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
7
13