pleasanter+PostgreSQL+SSL+docker な構成を作ってみた(2022)

# 概要


- pleasanterも1.2系統になったのでdocker 環境定義を最新に更新しました。
- [pleasanter+PostgreSQL+SSL+docker な構成を作ってみた](https://qiita.com/yamada28go/items/3ebd4ed43e97cf3ca0e5)　の2022年度版です
- 昨今の状況を考慮してawsのarm系のインスタンスタイプでも動かせるように調整しています。(m1 macでも動くョ!)

## コンテナ構成

作成したコンテナ構成は以下となります。

![スクリーンショット 2022-01-02 14.21.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63200/bb2c37aa-4001-cf80-f019-2b81c50daadf.png)


| No | コンテナ名 | 概要 |定義ファイル|
|:-----------|:-----------|:------------|:------------|
|1| https-portal     | HTTPS通信用。Let's Encryptを用いた証明書取得の自動化      | docker-compose.https-portal.yml|
|2| pleasanter-web| PleasanterのWebシステム        | docker-compose.yml|
|3| postgres-db       | PostgreSQL DB(Pleasanterで使用されるDB)        |docker-compose.yml| 
|4| cron-backup     | バックアップ用のクローンプログラムを格納      | docker-compose.yml|

#　EC2環境構築準備

環境としてamazon linuxを想定します。
今回は時代の流行りに乗ってarm系のインスタンスを使用することとします。
基本的にはdockerが動作すれば問題なく動作するため、一般的なVPSでも稼働させる事はできると思います。

## swap追加

節約でnano系のインスタンスを使おうと思った場合、disk領域を拡張してswapを追加しておくべきです。
(対策をせずに動かすとメモリ不足となる可能性が高いため。)
追加に関してはは以下、gitsを参考にしてください。

[・disk領域を追加](https://gist.github.com/yamada28go/b9f476ef5c5df304ff5f423303162a82)
[・swap領域を追加](https://gist.github.com/yamada28go/eb6d5abadf32301ac34a7a705bf56f2f)

## amazon linuxにdockerを入れる

手始めに素のamazon linuxにdockerを入れます。
以下コマンドはdocker実行のために、グループを追加しているので、設定を反映させるためには**追加が完了したら一度ログアウト**する必要があります。

```bash
sudo yum update -y &&
sudo yum install -y docker &&
sudo yum install -y wget git &&
sudo service docker start &&
sudo systemctl enable docker.service &&
sudo usermod -a -G docker ec2-user &&
hash -r
```

## docker composeを入れる

### intel系の環境の場合
intel系のlinuxの場合は以下コマンドでcomposeを入れることができます。
(バージョンがちよっと古いかな...。)

```bash
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose &&
sudo chmod +x /usr/local/bin/docker-compose &&
docker-compose --version
```

### arm系の環境の場合

arm系の場合、公式のzipとして対象のバイナリがリリースされていないので、
以下サイトを参考にさせて頂きました。
[Amazon EC2 （Arm版）でdocker-composeを動作検証](https://qiita.com/ota-yuki/items/8ab8524a7defcb33f415)

```bash
sudo yum install -y python37 python3-devel.$(uname -m) libpython3.7-dev libffi-devel openssl-devel &&
sudo yum groupinstall -y "Development Tools"  &&
sudo python3 -m pip install -U pip  &&
python3 -m pip install docker-compose &&
docker-compose --version
```

docker-composeのバージョンが確認できれば一段落です。

## dockerのデータ置き場を変更する

デフォルト状態では、dockerのイメージ、データの置き場きec2の本体領域になってしまいす。
初期構成のままですとこの状態では、すぐにdisk fullになってしまうため以下gitsで拡張領域に移動します。

[dockerのデータ置き場を移動](https://gist.github.com/yamada28go/314cab29ea060e9170b5035347a6de37)

# pleasanterの動作準備
## pleasanterイメージの構築

linuxにログインして以下コマンドを起動します。
これにより、対象となるイメージのビルドが行われてpleasanterの実行準備が整います。

``` bash
mkdir git &&
sudo yum -y install git &&
cd git &&
git clone https://github.com/yamada28go/pleasanter-docker-PostgreSQL.git &&
cd pleasanter-docker-PostgreSQL &&
git checkout origin/master_1.2 &&
docker-compose build --no-cache &&
docker-compose up -d pleasanter-web postgres-db &&
sleep 30 &&
docker ps | grep pleasanter-web | cut -d' ' -f 1  | xargs -I {} docker exec {} cmdnetcore/codedefiner.sh &&
docker-compose stop
```

### pleasanterのバージョンを変更する場合

pleasanterのバージョンは環境変数にGitのハッシュ値を指定する事で設定できるように設定されています。
動作させたいpleasanterバージョンに指定がある場合、docker-compose.ymlにおいて以下の環境変数設定を切り替えてください。

```yaml
  pleasanter-web:
    build:
      context: pleasanter/.
      args:
        # バージョンを指定
        # 1.2.22.1 : c5a2153216da40bb609d755e85a05fa455d2f4d4
        - GIT_HASH=c5a2153216da40bb609d755e85a05fa455d2f4d4 # ←　★　Git Has設定

```

## 起動確認

まずは、イメージがきちんと動作する状態か確認しましょう。
この状態で起動すると、sslがない状態で8001番ポートでpleasanterが待機します。

```
docker-compose up
```

ec2のセキュリティグループの設定を変更して、8001番ポートにアクセスできるようにして、
ブラウザでアクセスしてみましょう。
必要なアカウント情報は以下となります。
正しくログインができれば、コンテナの準備は成功したこととなります。

```
user: Administrator
pass: pleasanter
```

## SSL起動設定

イメージが正しく動作することを確認したら、
SSLで通信ができるように設定を切り替えましょう。
awsのセキュリティグループの設定を切り替えてhttp(80)、https(443)が通るようにしましょう。
(Let's Encryptのドメイン認証の関係で80ポートが必要となります。)
httpsの通信は[HTTPS-PORTAL](https://github.com/SteveLTN/https-portal)のイメージを使います。
このイメージの設定は「docker-compose.https-portal.yml」に書かれています。

ファイルの★の部分を変更します。

```docker-compose.https-portal.yml
~　抜粋 ~
  # 通信を暗号化
  https-portal:
    image: steveltn/https-portal:1
    ports:
      - '80:80'
      - '443:443'
    links:
      - pleasanter-web
    restart: always
    environment:
      DOMAINS: 'wordpress.example.com -> http://pleasanter-web' ←　★1
      # 本番モードへ切り替え
      # STAGE: 'production' ←　★2
      # 証明書を強制的に再取得する
      # FORCE_RENEW: 'true'
~　抜粋 ~
```

| ★    |       意味 |    
|:-----------------|:------------------|
| ★1             |              wordpress.example.comをご自分のドメイン名に置き換えてください。 |   
| ★2          |            コメントを外すとLet's Encrypt から発行された証明書を使います。コメント付きだとオレオレ証明書で動きます。 |      

設定が完了したらデーモンを起動します。
コマンドに「-d」をつけると

```bash
docker-compose  -f docker-compose.yml -f docker-compose.https-portal.yml up
```

ご自分のドメインにアクセスできれば設定完了です。

## pleasanterの設定ファイル変更

pleasanter側の[パラメータ設定](https://pleasanter.org/manual?category=0110)を切り替えたい場合、以下パスにコンテナ起動時のパラメータ設定がコピーされてきます。

```
{gitでチェックアウトしたルートディレクトリ}/pleasanter/parameters/raw
```

設定が必要な項目を変更して以下パスに展開しておくと、pleasanterの起動時に対象ファイルがコピーされて対象の設定が適応されるようになります。

```
{gitでチェックアウトしたルートディレクトリ}/pleasanter/parameters/customize
```

## バックアップ設定

本格的に使用するためにはバックアップの設定は必須となります。
長くなりましたので、バックアップの設定に関しては[次の記事](https://qiita.com/yamada28go/items/fe8f85305d388ad30a60)に移動します。