環境移行作業で経験したことまとめ[インフラっぽい編]

# とりあえずやったことをまとめてみました
　移行作業には幅広く知識がいるんだなぁ・・・とこの半年で実感しました。
　純粋にどちらも環境から丸っとアップデートするという案件だったので、インフラ、ミドルウェア、フロントのあちこちを**ちょこっと齧る**という工程を踏みます。今回は、インフラの内容でやったことについてまとめます。

*コマンド前の$マークは普通のクライアントユーザーで、#はスーパーユーザーなんですね。筆者、最近知りましたので、本記事でちょいちょい使っていきます*

間違っているものがあればご指摘お願いします。

## 何故AWSから変えるのか
　古いインスタンス(仮装化タイプがPV方式)を使っていると計画再起動で立ち上がって来なくなったりする危険性もあるということで、ここから全部移行させました。移行先は、Amazon Linux 2(仮装化タイプがHVM方式)です。Amazon Linux2はLHELベースなので、CentOS7の知識が活用できます。

## パッケージ管理ツール
Cent系ならyum。debian系ならapt-get。macならhomebrewなどなど・・・筆者は、初めてLinuxを触った時は、パッケージ管理ツールが沢山あって混乱しました。(確か、それぞれのOSにあったものとしらずに
Centにapt-get入れようとするなんて事までした)

### 管理ツールで知っておくべきこと
個々のミドルウェアの設定よりも、installしてみたらバージョン違うのが落ちて来ていたりします。原因として、パッケージ管理ツールに管理されてないバージョンのリポジトリを公式から引っ張ってくる必要があるというところですったもんだしたので、リポジトリの追加方法の種類とか、失敗した時に綺麗に消すとか知っといたほうがいいと思いました。

### amazon-linux-extras
amazon linux 2から現れたExtras Libraryです。
ミドルウェアのバージョンアップがこれを利用することでお手軽に整えることができます。
コマンドがamazon-linux-extrasで、非常に長いです。

```
### 提供されているパッケージの名前をバージョン込みで確認
$ amazon-linux-extras list

### パッケージに含まれる中身を確認
$ amazon-linux-extras info listで出たパッケージ名

### パッケージのインストール
$ amazon-linux-extras info install listで出たパッケージ名

### パッケージのアンインストール
$ amazon-linux-extras info disable listで出たパッケージ名
```
### yum
　ただ、バージョンの縛りでもしかしたらextrasライブラリに無いバージョンのミドルウェアが要求されていることがあるかもしれないので、その場合はyumを利用して、環境を整えてください。
　yumはご存知、CentOSではお馴染みのパッケージ管理ツールマネージャーです。

- yumは、Redhat系パッケージ管理ツールです
- yumはrpmの高性能バージョンです。つまり、2代目.rpmファイルパッケージ管理ツール
- rpmファイルの依存性解決をします
- .rpmファイルの自動更新を行います
- リポジトリ連携を行います

yumには上記の解釈を持っていれば問題ないかと思います。


```
### インストールしたパッケージのアップデート
# yum update

### yumでサポートしているリポジトリのリスト。　grep と合わせて専ら使う。
# yum list | grep パッケージ名

### リポジトリが追加されてもinstallができない場合、/etc/repos.d/epel.repoファイルのenabledが0になっていて、リポジトリが無効になっているので、直接1に書き換えてもいいですが、下記のコマンドで有効化させることができます。(yumコマンドでURLで直接インストールしてしまえばこんなのいらないですが。rpmとかwgetとかcurlでリポジトリを追加した場合、必要になります。)
# yum-config-manager --enable リポジトリ名

### yumでインストールしたパッケージのリスト
# yum list installed

### yumの使用履歴を調べる。自動更新されて知らず知らずのうちにバージョンが上がってエラー吐き倒す状況になっても、このコマンドを知っておけば一発解決
# yum history

### パッケージのインストール
# yum install パッケージ名 or リポジトリのURL

### パッケージの削除。インストールした時にパッケージによっては複数のパッケージが落ちてくるパターンがあるので、部分的にgrepかけて関連パッケージ根こそぎアンインストールする。クリーンインストールするにはディレクトリまで削除しましょう。
# yum list installed | grep パッケージ名
# yum remove パッケージ名 
```

## swapファイルの作成
swapファイルは実メモリ以上のメモリが利用され始めると、使われていない部分を一時的にですが書き出しを行ってくれる仮想メモリです。新しいサーバーに載せ替えたなら、作ってあげるといいです。

### メモリの利用状況を確認します。


```
$ free -t -h
```

### swapファイルを作成する。
/dev/zeroは前の記事で書いた/dev/nullと同じ、スペシャルファイルの1つ。この特定サイズの内容が何もないファイルを/var/swapのファイルとして、1メガバイトで1024ブロック分をコピーしろというものです。

```
# dd if=/dev/zero of=/var/swap bs=1M count=1024
```

### swapファイルのフォーマットをします

```
# mkswap /var/swap
```

### swapファイルを適応します。
もう一度freeコマンドを打てば、swapファイルが作られているのを確認できると思います。

```
# swapon /var/swap

# free -t -h

             total       used       free     shared    buffers     cached
Mem:          1.0G       301M       722M        54M         0B       3.5M
-/+ buffers/cache:       298M       725M
Swap:         1.0G       185M       838M
Total:        2.0G       487M       1.5G
```

### swapファイルの永続化
下記のようにfstabファイルに、ファイルのパス　ファイル名 ファイル種類　option(ファイルシステムのマウントオプション)　dump（dumpコマンドでバックアップ対象にするかを決める。1か0で設定。1にならバックアップ対象に、0ならdumpの対象外になる） pass(起動時にfsckがチェックする順番。0,1または2で設定。1はチェックの優先度が一番高い。ルートファイルシステム(/)は1である必要がある。2はその他のファイルシステムをいれればよい。0のファイルシステムはチェックされない。）のフィールド順で記述する。

```/etc/fstab
/var               swap                   swap    defaults        0 0
```

## mysqlの拡張用ボリュームをマウントする
wordpressを利用する際に使っていると刻一刻と増えていくのは、アップロードされた画像などです。なので、1つのインスタンスタイプのボリュームだけでは足りない可能性があるので、データベース用のボリュームを追加します。

* ボリュームをインスタンスにアタッチするのは、AWSのマネジメントコンソールからポチポチしたらできるので、ここでは割愛します。

最初の時点では、

```
$ lsblk

NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1       259:0    0  51G  0 disk 
nvme0n1       259:1    0   8G  0 disk
├─nvme0n1p1   259:2    0   8G  0 part /
└─nvme0n1p128 259:3    0   1M  0 part
```

このように、追加でアタッチされたボリュームはマウントポイントが無いと思います。/でマウントされている方が元々作ったボリュームです。

### マウントする前に、ボリュームにファイルシステムを作成する必要があるかどうかを確認します。

```
# file -s /dev/lsblkで出したデバイス名
```

新しく作ったボリュームの場合、今コマンドではNO file systemと出ますので、作成が必要です。

```
# mkfs -t ファイルシステム デバイス名
```
Linuxには使用されるファイルシステムは四つほどあり、用途に応じて使い分けます。


|名前               |最大ファイルサイズ     | 
|:-----------------|------------------:|
| ext2             |              2TB  |
| ext3             |          16GB~2TB |
| ext4             |              16TB |
| ReiserFS         |              16TB |
今回、私はext4を使いました。このファイルシステムが一番メジャーなようです。
作成されると、先ほどのfileコマンドをもう一度叩くと、ファイルシステムやUUIDが表示されます。

### マウントポイントを作成します。
マウントポイントというのは、ボリュームをマウントした際のディレクトリ構造のことで、ここでファイルの読み書きの実行がなされます。

```
# mkdir マウントポイント

(ex: mkdir hogehoge /opt/data 
```

### マウントします。

```
# mount デバイス名 マウントポイント
```

### システムが起動したら自動的にマウントするようにfstabに設定を追記します。

これでマウントができたわけですが、このままですと、システムが落ちたときや、再起動した時などにこのボリュームが外れてしまいます。

/etc/fstab

```
UUID= マウントポイント ファイルシステムタイプ オプション ダンプ ファイルシステムチェック

(ex: UUID=XXXXXXXXXXXXX /opt/data ext4 nofail 0 0
```

例では、オプションのnofailが、デバイスが存在して入ればマウントし、なければ無視する、それぞれの0はダンプとチェックはしないという意味になります。

### 最後に、fstabに正常にマウントできるようにします。

```
# mount -a
```

### mysqlのデータをこのボリュームの方へ入るようにします。
もともと、mysqlのデータは、 /var/lib/mysqlに入るので、ここを/opt/dataへと変更してやれば良いので、シンボリックリンクを貼ってあげれば良い。

```
$ ln -s 実際にあるパス 貼りたいパス
(ex: ln -s /var/lib/mysql /opt/data/
```
まちがえちゃいそうなのは、貼りたいパスにも/mysqlまで書いてしまうこと。/opt/data/mysqlと書いてしまうと、/opt/data/mysql/mysqlでシンボリックリンクが貼られてしまうので、注意する。

### 権限をmysqlに変更してください。

```
# chown -r mysql:mysql /var/data/mysql
```

ひとまず、サーバーの引っ越しの際にやったことは以上になります。

書き終わって思ったんですが、
**wordpress全然関係ない！！**
でも実際、wordpressの案件でやったことなのは確かです。でも関係があまりないと言うことは、つまり、他にも応用が効く・・・はず・・・