Magic3で作るマルチドメイン型Webサイト(2/2)

#残りの作業
前回の「[Magic3で作るマルチドメイン型Webサイト(1/2)](https://qiita.com/czbone/items/4a3f1e916cd67eb14436)」までの作業でクライアントの開発環境からサーバへ暗号鍵認証でSSH接続できるところまで完了しました。

「1. 開発環境構築」「2. サーバ準備」の作業に続いて、今回は残りの作業の「3. Chef実行」「4. Magic3インストール」を行います。

#3. Chef実行
Magic3マルチドメイン管理用のChefレポジトリを開発環境に配置して、自動処理でサーバの構築を行います。
Chefレポジトリとは、サーバに構築する環境の情報が1つのディレクトリにまとまったものです。

開発ディレクトリ内にChefレポジトリ用ディレクトリ「chef」(E:\develop\chef)を作成します。
以下のページの右端「Clone or download」ボタンから圧縮ファイルをダウンロードして「chef/multidomain」ディレクトリを「E:\develop\chef」にコピーします。
https://github.com/magic3org/build-env

「Magic3で作るマルチドメイン型Webサイト(1/2)」の要領で、「multidomain」ディレクトリ内にPowerShell起動用のショートカット「PowerShell起動」を作成しておきます。エクスプローラーで「PowerShell起動」をコピーしてプロパティの「作業フォルダー」を「E:\develop\chef\multidomain」変更しても作成できます。

ディレクトリ構成は以下のようになります。

```
develop/
　└ chef/
　 　└ multidomain/
　 　 　├ .chef/
　 　 　├ cookbooks/
　 　 　├ nodes/
　 　 　├ roles/
　 　 　├ site-cookbooks/
　 　 　├ .gitignore
　 　 　├ Berksfile
　 　 　├ chefignore
　 　 　├ LICENSE.txt
　 　 　├ PowerShell起動
　 　 　└ README.md
```

##クックブック取得
共通で使われるChefの作業手順はクックブックという単位で管理されています。Magic3環境に必要な共通のクックブックは**Berksfile**ファイルに記述され、取得したクックブックは**cookbooks**ディレクトリに格納されます。Magic3環境構築に必要な独自のクックブックは**site-cookbooks**ディレクトリに格納されています。
空の状態の**cookbooks**ディレクトリにクックブックを取得します。

「PowerShell起動」でPowerShellを起動してカレントディレクトリを「multidomain」に移動します。
次のコマンドを実行します。

```
PS E:\develop\chef\multidomain> berks vendor cookbooks
```

##Chef初期化
サーバの設定内容はSSH接続名で区別され、ノードディレクトリ「E:\develop\chef\multidomain\nodes」に保存されます。
以下のように、先に作成したSSH接続名だけを記述したノードファイル「**server-xx1.json**」を作成します。

```
{
  "name": "server-xx1"
}
```

**ノードディレクトリ以下にある設定ファイルはすべて自動的に読み込まれます。不要なファイルを置かないように注意します。**

Chefの初期化コマンド「**knife zero bootstrap**」コマンドを実行します。「Overwrite it ? (y/N)」の表示には、「y」キーで答えます。
「server-xx1」に接続し「Chef Client finished」が表示されれば正常終了です。
ノードファイルにサーバの設定内容が反映されます。

```
PS E:\develop\chef\multidomain> knife zero bootstrap server-xx1 -N server-xx1
...
WARNING: Node "server-xx1" already exist. [Found 1 Node(s) in local search.] (You can skip asking with --overwrite option.)
Overwrite it ? (y/N) y
...
Connecting to server-xx1
server-xx1 -----> Existing Chef installation detected
server-xx1 Starting the first Chef Client run...
server-xx1 Starting Chef Client, version 13.8.5
server-xx1 resolving cookbooks for run list: []
server-xx1 Synchronizing Cookbooks:
server-xx1 Installing Cookbook Gems:
server-xx1 Compiling Cookbooks...
server-xx1 [2018-04-27T07:17:05+09:00] WARN: Node server-xx1 has an empty run list.
server-xx1 Converging 0 resources
server-xx1
server-xx1 Running handlers:
server-xx1 Running handlers complete
server-xx1 Chef Client finished, 0/0 resources updated in 02 seconds
```

「**knife node**」コマンドを実行して**server-xx1.json**に「roles\web.json」(E:\develop\chef\multidomain\roles\web.json)の情報を追加します。

```
PS E:\develop\chef\multidomain> knife node run_list add server-xx1 role[web]
server-xx1:
  run_list: role[web]
```

##サーバパラメータ設定
構築するサーバのパラメータ設定を行います。
先のChef初期化で生成された「E:\develop\chef\multidomain\nodes\server-xx1.json」ファイルを編集します。
「normal」のセクション部分に**サーバ管理者のメールアドレス**と**サーバID**を追加します。
メールアドレスの「webmaster@example.com」部分は任意の有効なメールアドレスを設定してください。

```
    "magic3-env": {
      "mailto": "webmaster@example.com",
      "server_name": "xx1"
    }
```

追加すると以下のようになります。先頭に「,」を追加することに注意してください。
再度Chefの初期化コマンド「**knife zero bootstrap**」を実行し「Overwrite it ? (y/N)」を行うと「server-xx1.json」が上書きされますが、「normal」セクションはそのまま残るので１度設定すればOKです。

```
{
  "name": "server-xx1",
  "normal": {
    "tags": [

    ],
    "knife_zero": {
      "host": "server-xx1"
    },
    "magic3-env": {
      "mailto": "webmaster@example.com",
      "server_name": "xx1"
    }
  },
  "default": {
...
```

##Chef実行
次のコマンドで環境構築開始します。
長い処理の後「Chef Client finished」で終われば正常終了です。

```
PS E:\develop\chef\multidomain> knife zero converge name:server-xx1 -a name
...
server-xx1 Starting Chef Client, version 13.8.5
...
server-xx1 Chef Client finished, 198/267 resources updated in 14 minutes 36 seconds
```

#4. Magic3インストール
ドメインを作成して、Magic3をインストールします。

##DNSの設定
DNSにこれから構築するサーバのホスト名とIPアドレスを登録します。
ホスト名はドメインの形式「example.com」でもサブドメインの形式「www.example.com」でも使用できます。
ここでは「example.com」を作成することにします。
DNSの設定がネット上で有効になれば次に進みます。

##サイト生成コマンド実行
Magic3のサイトを生成するスクリプトを実行します。
Tera TermでSSHで接続して、「**createdomain.sh** ドメイン名」の形式でコマンドを実行します。

```
# cd /root/tools
# ./createdomain.sh example.com
ユーザ(ログイン不可ユーザ)を作成しました
magic3_2.30.9.tar.gz を解凍しました
Magic3の解凍終了しました
Enabling site vhost-example.com.
To activate the new configuration, you need to run:
  service apache2 reload
バーチャルホストの設定ファイル作成しました
Apacheに反映します
バーチャルホストの設定はOKです
設定を反映しました
DB作成しました
ドメイン作成完了しました
New Site Info ===========================

Server IP        : 192.168.1.46
URL              : http://example.com
DB Name          : xx1te5124_db
DB User          : xx1te5124
DB Password      : 073238
-----------------------------------------
HostId           : xx1te5124
HostName         : example.com

=========================================
```

/homeディレクトリ以下にドメイン用のディレクトリが新規に作成され、Apacheにドメインの設定が追加されます。
画面に表示されたDB接続情報等は次のMagic3のインストーラで使用するのでメモしておきます。

##Magic3インストーラ実行
WebブラウザからDNSに登録したドメインの**admin**のURLにアクセスするとMagic3インストーラが開始されます。

```
http://example.com/admin
```

インストーラを最後まで完了させるとサイト構築は完了です。1ドメインの作成は完了しました。
複数サイトを構築する場合は同様にDNSに登録して**createdomain.sh**コマンドで作成していきます。

##その他のコマンド
**createdomain.sh**コマンド以外に/root/toolsには以下のコマンドがあります。

- removedomain.sh [ドメイン名] - ドメイン削除
- updatemagic3src.sh - Magic3バージョンアップ

# 終了
これで複数のMagic3サイトが管理できるサーバの構築は完了しました。
これからは、個別のサイトの新規追加、削除はコマンドで行い、立ち上げたサイトはそれぞれのMagic3の管理画面で管理する方法で、マルチドメイン型Webサーバを運用していきます。

Magic3の使い方については次のチュートリアルを参考にしてください。

http://doc.magic3.org/index.php?%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB