VPSにhttps対応でマルチドメインのRedmineを構築しよう～さくらVPSセットアップ編～

# 要件
- VPSにRedmineをDockerベースで構築したい
- 既にbitnamiで構築済みのRedmineをDockerベースに移行したい
- httpsに対応してほしい
- Redmineのコンテナを複数立ち上げて、マルチドメインのRedmineを気軽に構築したい

上記要件が社内で出たので、構築した手順のメモ

## 参考にしたサイト
[さくらVPS SSH接続](https://qiita.com/ShinyaOkazawa/items/cb406923fbc39e7abd25)

[CentOS7にDockerをインストールする](https://qiita.com/inakadegaebal/items/be9fecce813cebec5986)

# さくらVPSセットアップ手順

## VPSコントロールパネルよりOSをインストール
今回はCentOS7_LAMP環境を選択

## sshコマンドによるサーバ接続
```
ssh root@xxx.xxx.xxx.xxx
```
xxx部分はサーバーのアドレス

## OSアップデート
```
# yum update
```

## rootユーザーのログインを禁止
一般ユーザー作成

```
# adduser sampleuser
```
一般ユーザのパスワード設定

```
# passwd sampleuser
```
rootユーザでのアクセス終了

```
# exit
```
一般ユーザでSSH接続

```
ssh sampleuser@xxx.xxx.xxx.xxx
```
ルートユーザーに切り替え

```
$ su -
```
設定ファイルのバックアップ作成

```
# cd /etc/ssh
# cp sshd_config sshd_config.old
```
設定ファイルを編集

```
# vim sshd_config
```
`#PermitRootLogin yes`の記述を検索し、`PermitRootLogin no`に変更する。
sshdを再起動すると設定が有効になる。

CentOS6の場合

```
# /etc/rc.d/init.d/sshd restart
```
CentOS7の場合

```
# systemctl restart sshd.service
```

## SSH接続を鍵認証で行う
鍵を作成

```
cd ~/.ssh
ssh-keygen -f sakura_rsa -t rsa -b 2048
```
鍵をサーバに登録

```
ssh-copy-id -i ~/.ssh/sakura_rsa.pub sampleuser@xxx.xxx.xxx.xxx
```
接続確認

```
ssh -i ~/.ssh/sakura_rsa sampleuser@xxx.xxx.xxx.xxx
```

## パスワードでのログインを禁止
sshのコンフィグファイルを開く。

```
$ sudo vim /etc/ssh/sshd_config
```
下記の設定を`no`に設定する。

```
PasswordAuthentication no 
```
設定を反映。

CentOS6の場合

```
# /etc/rc.d/init.d/sshd restart
```
CentOS7の場合

```
# systemctl restart sshd.service
```

## SSH接続ポートを変更

```
$ sudo vim /etc/ssh/sshd_config
```
下記の記述を検索する。

```
#Port 22
```
コメントアウトを外してポート番号を10022に変更。

```
Port 10022
```
コンフィグファイルを編集したら忘れずに設定を反映させる。

### CentOS6の場合

```
# /etc/rc.d/init.d/sshd restart
```
### CentOS7の場合

```
# systemctl restart sshd.service
```
このままだとログインできないためfirewalldの設定を変更する。

### CentOS6の場合

```
sudo vim /etc/sysconfig/iptables
```
既存の下記行をコメント

```
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
```
その下に新規行を追加

```
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10022 -j ACCEPT
```
サービスリスタート

```
sudo service iptables restart
```

### CentOS7の場合

```
$ sudo vim /usr/lib/firewalld/services/ssh.xml
```
portの番号を10022に変更。

```
<port protocol="tcp" port="10022"/>
```
firewalldの設定を反映。

```
$ sudo firewall-cmd --reload
```

## SSHについてのメモ書き
- 鍵認証の基本的な考え方は公開鍵をSSHサーバーに保存しておき、秘密鍵を使用してSSHクライアントが接続する。
- Teratermなどを複数ウィンドウ開いた状態で公開鍵の入れ替えなどを行ってもエラーとなり接続できないことがある。おそらくアプリ内部になんらかのキャッシュが残ってしまっている？
- 公開鍵を新規にサーバーに登録した際には必ずクライアントソフトを新規で立ち上げてから接続すること。

---

## 現在Dockerがインストールされていたら削除する

```
sudo yum remove docker docker-common docker-selinux docker-engine
```

## 必要なパッケージインストール

```
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
```

## レポジトリ追加

```
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

## yumのパッケージインデックスを更新(DockerのINSTALLやUPGRADEの前に一回実行することが推奨されている)

```
sudo yum makecache fast
```

## インストール可能バージョンを調べる

```
yum list docker-ce.x86_64 --showduplicates | sort -r
```

## インストール

```
バージョン指定
sudo yum install docker-ce-17.06.0.ce-1.el7.centos
最新バージョン
sudo yum install docker-ce
```

## 起動

```
sudo systemctl start docker
```

## 確認

```
sudo docker run hello-world
```

## いちいちsudoを書かなくてもようにする(セキュリティー面を考慮してやるかやらないかの方針決めが必要)

```
dockerグループはすでにあるはずだけど念の為
$ sudo groupadd docker
現在のユーザーをdockerグループに入れる
$ sudo usermod -aG docker $USER
```

## 確認

```
再ログイン後(仮想環境であれば、再起動が必要な場合もある)
docker run hello-world
```

## OS起動時にDockerを自動起動に

```
sudo systemctl enable docker
```