[SIer向け]案件立ち上げ時に役立ちそうなツールをDockerでインストールしてみる

SI業界においてはSaaSで提供されているSlackやGitHubなどのエレガントなツールを使えないことが多いのです。

本記事では、そうしたSaaSを利用できないSIerの案件立ち上げ時に役立ちそうなツールをDockerでインストールする手順をまとめてみました。

対象とするソフトウェアは、以下の通りです。
細かい設定は色々あるのですが、ざっくり記載しています。

|カテゴリ |ソフトウェア |バージョン|
|:-----|:--------|:-----|
|チャットツール | Mattermost| 最新版|
| | Rocket.chat| 最新版 |
| バージョン管理| GitLab CE | 最新版|
| CI/CD | Jenkins | 最新版 |
| チケット管理| Redmine | 最新版 |
| 文書管理 | Alfresco | 2.2.0 |
| ファイルストレージ | Owncloud | 10.0 | 

## :cat: バージョン管理(GitLab) :cat:

### インストール

```sh
mkdir -p gitlab-docker
cd gitlab-docker
```

以降の作業は`gitlab-docker`ディレクトリで実施します。

`docker-compose.yml`ファイルを作成します。

```docker-compose.yml
web:
   image: 'gitlab/gitlab-ce:latest'
   restart: always
   hostname: 'gitlab'
   environment:
     GITLAB_OMNIBUS_CONFIG: |
       external_url 'https://gitlab.local' # ここは環境に応じて変更する
       unicorn['socket'] = '/opt/gitlab/var/unicorn/gitlab.socket' # Macの場合はunicornが起動しなかった。
   ports:
     - '80:80'
     - '443:443'
     - '22:22'
   volumes:
     - './srv/gitlab/config:/etc/gitlab'
     - './srv/gitlab/logs:/var/log/gitlab'
     - './srv/gitlab/data:/var/opt/gitlab'
```

### 起動

以下コマンドで起動します。

```
docker-compose up -d
```

![26f0c898.png](https://qiita-image-store.s3.amazonaws.com/0/203061/974259c7-f4d8-1c57-9e29-2aa484c7fa7b.png)


[特権ユーザの初期アカウント]
- ユーザ名: `root`
- パスワード: `5iveL!fe`


## :monkey: チャットツール編 :monkey:

筆者の経験上、チャットツールは以下の2つがSlackの代わりとしていい感じだと思います。

- Mattermost
- Rocket.chat

以下、これらのツールのインストール方法について記載しています。

### Mattermost編

参考)
[GitHub - mattermost/mattermost-docker: Dockerfile for mattermost in production](https://github.com/mattermost/mattermost-docker)

#### インストール

```
git clone https://github.com/mattermost/mattermost-docker.git

cd mattermost-docker
```

以降の作業は`mattermost-docker`で実施します。

`docker-compose.yml`の該当部分を修正します。

```docker-compose.yml
# コメントアウトされているので外す
args:
  - edition=team

# Macで動かす場合は/etc/localtimeの部分を以下のように修正する。
# 3箇所あるので注意してください。
volumes:
  # - /etc/localtime:/etc/localtime:ro
environment:
    - TZ=`ls -la /etc/localtime | cut -d/ -f8-9`
```



ついでに自己証明書も作っておきます。
以下記事が参考になります。
[自己署名証明書の作成方法 - Qiita](https://qiita.com/akito1986/items/8eb41f5a43bb9421ae79)

パスフレーズなしで作成する場合は、以下の通りです。

```bash
# 秘密鍵作成
openssl genrsa -out key-no-password.pem 2048

# CSR作成
$ openssl req -new -key key-no-password.pem -out ca-csr.pem

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, fully qualified host name) []:com.example
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:

# 自己証明書作成
$ openssl req -x509 -key key-no-password.pem -in ca-csr.pem -out ./volumes/web/cert/cert.pem -days 3560
```

#### 起動

以下コマンドで起動します。

```
docker-compose up -d
```

WebブラウザでアクセスできればOKです。

![1528304c.png](https://qiita-image-store.s3.amazonaws.com/0/203061/d23073c9-a484-cc30-33e9-801585353174.png)

#### バージョンアップする場合

最新バージョンで構築する場合

```bash
git pull
docker-compose build
docker-compose up -d
```

### Rocket.chat編

MatterostではなくてRocket.chatでチャットしたい場合の手順について記載しています。

`docker-compose.yml`を以下のように作成しました。

```docker-compose.yml
db:
  image: mongo:latest
  restart: always
  volumes:
    - ./data/runtime/db:/data/db
    - ./data/dump:/dump
  command: mongod --smallfiles

rocketchat:
  restart: always
  image: rocketchat/rocket.chat:latest
  environment:
    - MONGO_URL=mongodb://db:27017/rocketchat
    - ROOT_URL=http://localhost
    - Accounts_UseDNSDomainCheck=false
  links:
    - db:db
  ports:
    - 80:3000
```

#### 起動

```
docker-compose up -d
```

![aea7369c.png](https://qiita-image-store.s3.amazonaws.com/0/203061/c79761b0-5668-2d12-569e-478c77df6baa.png)

## :mouse: CI/CD(Jenkins) :mouse:

つづいてJenkinsです。
ここでは、マスターとスレーブの構成（SSH接続）で手順を記載しています。

### インストール

スレーブ用のマシンを構築するために`Dockerfile`を作成します。

```Dockerfile
FROM centos:latest

RUN yum install -y sudo openssh-server java-1.8.0-openjdk git gcc make openssl

RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN mkdir -p /var/run/sshd
RUN ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key
RUN useradd -d /home/jenkins -m -s /bin/bash jenkins
RUN echo jenkins:jenkins | chpasswd
RUN echo 'jenkins ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
```

マスター1台、スレーブ2台で構築するために`docker-compose.yml`を以下のように作成します。

```docker-compose.yml
version: '3'
services:
  master:
    container_name: master
    image: jenkins/jenkins:lts
    ports:
      - 8080:8080
    volumes:
      - ./jenkins/master/jenkins_home:/var/jenkins_home

  slave01:
    container_name: slave01
    build:
      dockerfile: Dockerfile
      context: .

  slave02:
    container_name: slave02
    build:
      dockerfile: Dockerfile
      context: .
```

### 起動

以下のコマンドで実行します。

```sh
docker-compose up -d
```
http://IPアドレス:8080
で接続できるはずです。

Adminユーザの初期パスワードは`jenkins/master/jenkins_home/secret.key`に記載されています。

### スレーブマシンを利用可能にする

上記でスレーブを2台構築したので、スレーブマシンとして利用できるようにします。

`Jenkinsの管理`→`ノードの管理`から以下を参考に設定してください。
SSHのユーザ、パスワードは`Dockerfile`を見るとわかるのですが、`jenkins/jenkins`になっています。

![31bac39a.png](https://qiita-image-store.s3.amazonaws.com/0/203061/43cf5ab1-25bc-5e6e-373f-a4ea0b57f8c0.png)


以下画面のように同期が取れていればOKです。

![86d53b28.png](https://qiita-image-store.s3.amazonaws.com/0/203061/a41b3183-63e6-d74c-bd2e-8800fcd9c3e4.png)


## :red_car: チケット管理(Redmine) :red_car:

```docker-compose.yml
version: '3'
services:
  redmine:
    image: redmine:latest
    restart: always
    ports:
      - 80:3000
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: redmine
    volumes:
      - ./redmine/data/files:/usr/src/redmine/files
      - ./redmine/data/log:/usr/src/redmine/log
      - ./redmine/data/plugins:/usr/src/redmine/plugins
      - ./redmine/data/public/themes:/usr/src/redmine/public/themes
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: redmine
      MYSQL_DATABASE: redmine
    volumes:
      - ./db/data:/var/lib/mysql
```

![bb3bcd8c.png](https://qiita-image-store.s3.amazonaws.com/0/203061/7a1a8fe5-3a7d-9277-8c12-05e05c79a170.png)


[管理者の初期アカウント]
- ユーザ名: `admin`
- パスワード: `admin`

### おまけ）テーマのインストール

おまけでテーマの設定を参考程度に記載します。

テーマはここから選ぶのがよさそうです。
[Redmine Themes - Redmine Themes Directory](http://www.redminethemes.org/)

```sh
# テーマをダウンロード
# 今回はFlat Theme(http://www.redminethemes.org/redmine-themes/flat-theme)をインストールします。
git clone https://github.com/tsi/redmine-theme-flat.git
# 適切な場所に配置
mv redmine-theme-flat redmine/data/public/themes
```

`設定`→`表示`でテーマを選択して保存します。

![f0924e50.png](https://qiita-image-store.s3.amazonaws.com/0/203061/afc61129-ab07-3466-aa1e-a6294eed87bf.png)

するとテーマが代わります。

![104a8d74.png](https://qiita-image-store.s3.amazonaws.com/0/203061/b36ccc2c-438c-04f5-fe33-d7a8e49ba1cd.png)


## :dango: 文書管理(Alfresco) :dango:

参考)
[Deploying using Docker Compose \| Alfresco Documentation](https://docs.alfresco.com/community/tasks/deploy-docker-compose.html)

少なくともメモリが6GB必要なようです。
Macで試す場合は、Dockerの設定を変更してください。
<img width="496" alt="スクリーンショット 2019-03-31 15.40.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/203061/abb175d3-c351-acc1-9e88-ae4e336bbcc2.png">


### インストール

公式ページに方法が記載されていました。そのままです。

```sh
git clone https://github.com/Alfresco/acs-community-deployment.git
cd acs-community-deployment
git checkout 2.2.0
```

### 起動

```sh
cd docker-compose
docker-compose up -d
```

起動に失敗した場合には、以下コマンド実行してから再度設定を見直して実行してください。

```sh
docker-compose down --rmi all
```

起動に成功したら
http://IPアドレス:8080/share
でアクセスできます。

<img width="1198" alt="スクリーンショット 2019-03-31 16.07.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/203061/911e66d5-4a4e-bcd8-4d5c-27e4ef64c2bd.png">


[特権ユーザの初期設定]
- ユーザ名: `admin`
- パスワード: `admin`

となっています。

## :file_folder: ファイルストレージ(Owncloud) :file_folder: 

これはここに書くまでもなく、公式ページが整備されていたので、省略します。以下ページをご参照ください。

[Installing with Docker :: ownCloud Documentation](https://doc.owncloud.com/server/admin_manual/installation/docker/)

手順通りに設定して起動すれば、
http://IPアドレス:8080
で接続できると思います。

<img width="696" alt="スクリーンショット 2019-03-31 16.12.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/203061/874aa02d-5454-1914-ed93-73da69fea571.png">



## :smiley_cat: まとめ :smiley_cat:

以上、簡単でしたがDockerを使って簡単にプロジェクト運営に必要なツール群をインストールできるようになったと思います。