VirtualBox+CentOS+Nginxで、テストWEBサーバを構築する覚書

さくらVPSでWEBアプリケーションを稼働させることを想定した時、まずローカルの仮想マシン上で同等のサーバ環境を構築してそこで安心して開発したいなと思いました。
さくらVPSでCentOSをインストールしたときの状態を思い出しながら最低限の環境インストールまで記録しておきます。

# VirtualBox のインストール
省略します。どこかのサイトを参考にしてください。
そんなに苦労したり悩んだりしなかったはずです。

# CentOS 6.6 のインストール
## isoイメージのダウンロード
http://wiki.centos.org/Download
ここからイメージをダウンロードします。32bitならi386、64bitならx86_64を選択します。
リンクを巡っていった先にある、"CentOS-6.6-i386-minimal.iso"または"CentOS-6.6-x86_64-minimal.iso"をダウンロードします。
この記事を書いてる時には64bitの仮想マシンを構築することを想定しているので、"CentOS-6.6-x86_64-minimal.iso"を選択したとします。

## 新規マシンの作成
Oracle VM VirtualBox マネージャを起動します。
上のメニューから、「仮想マシン」>「新規」を選択します。

#### 名前とオペレーティング・システム
「名前」は適当に決めます。
「タイプ」は"Linux"。
「バージョン」は"Red Hat (64bit)"。
(名前に「Cent」とタイプすると勝手にタイプとバージョンを予想してくれるっぽい。)
#### メモリーサイズ
さくらVPSで契約した仕様に合わせればいいと思います。
1024MBか2048MBに設定。
#### ハードドライブ
「仮想ハードドライブを作成する。」を選択します。
#### 仮想ハードドライブのファイルタイプ
"VDI(VirtualBox Disk Image)"を選択します。
#### 物理ハードドライブにあるストレージ
「可変サイズ」を選択します。
#### ファイルの場所とサイズ
何も変更せず「作成」を押します。
たぶん仮想ハードドライブのサイズは8.00GBになってるかな。

## 仮想マシンの設定
作成されたマシンを左のリストから選んで、右クリックから「設定」を選択します。
「ストレージ」を選択し、ストレージツリー内の「コントローラー: IDE」>「空」を選択します。
右の「属性」のCDアイコンをクリックしてCentOSのisoイメージを選択します。
「ネットワーク」を選択し、「アダプター2」に切り替えます。
「ネットワークアダプターを有効化」にチェックを入れます。
「割り当て」を「ホストオンリーアダプター」に設定します。
「OK」を押して完了です。

## 仮想マシンの起動
作成されたマシンを左のリストから選んで、右クリックから「起動」を選択します。
少しして、"Welcome to CentOS 6.6!"の画面が表示されます。
"Install or upgrade an existing system"を選択します。
しばらくすると、メディアチェックしようと促されますが、"Skip"を選択します。

## CentOS のインストール
CentOS6のインストール画面が表示されます。「Next」をクリックします。
"What language would you like to use during the instration process?"を訊かれるので、日本語を選択します。次へ。
システム用のキーボードも日本語にします。次へ。
ストレージデバイスのタイプは、「基本ストレージデバイス」を選びます。
ストレージデバイスの警告が出ますが、何も含まれているはずがないので、「はい」を選択します。
ホスト名は好きに設定してよいですが、私はデフォルトのままにしています。
左下のネットワークの設定を押して、eth0とeth1を共に自動接続するようにチェックします。次へ。
タイムゾーンはデフォルトの「アジア/東京」にします。次へ。
rootのパスワードを適当なものに設定します。次へ。
インストールのタイプは「既存のLinuxシステムを入れ替える」でよいと思います。深く考えていません。次へ。
「変更をディスクに書き込む」を押して、インストールを待って完了です。

# CentOS 6.6 の設定
とりあえずrootでログインします。
## ネットワークの設定
```
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0
```
以下のようにeth0を起動時に有効にするよう書き換えます。

```:ifcfg-eth0
ONBOOT=yes
```

再起動します

```
$ reboot
```

## ユーザ作成
usernameというユーザを作成するとします。

```
$ useradd username
$ passwd username
Changing password for user username.
New password:(パスワードを入力)
Retype new password:(再度入力)
passwd: all authentication tokens updated successfully.
```

usernameでsudoできるようにします。

```
$ visudo
```

99行目あたりを書き換えます。

```:sudoers
root    ALL=(ALL)       ALL
username    ALL=(ALL)   ALL
```

exitしてusernameでログインしなおします。

## パッケージの更新
```
$ sudo yum -y update
```

## EPELリポジトリのインストール
```
$ sudo yum -y install epel-release
```

## ファイアウォールの設定
```
$ sudo vi /etc/sysconfig/iptables
```
1行追加してこんな感じにします。

```:iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
```

iptablesを再起動します。

```
$ sudo service iptables restart
```

# Nginx のインストール
## インストール
```
$ sudo yum -y install nginx
```

## 自動起動するように設定
```
$ sudo chkconfig nginx on
```

## 起動してみる
```
$ sudo service nginx start
```
これでホストOSのブラウザからIPでアクセスできます。
IPアドレスは、

```
$ ifconfig eth1
```
を叩いて、"inet addr:"の後ろに表示されます。

アクセスして、
![2015y04m21d_201948728.jpg](https://qiita-image-store.s3.amazonaws.com/0/38022/ba24fddf-bbc0-833a-b225-69f1280462f2.jpeg)
こんな感じのページが表示されればOKです。

あとはnginxの設定ファイルをいじるとか、node.jsを入れるとか好きにやりましょう。

おしまい！

# [おまけ] HTMLファイルを公開してみる
## ホームディレクトリ以下に公開用ディレクトリを作成する

```
$ cd
$ mkdir public_html
```

## 適当なHTMLファイルを置いておく

```
$ cd ~/public_html
$ vi index.html
```
```html:index.html
<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <h1>Hello there!</h1>
  </body>
</html>
```

## Nginxのサーバ設定をする
本当はサーバごとにconfファイルを作っておくといいと思いますが、今回は簡易のため用意されているデフォルトのconfファイルを編集します。

```
$ sudo vi /etc/nginx/conf.d/default.conf
```

15行目あたりを編集します。

```:default.conf
location / {
    root   /home/username/public_html;
    index  index.html index.htm;
}
```

## ホームディレクトリのパーミッションを変更する
これをしないと403 Forbiddenハマりします。

```
$ chmod o+x /home/username
```

## SELinuxを無効化しておく
これをしないと403 Forbiddenハマりします。

```
$ sudo setenforce 0
$ sudo vi /etc/selinux/config
```

"SELINUX="のところを書き換えます。

```:config
SELINUX=disabled
```

## アクセスしてみる
先ほどと同様にIPアドレスでアクセスして、"Hello there"なページが表示されればOKです。

おしまい！