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

#概要
ここでは構成ツールChefを使って１台のサーバにLAMP環境を自動構築し、複数のドメイン構成(サブドメイン含む)のWebサイトを立ち上げるまでを行います。
運用形態は1台のサーバで複数のサイトを運営するイメージです。
個々のWebサイトはそれぞれ独立した別々のWebアプリケーションとしてインストールします。
Webアプリケーションには、オープンソースCMS「Magic3」を使用します。(www.magic3.org)

サーバ環境を自動構築するためにChefを使用しますが、Apache2のCookbookを実行することによって、Ubuntu系のOSで使われるa2ensite,a2dissite等のコマンドが実行できるようになり、マルチサイトの管理が容易になる利点もあります。

できるだけ初心者でも実行可能なレベルで記述していこうと思います。

#目標
目標とする構築環境、使用するツール類は以下の通りです。
##開発環境(作業用PC)
- Windows10
- Chef13またはChef14

##サーバ環境
- CentOS7
- Apache 2.4
- PHP 7
- MariaDB 10
- 実際のサーバとしては、さくらインターネットの「さくらのVPS」を利用

#作業手順
1. 開発環境構築
2. サーバ準備
3. Chef実行
4. Magic3インストール

#1. 開発環境構築
Windows10にChefが実行できる環境を構築します。
ChefはSSHを通してサーバに環境を自動構築するのでSSHクライアント環境も作ります。

コマンドを実行するシェルウィンドウはコマンドプロンプトでもPowerShellでも可能です。上下矢印キーでコマンド実行の履歴が使えるのでここではPowerShellを使用します。
PowerShellはWindows10にはデフォルトでインストールされています。スタートメニューのアプリケーションメニューの「Windows PowerShell」から起動します。

##ユーザフォルダ名の確認
シェルウィンドウを起動してカレントディレクトリのパスが半角英数字であるか確認します。
特にWindows10では日本語でアカウントを作成してしまった場合はパス解釈に問題が起きます。
Windows環境では、全角文字が含まれているパスを解釈できなツール類(特にRuby回り)が多く存在します。ユーザフォルダに半角英数以外の文字が含まれている場合は思い切って新規にアカウントを作り直します。

##作業用ツールインストール
基本的な作業用ツールをインストールしておきます。

- Tera Term (https://ja.osdn.net/projects/ttssh2/ )
- WinSCP (https://sourceforge.net/projects/winscp/ )

##SSHクライアントインストール
サーバに対してChefを実行するには鍵認証でSSH接続できる必要があります。
SSHコマンドを使用するために「Git for Windows」(https://gitforwindows.org )をインストールします。インストーラではデフォルトの設定値を選択します。
システム環境変数「Path」に「C:\Program Files\Git\usr\bin」を追加します。
パスを追加するとsshやssh-keygenコマンドがシェルウィンドウ上で実行できるようになります。

###「.ssh」ディレクトリ作成
SSH接続の設定はユーザ(someone)ディレクトリ以下の「C:\Users\someone\\\.ssh\config」に作成していきます。
「.ssh」ディレクトリが存在しない場合はシェルウィンドウから「ssh-keygen」コマンドを実行して作成します。コマンド実行後はリターンキーで答えてデフォルト値を選択します。
「.ssh」ディレクトリにはid_rsa、id_rsa.pubのデフォルト暗号鍵ファイルが作成されますがここでは使用しません。サーバを新規に追加するごとに暗号鍵を生成する方針でいきます。

```
>ssh-keygen
```

##Chef環境インストール
Chefの環境はパッケージを利用するとWindows上でも非常に簡単に構築できるようになりました。
Chefのダウンロードサイト(https://downloads.chef.io/ )からWindows用の「Chef Development Kit」をダウンロードしてインストールします。

###Knife-Zeroプラグイン
開発環境からサーバに対してSSHを通してダイレクトに環境構築操作を行うためにKnife-Zeroプラグインを使用します。
シェルウィンドウから以下のコマンドを実行してインストールします。

```
>chef gem install knife-zero --no-document
Successfully installed knife-zero-1.19.2
```

#2. サーバ準備
Chefを実行できる環境を準備します。OSをインストールして秘密鍵でSSH接続できる状態にするだけです。

##サーバ契約
どこのレンタルサーバを利用してもいいのですが、価格が手軽で、後で拡張も可能ということで「さくらのVPS」を選択しました。
https://vps.sakura.ad.jp/specification/

![screencapture-vps-sakura-ad-jp-specification-2018-04-13-07_38_36.png](https://qiita-image-store.s3.amazonaws.com/0/208187/4aee7601-d024-a2cb-11b9-9b30f241a8e0.png)

##OSインストール
「OSの再インストール」のドキュメント、「標準OSインストール」の部分を見てCentOS 7をインストールします。
OSの再インストール: https://help.sakura.ad.jp/hc/ja/articles/206207961

入力画面では「**CentOS7 x86_64**」のOSを選択し、パスワードを設定します。
パスワードは任意に設定してもいいですが、紛失することもあるので、サービスを申し込んだとき送られてくるメールのパスワードを毎回そのまま使用します。

###接続テスト
サーバが立ち上がり、Tera Termを使って、サーバのIPアドレスにrootユーザと設定したパスワードで接続できればOSインストール完了です。

##暗号鍵作成
エクスプローラーで任意の位置に開発作業用のディレクトリを作成します。ここでは「E:\develop」とします。開発ディレクトリ内に暗号鍵作成用ディレクトリ「key」(E:\develop\key)を作成します。
エクスプローラーから「key」ディレクトリを表示させ、ディレクトリ内をカレントにしてシェルウィンドウ起動できるショートカットを作成しておきます。

コンテキストメニューの「新規作成」からショートカットを作成します。
![shortcut1.jpg](https://qiita-image-store.s3.amazonaws.com/0/208187/077a232d-776f-010d-c921-e4adfbab7f5b.jpeg)

PowerShellのショートカットを作るにはPowerShellのパスを参照させます。
![shortcut2.jpg](https://qiita-image-store.s3.amazonaws.com/0/208187/bb51e1c0-fefb-d551-af72-ed1a129dcad3.jpeg)

ショートカットファイルの名前は「PowerShell起動」とします。
ショートカット作成後、ファイルのプロパティを開いて「作業フォルダー」に「e:\develop\key」を設定します。
![shortcut6.jpg](https://qiita-image-store.s3.amazonaws.com/0/208187/7a30b5bf-c3ac-800e-812d-42991de263c0.jpeg)

設定後、ショートカットをダブルクリックして指定のディレクトリ位置でシェルウィンドウが開くことを確認します。

##暗号鍵作成スクリプト
暗号鍵作成は**keygen.cmd**スクリプトを使用します。**keygen.cmd**は次の作業を一度に実行します。

- 暗号鍵ファイルを「keys」ディレクトリ下に作成
- 暗号鍵ファイルのインストールシェルスクリプトを作成
- SSHの設定ファイル(config)にサーバ接続情報を追加
- Tera Term用のサーバ接続ファイル(.ttl)を「サーバ接続」ディレクトリ下に作成

**keygen.cmd**は次のURLの「Download Zip」ボタンから取得します。
Zipファイルの「tree/master/tool/windows」ディレクトリ内の**keygen.cmd**を「key」ディレクトリ下に配置します。
https://github.com/magic3org/build-env

![github.png](https://qiita-image-store.s3.amazonaws.com/0/208187/76529ffe-91e4-ebbc-df9b-ac6894f71fe7.png)



環境に合わせて以下の部分の「DEVELOP_DIR」値を修正しておきます。

```
:: 要定義パラメータ
set SERVICE_NAME=さくらVPS
set SERVICE_NAME_HEAD=sakura_vps_
set TERATERM_DIRNAME=サーバ接続
set DEVELOP_DIR=E:\develop
set KEY_DIR=%DEVELOP_DIR%\key\keys
```

keygen.cmdの実行引数には**サーバID**と**サーバのIPアドレス**が必要です。
**サーバID**は任意の半角英数字で決めます。ここでは「xx1」とします。
**サーバのIPアドレス**はサーバ契約したサーバのIPです。ここでは「192.168.1.46」とします。

「key」ディレクトリの「PowerShell起動」ショートカットでシェルウィンドウを起動し、以下のコマンドを実行します。

```
>./keygen.cmd xx1 192.168.1.46
```

暗号鍵ファイルが作成され、ディレクトリ構成は次のようになります。
「C:\Users\someone\\\.ssh\config」ファイルには、「server-xx1」の名前で設定が追加されています。

```
develop/
　├ key/
　│　├ keys/
　│　│　│ sakura_vps_xx1_192.168.1.46
　│　│　└ sakura_vps_xx1_192.168.1.46.pub
　│　├ install/
　│　│　└ sakura_vps_xx1(192.168.1.46)_installer.sh
　│　├ keygem.cmd
　│　└ PowerShell起動
　└ サーバ接続/
　 　└ さくらVPS_xx1(192.168.1.46).ttl
```

```config:.ssh\config
Host server-xx1
  HostName 192.168.1.46
  User root
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile "e:\develop\key\keys\sakura_vps_xx1_192.168.1.46"
  IdentitiesOnly yes
  LogLevel FATAL
```

```config:さくらVPS_xx1(192.168.1.46).ttl
;============================================ 
; サーバ接続用スクリプト
; 機能：秘密鍵を使用してSSH接続する
;============================================ 
username = 'root'
hostname = '192.168.1.46'
keyfile = '"e:\develop\key\keys\sakura_vps_xx1_192.168.1.46"'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

msg = hostname
strconcat msg ':22 /ssh /2 /auth=publickey /user='
strconcat msg username
strconcat msg ' /keyfile='
strconcat msg keyfile
connect msg
```

##公開鍵インストール
SSH接続のためのサーバ側の設定を行います。
公開鍵インストール用のスクリプトをサーバにアップし実行するだけで完了です。

Tera Termを使って、rootユーザ、パスワードでサーバに接続します。
インストールスクリプトファイル(sakura_vps_xx1(192.168.1.46)_installer.sh)をTera Termの画面上にドロップします。ファイルをドロップすると以下のダイアログが表示されるので「SCP」ボタンを押します。

![2018-04-16_15h24_46.jpg](https://qiita-image-store.s3.amazonaws.com/0/208187/47c41d12-7669-f9ba-bdf5-51a3b8d168b8.jpeg)

Tera Termからコマンドでファイルに実行権限を与えて、シェルスクリプトを実行します。

```
# chmod 700 sakura_vps_xx1(192.168.1.46)_installer.sh
# ./sakura_vps_xx1(192.168.1.46)_installer.sh
```

公開鍵「E:\develop\key\keys\sakura_vps_xx1_192.168.1.46.pub」の内容で「/root/.ssh/authorized_keys」ファイルが作成され、公開鍵インストール処理は終了です。
コマンド実行後は、sakura_vps_xx1(192.168.1.46)_installer.shファイルを削除します。

###SSH接続確認
作成された「.ttl」ファイルを使って、Tera TermでSSH接続できるかを確認します。
エクスプローラーで「E:\develop\サーバ接続」ディレクトリを開き「.ttl」ファイルに起動アプリが関連付けられていない場合は設定します。ファイルを選択し右クリックでコンテキストメニューから「プログラムから開く」を選択します。関連付けするプログラムはTera Termマクロ起動用の「C:\Program Files (x86)\teraterm\ttpmacro.exe」です。Tera Term本体の「ttermpro.exe」ではないことに注意してください。
関連付けするとファイルのアイコンが「M」の表記になります。

![shortcut8.jpg](https://qiita-image-store.s3.amazonaws.com/0/208187/88c9a93f-4570-de1a-200a-a6efe4bac056.jpeg)

エクスプローラー上で「さくらVPS_xx1(192.168.1.46).ttl」ファイルをダブルクリックします。
シェルウィンドウが開きサーバにログインできれば鍵認証によるSSHの設定は完了です。

「1. 開発環境構築」「2. サーバ準備」の作業が終わりました。
次は一気にChefで環境を構築します。

「3. Chef実行」「4. Magic3インストール」を行います。
「[Magic3で作るマルチドメイン型Webサイト(2/2)](https://qiita.com/czbone/items/f9a84268c2eab86f00c0)」へ続きます。