macOS Sierra の docker で TestLink をインストールと設定する

##What’s New
最新版はこちら[【2019年版】macOS 10.14 Mojaveの docker で TestLink をインストールと設定する
](https://qiita.com/shimizumasaru/items/a1de689866c3ee2a4de5)

##Preconditions
- OS: macOS 10.14.6 Mojave
- VM: docker desktop Community Version: 2.1.0.4(39773) Channel: stable

##TL;DR

適当なディレクトリに docker-compose.yml をダウンロードして、カスタマイズしてから docker-comse up で起動。
公式ドキュメント：https://hub.docker.com/r/bitnami/testlink/
一つずつていねいな設定作業がオススメ（各種設定をミスると Apache が起動しないこと多し）。


##1. TestLink をインストールする

インストール

```bash:
$ mkdir $HOME/testlink
$ cd $HOME/testlink
$ curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-testlink/master/docker-compose.yml > docker-compose.yml
```

docker-compose.yml を編集する

```bash:
$ vim $HOME/testlink/docker-compose.yml
```

編集内容は、
- http port を 80 -> 8080 へ変更する
- TestLink admin email を設定する 
- smtp(gmail)を設定する
- 言語を日本語に設定する

```bash:docker-compose.yml
version: '2'

services:
  mariadb:
    image: 'bitnami/mariadb:latest'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    volumes:
      - 'mariadb_data:/bitnami/mariadb'
  testlink:
    image: 'bitnami/testlink:latest'
    labels:
      kompose.service.type: nodeport
    ports:
      - '8080:80'
      - '443:443'
    environment:
    - TESTLINK_EMAIL=mymailaddress@gmail.com
    - TESTLINK_LANGUAGE=ja_JP
    - SMTP_ENABLE=true
    - SMTP_HOST=smtp.gmail.com
    - SMTP_PORT=587
    - SMTP_USER=mymailaddress@gmail.com
    - SMTP_PASSWORD=password
    - SMTP_CONNECTION_MODE=tls
    volumes:
      - 'apache_data:/bitnami/apache'
      - 'testlink_data:/bitnami/testlink'
    depends_on:
      - mariadb

volumes:
  mariadb_data:
    driver: local
  apache_data:
    driver: local
  testlink_data:
    driver: local
```

TestLink コンテナの起動

```bash:
$ cd $HOME/testlink
$ docker-compose up -d
```

TeskLink のフロントエンド
http://localhost:8080/login.php

>######TestLink の admin アカウント初期設定値は、
アカウント：user
パスワード：bitnami


TestLink コンテナの終了

```bash:
$ cd $HOME/testlink
$ docker-compose stop
```
## 2. docker のコンテナやイメージの削除
[dockerのコンテナ・イメージを謎のコマンド群で消すのもいいけどdocker-cleanコマンドもいいよ](http://qiita.com/Jey/items/8714c47fd839597a40a3)

### 以上
## 参考資料
### 1. TestLink のコンテナにログインする
docker ps で TestLink のコンテナIDを探す

 ```bash:
 $ docker ps
 ```

TestLink のコンテナにログインする

 ```bash:
 $ docker exec -it コンテナID /bin/bash
 ```
> ######注： docker exec だと、/bin/bash プロセスを起動させて標準入出力を行う。仮にログインしたコンテナを exit しても、起動させた /bin/bash プロセスだけが終了して、コンテナは停止しない。類似コマンドの、docker attach は、ログインしたコンテナで exit するとコンテナが終了する
参考： [Docker・コンテナの確認と接続(ps, attach, execコマンド)](http://www.ajisaba.net/develop/docker/docker_attach.html)
参考： [Dockerコンテナ内で操作 attachとexecの違い](http://qiita.com/RyoMa_0923/items/9b5d2c4a97205692a560)

ログインしたコンテナからログアウト（終了）する

```bash:
$ exit
```




### 2. もしも手動で TestLink の基本設定をするならば……

TestLink のコンテナにログインする

 ```bash:
 $ docker exec -it コンテナID /bin/bash
 ```


このコンテナに Vim をインストールする

```bash:
$ apt-get update
$ apt-get install vim
```

custom_config.inc.php を Vim で開く

```bash:
$ vim /bitnami/testlink/custom_config.inc.php
```
custom_config.inc.php に Gmail SMTP 設定ほかを記述する 

```bash:
<?php

//path設定
$tlCfg->log_path = '/opt/bitnami/testlink/logs/';
$g_repositoryPath = '/opt/bitnami/testlink/upload_area/';

//smtp設定
$g_smtp_host = 'smtp.gmail.com';
$g_tl_admin_email = 'mymailaddress@gmail.com';
$g_from_email = 'mymailaddress@gmail.com';
$g_return_path_email = 'mymailaddress@gmail.com';
$g_smtp_username = 'mymailaddress@gmail.com';
$g_smtp_password = 'password';
$g_smtp_port = '587';
$g_smtp_connection_mode = 'tls';

//デフォルト言語を日本語にする
$tlCfg->default_language = 'ja_JP';

//TestLinkセキュリティ上の弱点が存在する場合に警告する方法は、
//  * 'SCREEN'：ログイン画面にメッセージを表示する（デフォルト）
//  * 'FILE'：警告ファイルを作成、ログイン画面にメッセージを表示する。
//  * 'SILENT'：警告ファイルを作成、ログイン画面にメッセージを表示しない。
$tlCfg->config_check_warning_mode = 'SCREEN';

//sessionInactivityTimeoutを延長する
$tlCfg->sessionInactivityTimeout = 86400;

//ユーザーによる新規アカウント登録を禁止する（管理者による新規アカウント登録に限定する）
$tlCfg->user_self_signup = FALSE;

// アップロードするファイルサイズ上限を拡大する
// ただし(多くの場合のPHPデフォルト値の)２MBを超える場合は、
// 同時に php.ini の upload_max_filesize の設定も変更する。
$tlCfg->import_max_size = '40000000'; // in bytes
$tlCfg->repository_max_filesize = 40; //MB

//レポートとメトリクスで表示される会社名を設定する
$tlCfg->document_generator->company_name = '自社名';
$tlCfg->document_generator->company_copyright = 'Copyright© ' . date('Y') . '自社名';
$tlCfg->document_generator->confidential_msg = '本資料は自社名の許可無く対外的に参照・配布しないようお願い申し上げます。';

//レポートで表示される TestLink ロゴを自社ロゴに変更する
$tlCfg->document_generator->company_logo = 'logo.png';
//ロゴマークの高さを指定する
$tlCfg->document_generator->company_logo_height = '50';

?>
```

>注１： Google アカウントのセキュリティ設定で、安全性の低いアプリへのアクセスを有効にする。有効にしないと TestLink のメール送信が失敗するので注意する
参考：[Google マイアカウント](https://myaccount.google.com/lesssecureapps)

>注2： TestLink のログイン画面トップの警告は、各種設定をすれば消せる　
参考：[TestLinkの警告にちゃんと対応する](http://symfoware.blog68.fc2.com/blog-entry-441.html)


### 3. タイムゾーンの修正をする
TeskLink は PHP のタイムゾーンを引用する仕様なので php.ini のデフォルトタイムゾーンを変更する

TestLink のコンテナにログインする

```bash:
$ docker exec -it コンテナID /bin/bash
```

php.ini を探して Vim で編集する

```bash:
$ php --ini
Configuration File (php.ini) Path: /opt/bitnami/php/lib
Loaded Configuration File:         /opt/bitnami/php/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)
$ vim /opt/bitnami/php/lib/php.ini
```

php.ini の最終行付近にある date.timezone = "Asia/Tokyo" にする

```bash:
; Local Variables:
; tab-width: 4
; End:
upload_max_filesize = 40M
post_max_size = 40M
extension_dir = /opt/bitnami/php/lib/php/extensions
;date.timezone = UTC
date.timezone = "Asia/Tokyo"
zend_extension = opcache.so
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
opcache.interned_strings_buffer = 8
opcache.fast_shutdown = 1
```

PHP のタイムゾーンが Asia/Tokyo になったことを確認する

```bash:
$ php -i | grep timezone
Default timezone => Asia/Tokyo
date.timezone => Asia/Tokyo => Asia/Tokyo
```

編集した php.ini の設定を反映するために Apache を再起動する

```bash:
$ /opt/bitnami/apache/bin/apachectl restart
```



### 4. TestLink > レポートメトリクス　のレポートに会社のロゴマークを入れる

設定方法は2種類あるのでお好きな方で……

####設定方法その１：ローカル環境から TestLink の指定ディレクトリにコピーする

```bash:
$ $HOME/logo
$ ls
logo.png
$ docker cp ./ コンテナID:/opt/bitnami/testlink/gui/themes/default/images
```

####設定方法その２：ウェブのロゴマークを TestLink の指定ディレクトリに wget する

TestLink のコンテナにログインする

 ```bash:
 $ docker exec -it コンテナID /bin/bash
 ```

wget をインストールする

```bash:
$ apt-get update
$ apt-get install wget
```

TestLink の指定ディレクトリにロゴマークを追加する

```bash:
$ cd /opt/bitnami/testlink/gui/themes/default/images
$ wget http://hogehoge.co.jp/logo/logo.png
```
####ロゴマークの準備ができたら custom_config.inc.php に以下の内容を追記する

```bash:
//レポートで表示される TestLink ロゴを自社ロゴに変更する
$tlCfg->document_generator->company_logo = 'logo.png';

//ロゴマークの高さを指定する
$tlCfg->document_generator->company_logo_height = '50';
```

### 5. TestLink > レポートメトリクス > グラフ > グラフによるレポート の文字化けを解消する

TestLink のコンテナにログインする

 ```bash:
 $ docker exec -it コンテナID /bin/bash
 ```
wget と unzip をインストールする

```bash:
$ apt-get update
$ apt-get install wget
$ apt-get install unzip
```

システムフォントにIPAexフォントを追加する

```bash:
$ cd /usr/share/fonts/truetype
$ wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00201.zip
$ unzip IPAexfont00201.zip
$ rm -fr IPAexfont00201.zip
```

fc-cache をインストールする

```bash:
$ apt-get update
$ apt-get install fontconfig
```

システムフォントのキャッシュをクリアする

```bash:
$ fc-cache -fv
```

custom_config.inc.php に以下の内容を追記する

```bash:
//グラフのレポートのフォントとしてシステムフォントのIPAexゴシック体を利用する設定
$tlCfg->charts_font_path = "/usr/share/fonts/truetype/IPAexfont00201/ipaexg.ttf";
```

### 6. Bad Request 対策をする

<img width="546" alt="スクリーンショット 2017-12-08 11.42.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/41095/014d731b-4632-6afd-be17-d72e13cedb93.png">


TeskLink のセキュリティ対策が厳しすぎて　Bad Request　エラーになる。クライアントからの HTTP リクエストのヘッダのサイズ制限を緩和する


TestLink のコンテナにログインする

```bash:
$ docker exec -it コンテナID /bin/bash
```

httpd プロセスを確認する

```bash:
$ ps aux | grep httpd
```
vim で httpd.conf を編集する

```bash:
$ sudo vim /opt/bitnami/apache/conf/httpd.conf
```

httpd.conf の最終行に以下を追加する

```bash:
LimitRequestFieldsize 1048576
```

編集した httpd.conf の設定を反映するために Apache を再起動する

```bash:
$ /opt/bitnami/apache/bin/apachectl restart
```

### 7. Upload ファイルサイズを拡大する
TeskLink のテストケースなどをアップロードする場合に、ファイルサイズが大きすぎて読み込まないエラーの対策。custom_config.inc.php と php.ini の設定を変更する。

TestLink のコンテナにログインする

```bash:
$ docker exec -it コンテナID /bin/bash
```

Vim で custom_config.inc.php を開く

```bash:
$ vim /bitnami/testlink/custom_config.inc.php
```
custom_config.inc.php に以下の設定を記述する 

```bash:
<?php

// アップロードするファイルサイズ上限を拡大する
// ただし(多くの場合のPHPデフォルト値の)２MBを超える場合は、
// 同時に php.ini の upload_max_filesize の設定も変更する。
$tlCfg->import_max_size = '40000000'; // in bytes
$tlCfg->repository_max_filesize = 40; //MB

?>
```

Vim で php.ini を編集する

```bash:
$ vim /opt/bitnami/php/lib/php.ini
```

php.ini の最終行付近にある以下のサイズを拡大する

```bash:
upload_max_filesize = 40M
post_max_size = 40M
```

編集した php.ini の設定を反映するために Apache を再起動する

```bash:
$ /opt/bitnami/apache/bin/apachectl restart
```


### 8. TestLink の警告表示に対応する

ログイン画面の上部中央に「インストールディレクトリを削除してください！」と警告表示される

再びインストールウィザードを実行させないために、該当ディレクトリごと削除する

```bash:
$ rm -fr /opt/bitnami/testlink/install
```


### 9. HTTP ERROR 500 の対策

TestLink のコンテナにログインする

```bash:
$ docker exec -it コンテナID /bin/bash
```

httpd プロセスを確認する

```bash:
$ ps aux | grep httpd
```
vim で httpd.conf を編集する

```bash:
$ sudo vim /opt/bitnami/apache/conf/httpd.conf
```

Apach起動時のエラー「AH00558: httpd: Could not reliably determine the server's fully qualified domain name〜」対策としてコメントアウト、サーバーネームが有れば設定する

```bash:
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName www.example.com:80
```

編集した httpd.conf の設定を反映するために Apache を再起動する

```bash:
$ /opt/bitnami/apache/bin/apachectl restart
```


###以上