Azure上のRedHat Linux(6.70)にLAMPをセットアップするメモ


いつもはCentOS使ってますが、RHLだと微妙に動作が違うのでメモ。
とりあえずはWordpressが動くようにします。

## VMの作成

RedHat Linux Enterpriseは6.7と7.2がありますが、ひとまず使い慣れた6.7を選びます。

<a href="http://www.bluecode.jp/qiita/RHL/001.png">
	<img src="http://www.bluecode.jp/qiita/RHL/001.png" width="500" >
</a>

基本設定を行います。できればここでパスワードではなくSSHで証明書を使ったほうがいいでしょう。

<a href="http://www.bluecode.jp/qiita/RHL/002.png">
	<img src="http://www.bluecode.jp/qiita/RHL/002.png" width="500" >
</a>

とりあえずテストなので一番安いのにします。[View All]としないと、安いプランが表示されません。
<a href="http://www.bluecode.jp/qiita/RHL/003.png">
	<img src="http://www.bluecode.jp/qiita/RHL/003.png" width="500" >
</a>


VMで利用するStorage等を設定します。

<a href="http://www.bluecode.jp/qiita/RHL/004.png">
	<img src="http://www.bluecode.jp/qiita/RHL/004.png" width="500" >
</a>


内容の確認。

<a href="http://www.bluecode.jp/qiita/RHL/005.png">
	<img src="http://www.bluecode.jp/qiita/RHL/005.png" width="500" >
</a>


15分くらいでVMはできます。


## 基本設定

### ログイン

VMの管理画面でIPを確認し、

```bash
ssh ip_address
```

でアクセスできるはずです。

通常であれば鍵の登録やらなにやら必要ですが、私はVM作成時にsshの公開鍵を登録したので、そのままログインできます。ポートは標準でssh(22)が全空きのようです。sudoの権限もあるようです。

>rootにはsudo -sでなれます。

### バージョン確認

```bash
cat /etc/redhat-release
```

としてみます。

```bash
Red Hat Enterprise Linux Server release 6.7 (Santiago)
```
となります。

### yum update

最新版にするため、yum updateを実行します。

```bash
yum update
```

### Locale, Timezoneの設定

AureやAWSで作成されるVMは基本洋風なので、LocaleやTimezoneを設定しておきます。

>なお、以下の操作は原則root権限で行います。

#### locale

```bash
vi  /etc/sysconfig/i18n
```

localeを設定します。i18nを開き、

```bash
LANG="ja_JP.utf8"
```

とします。

>必要に応じてlocaleコマンドで状態を確認します。

#### timezone

ひとまず、dateコマンドを叩いてみます。

```bash
2016年  6月 28日 火曜日 17:19:34 EDT
```
どうやら東部時間になっているようですね。

```bash
cp /usr/share/zoneinfo/Japan /etc/localtime
```
上書きを聞いてくるのでとりあえずyes。

再度、dateコマンドを実行しJSTになっていることを確認します。

#### システムクロック

/etc/localtimeの設定だけでは元に戻ってしまうことがあるのでシステムクロックも変更します。

```bash
vi /etc/sysconfig/clock
```
を開き、

```bash
Zone=”Asia/Tokyo”
```
とします。

### SELinuxの設定

SELinuxがenableだと各種設定が変更できないので、disableにします。

```bash
vi /etc/selinux/config
```

を開き、

```bash
SELINUX=disabled
```

とします。設定を反映するため再起動します。

### その他

必要なツールをインストールしますが、ここでは後でWordpressをダウンロードするためにwgetをインストールしておきます。

```bash
yum install wget
```

## サーバ類のインストールと設定

### レポジトリの追加

RHLの標準リポジトリではPHPが5.3.x、MySQLが5.1.xとなります。が、Wordpressの推奨は、

* PHP 5.6以上
* MySQL 5.6以上

となっていますのでレポジトリを追加します。追加するレポジトリはepelとremiです。

```bash
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
```

これにより/etc/yum.repos.d以下に設定ファイルがインストールされます。
レポジトリの状態を確認するには、

```bash
yum repolist all
```

とします。epelとremi-safeが標準でonになっているようなので、yum.repos.d以下のファイルを編集して標準ではenable=0にしておきます。

### httpd(apache2.2)

```bash
yum install httpd
```

### Indexと.htaccessオーバーライドの許可

/etc/httpd/conf/httpd.confのDocumentRoot(/var/www/html)の<Directory>セクションにおいて

* -Indexes
* Override All

とします。Overrideは必要に応じてオプションを調整します（が、ここではとりあえずAllとします）。

### chkconfig onに（サービスの永続化）

インストールして起動しただけでは再起動するとサービスが落ちるのでchkconfigをonにします。

```bash
service httpd start
chkconfig httpd on
```

### PHPのインストール

php7も利用できますが、枯れた5.6系にしておきます。

#### PHP本体

```php
yum install php php-common --enablerepo=remi,remi-php56
```

#### 拡張モジュールのインストール

gdを入れようとすると、依存関係を指摘されるので、gdのインストール前に、

```php
yum install libwebp-devel --enablerepo=epel
```

では、各種拡張モジュールをインストールします。

```bash
yum install php-mysqlnd php-mbstring php-gd php-pdo php-gd php-xml --enablerepo=remi,remi-php56
```

### MySQL

標準のyumでは5.1.xとなってしまうのでレポジトリをインストールします。

```bash
yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
```

レポジトリがインストールされたら、下記コマンドを実行しMySQLをインストールします。

```bash
yum install mysql mysql-devel mysql-server
```

### my.cnfの設定

最低限の設定として、[mysqld]に

```bash
character_set_server=utf8
innodb_file_per_table
skip-character-set-client-handshake
```

を追加します。必要に応じて、

```bash
innodb_buffer_pool_size = 1G
innodb_log_buffer_size = 64M
```

などとしてもいいかもしれません（サーバも物理メモリをみて調整）。
ここまでできたら、サーバを起動し、かつ永続化をしておきます。

```bash
service mysqld start
chkconfig mysqld on
```

### mysql_secure_installationの実行

mysql_secure_installationを実行して最低限のセキュリティー対応をします。

```bash
mysql_secure_installation
```

やることは、

* rootパスワードの設定
* anonymous usersの削除
* rootによるリモートログインの禁止
* test databaseの削除

です。基本、標準通りに進めます。

### MySQLにログインしてみる

設定が正しく反映しているかログインしてみます。そしてstatusコマンドを実行してみます。
charactersetがClient,Serverともにutf8になっているか確認します。ここがおかしいと文字化けします。

```bash
mysql> status
--------------
mysql  Ver 14.14 Distrib 5.6.31, for Linux (x86_64) using  EditLine wrapper

Connection id:		13
Current database:
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.6.31 MySQL Community Server (GPL)
Protocol version:	10
Connection:		Localhost via UNIX socket
Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8
UNIX socket:		/var/lib/mysql/mysql.sock
Uptime:			3 min 53 sec

Threads: 1  Questions: 42  Slow queries: 0  Opens: 67  Flush tables: 1  Open tables: 60  Queries per second avg: 0.180
--------------
```

## Firewallの設定

ここまでの状態でWebサーバも起動していますが、Firewallでブロックされているため外部からは見えません。
なので、80番ポートを許可します。

設定すべき箇所はAzureレベルとOSレベルの2箇所必要です。

### AzureのFirewall

[Netwrok Security Group] -> [Inbound security rules] -> [Add] と選び適切に設定します。
その、Network Security Groupってどこ？って感じなのですが、私は[All resources]から行きました。

<a href="http://www.bluecode.jp/qiita/RHL/006.png">
	<img src="http://www.bluecode.jp/qiita/RHL/006.png" width="500" >
</a>

「入」を許可するので[Inbound security rules]を選びます。

<a href="http://www.bluecode.jp/qiita/RHL/007.png">
	<img src="http://www.bluecode.jp/qiita/RHL/007.png" width="500" >
</a>

必要なポートを追加します。

<a href="http://www.bluecode.jp/qiita/RHL/008.png">
	<img src="http://www.bluecode.jp/qiita/RHL/008.png" width="500" >
</a>

とりあえず80ポートが空きました。

<a href="http://www.bluecode.jp/qiita/RHL/009.png">
	<img src="http://www.bluecode.jp/qiita/RHL/009.png" width="500" >
</a>


### OSのFirewall(iptables)

標準では全てが拒否されていますので、必要なポートを許可します。SSLが必要な場合は443等も行います。
サイトが見えるか確認します。

```bash
iptables -I INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
```

問題がなければ保存、再起動させルールを反映させます。

```bash
service iptables save
service iptables restart
```

ここまででLAMPの基本的な設定が完了しました。ブラウザでサーバにアクセスすると下記のようなページが見えます。

<a href="http://www.bluecode.jp/qiita/RHL/010.png">
	<img src="http://www.bluecode.jp/qiita/RHL/010.png" width="500" >
</a>


## WordPressのセットアップ

### dbuserとdbの準備

Wordpressの実行には専用のdbが必要なので準備しておきます。また、そのdb専用のユーザーも用意しておきます。


#### dbの作成

上記で作成したrootでMySQLにログインします。そして、下記コマンドを実行します。
Wordpressでは標準のDB名がwordpressなので、それにしておきます。

```sql
mysql> create database wordpress;
```

#### dbuserの作成

rootを利用しても問題ありませんが、専用のdbuserを作成しておきます。

```bash
grant all on wordpress.* to dbuser@localhost identified by 'Password';
```

>削除したい場合はrevoke all on wordpress.* from dbuser@localhost;で消せます。

### Wordpressのダウンロードとセットアップの起動

#### Wordpressのダウンロード

今回、wordpressは/var/www/html以下に設置するものとします。なので、今回はとりあえずそこにWordpressをダウンロードします。

```bash
cd /var/www/html
wget https://ja.wordpress.org/wordpress-4.5.3-ja.zip
```

>バージョンは随時変わるので、wordpress（日本語）のサイトでサウンロードURLを取得して下さい。

ダウンロードが完了したら解答します。

```bash
unzip wordpress-4.5.3-ja.zip
```

#### セットアップの起動

ここまでの準備ができたらhttp://servername/wordpress/にアクセスします。
このような画面がでれば正しく設定されています。

<a href="http://www.bluecode.jp/qiita/RHL/011.png">
	<img src="http://www.bluecode.jp/qiita/RHL/011.png" width="500" >
</a>


設定したdbuser等を設定します。

<a href="http://www.bluecode.jp/qiita/RHL/012.png">
	<img src="http://www.bluecode.jp/qiita/RHL/012.png" width="500" >
</a>


ここで、wp-config.phpが書き込めませんでした！というメッセージが出ることがありますが、その場合は、画面に表示されているコードをコピーし、/var/www/html/wordpress/wp-config.phpとして保存します。

<a href="http://www.bluecode.jp/qiita/RHL/016.png">
	<img src="http://www.bluecode.jp/qiita/RHL/016.png" width="500" >
</a>



Wordpressの管理画面に入るためのIDやパスワードを設定します。

<a href="http://www.bluecode.jp/qiita/RHL/013.png">
	<img src="http://www.bluecode.jp/qiita/RHL/013.png" width="500" >
</a>


この画面がでれば完了です。ログインしてみます。

<a href="http://www.bluecode.jp/qiita/RHL/014.png">
	<img src="http://www.bluecode.jp/qiita/RHL/014.png" width="500" >
</a>

ダッシュボードが表示されます。

<a href="http://www.bluecode.jp/qiita/RHL/015.png">
	<img src="http://www.bluecode.jp/qiita/RHL/015.png" width="500" >
</a>