2014年5月6日火曜日

VMwareでMac上に仮想サーバーを構築する

VMwareを使ってMacOS X(64bit)上に仮想サーバーを構築する手順をメモする。

仮想マシン:VMware
ホストOS:Mac OS X(64bit)
ゲストOS:CentOS6.5(64bit)


VMwareのインストールとCentOS 6.5で仮想マシンの立ち上げ

公式サイトより「VMware Fusion 6」をダウンロードする。
今回は構築してみるだけなので30日間有効な無償評価版を利用する。

ネットワークインストール用のisoイメージ「CentOS-6.5-x86_64-netinstall.iso」をダウンロードする。

最初にダウンロードしたVMwareのdmgファイルを実行する。

インストール方法を選択で「イメージからインストール」を選択する。

選択できるイメージがないので「別のイメージを使用」から、先ほどダウンロードしたCentOS6.5のisoイメージを選択する。

OSの選択で「Linux→CentOS(64bit)」を選択する。

「終了→保存」

ここから先の設定は「Mac OS X Mountain Lion + VMware Fusion 5 + CentOS 6.3 + Apache + mod_proxy + PSGI + Movable Type 5.2 のローカル環境を構築した」を参考にしてインストールを進める。

※上記サイトの補足
手順15.
 今回利用したURLはこちら →「http://ftp.riken.jp/Linux/centos/6.5/os/x86_64/

手順16.
 ここで「以下のストレージデバイスは、有用なデータを含んでいるかもしれません」ととてつもなく不安になる注意メッセージが出るが、この「ストレージデバイス」はVMwareが物理マシン上の空き領域に確保した仮想マシン用の領域なので、初期化しても物理マシンのデータが消されることはない。なので「どのようなデータであっても破棄してください」を選択する。


仮想サーバーにMac側のターミナルで接続

VMwareからCentOSにrootでログインする。

次のコマンドを実行
# ifconfig

ズラッと出てきたテキストの「eth0」の「inet adder:〜」にあるIPアドレスをメモする。

Mac本体のターミナルを開いて次のコマンドを実行し、パスワードを入力して接続完了。
$ ssh root@メモしたIPアドレス

今後はターミナルからCentOSに接続する。


システムの初期設定

SELinuxが有効だと、環境構築中にブロックされたりするので無効化する。
# vi /etc/selinux/config
開いたテキストの真ん中にある「SELINUX=enforcing」を「SELINUX=disabled」にして保存する。

設定を読み込むために再起動する。
# shutdown -r now

システムを最新化する
# yum update -y

今後、環境構築に使いそうなモジュールをインストールする。
# yum install -y wget
# yum install -y gcc
# yum install -y unzip

ファイアーウォールを設定する。
変更する前に既存の設定をオリジナルファイルとして保存しておく。
# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.org

編集する。
# vi /etc/sysconfig/iptables
次の内容に書き換えて保存する。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

iptablesを再起動する。
# /etc/rc.d/init.d/iptables restart


Apacheのインストール

Webサーバーが既にインストールされているか確認する。
# yum list installed | grep httpd
何も出ないのでインストールする。
# yum install -y httpd
httpdの設定を変更する。
# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
# vi /etc/httpd/conf/httpd.conf
行番号を表示する。
:set number
行へジャンプするには「行番号 + G」

44行目「ServerTokens OS」を「ServerTokens Prod」に変更する。
OSのままだとアクセスしてきたユーザーにサーバーのOS情報が表示されてしまうので隠す。

276行目「#ServerName www.example.com:80」を「ServerName メモしたIPアドレス」に変更する。コメントアウトを外すこと。

331行目「Options Indexes FollowSymLinks」を「Options -Indexes FollowSymLinks」に変更する。
ブラウザからディレクトリにアクセスした時に内容物が丸見えになってしまうので隠す。

536行目「ServerSignature On」を「ServerSignature Off」に変更する。
ユーザーにサーバー署名自体を表示させない。

保存した後、文法チェックする。
# apachectl configtest
「Syntax OK」だったのでWebサーバーを起動する。
# service httpd start


PHPのインストール

インストール可能なPHPの詳細を見てみる。
# yum info php
5.3.3とバージョンが古いのでyumのレポジトリを追加して、最新バージョンをインストールできるようにする。
今回は、よく使うらしい「epel」と「remi」を追加する。


インターネットで"epel downloads"と検索
→ https://dl.fedoraproject.org/pub/epel/6/x86_64/
上記サイトで"epel-release"を検索し、ホームディレクトリにダウンロードする。
# wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

 次に"remi"で検索
→ http://rpms.famillecollet.com/
CentOSからバージョン6をダウンロードする。
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
それぞれリポジトリに追加する。
# rpm -Uvh epel-release-6-8.noarch.rpm
# rpm -Uvh remi-release-6.rpm

epelの設定ファイルを編集する。
# vi /etc/yum.repos.d/epel.repo
6行目の「enabled=1」を「enabled=0」に変更して保存する。
remiはもともと「enabled=0」になっている。


追加したリポジトリからインストール可能なPHPの詳細を見てみる。
# yum info --enablerepo=epel, remi php
→ PHP 5.4.28
バージョンが新しくなったのでPHPをインストールする。使いそうなライブラリも一緒に。
# yum --enablerepo=epel,remi install -y php php-devel php-mysql php-mbstring php-gd

PHPの設定ファイルを編集する。
# cp /etc/php.ini /etc/php.ini.org
# vi /etc/php.ini

以下を探して編集
;error_log = syslogの下に追加
error_log = /var/log/php.log
次のコメントアウトを外す
;mbstring.language = Japanese
5行下辺りを編集
mbstring.internal_encoding = EUC-JP → UTF-8

10行した当たりのコメントアウトを外す
;mbstring.detect_order = auto
次を編集
expose_php = On → Off
;date.timezone = を探して編集
date.timezone = Asia/Tokyo

Webサーバーを再起動
# service httpd restart


Redisのインストール

yumのリポジトリからインストールする。
# yum --enablerepo=epel,remi -y install redis

Redisを起動する。
# /etc/init.d/redis start

サーバー起動時にRedisが起動するように設定する。
# chkconfig redis on

Redisをテストしてみる。
# redis-cli
> set 'test' 3
OK
> get 'test'
"3"
> exit


Memcacheのインストール

yumのリポジトリからインストールする。
# yum --enablerepo=remi,epel -y install memcached

Memcacheはrootユーザーで起動できない。
今更ながら作業ユーザーを追加する。
# useradd workuser
# passwd workuser

workuserで入り直す。
sudo権限を与える。
# su
# visudo
「root ALL=(ALL) ALL」の下に「workuser ALL=(ALL) ALL」を追加する。
# exit

初期設定
$ memcached -d -m 64 -p 11211
起動
$ sudo service memcached start
起動確認
$ ps aux | grep memcached
次回以降も自動的に起動
$ sudo chkconfig memcached on
PHPでMemcachedを利用するためのライブラリを追加
$ yum install --enablerepo=remi php-pecl-memcached

// test1.php
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
$m->set('key', date('Y/m/d H:i:s'), time() + 60); // 有効期限1分

// test2.php
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
if ($val = $m->get('key')) {
    echo $val;
}

test1.php実行後すぐにtest2.phpを実行すると日時が表示されたが、1分経過後にtest2.phpを実行すると何も表示されない。うまいこと動作している。



MySQLのインストールは次回。

0 件のコメント:

コメントを投稿