カテゴリー
Linux

【VirtualBox】◆Mac◆★LAMP★ローカル開発環境構築【WordPress】

スクリーンショット 2013-02-09 17.21.12.png

やりたいこと

  • Mac の VirtualBox に Linux インストールからはじめて WordPress ウェブサイト構築
  • Linux は CentOS 5 32 bit、Web サーバーは Apache、データベースは MySQL、プログラムは PHP
  • つまりは LAMP をわたくしの 13インチ MacBook Pro Retina にローカル開発環境として立てます。ローカル VPS です。
  • iptables でファイアウォール設定、ntp で自動時計合わせ(NTP サーバ)設定、不要なデーモンストップ、要らないコンソールの無効、SELinux の無効も行います。なぜなら本番環境の設定にそのまま応用できるからです。わたくしは欲張りなのです♪
  • ローカル開発環境へは、ssh で接続します。ウェブサイトはもちろんウェブブラウザから確認します。
  • ssh、ウェブサイトへは IP アドレスでアクセスします。
  • ユーザは root のみ。開発環境ですのでウェブブラウザからのアクセス以外のセキュリティはあんまし気にしない方針です。
  • 今回は取り扱いませんが、本番環境構築では、root での ssh アクセスを禁止、sudo 導入をプラスすると良いかと思います。と、言うより必須です。

環境と必要なツール

今回、以下の環境にローカル開発環境を構築いたしました。

  • 13インチ MacBook Pro Retina(SSD のため、とても早いです。プロセッサ  2.9 GHz Intel Core i7、メモリ  8 GB 1600 MHz DDR3)
  • Mac OS X 10.8.2
  • HDD 容量 3 GB くらい(VirtualBox 本体と、CentOS 5 の容量合わせて)

必要なツール(無料。無料!)

  • 仮想化ソフトウェアの VirtualBox バージョン 4.2.6 r82870(PC の中に別の OS を立てることができます。Windows、Mac 両方対応しており、両方とも無料!)
  • Linnux の OS、CentOS 5 の 32 bit 版。CentOS-5.8-i386-bin-DVD-1of2.iso(わたくしの本番環境に合わせただけで、バージョン 6 でも 64 bit でも 問題ないかも)
  • ターミナル(Mac にはじめから入っています。ローカル開発環境を弄るためのコマンドを送ります)

え?要らないの?はい、今回は使いません!必要ありません!なツール

  • ファイルアップロードするための FTP、SFTP、FTPS 、SCP ソフト(新しい WordPress を立てるだけなら不要)
  • ホストをなんか弄るソフト(IP アドレスでアクセスします、シンプルに。)

今回はシンプルにしたいため、ファイルアップロードしませんがいつか必要となってきます。そのときは FileZilla を使用します。なぜなら、無料です。また、Windows 版も Mac 版もあり、学習コストを低くおさえられるのです!

ダウンロード・インストール

  • VirtualBox
    Downloads Oracle VM VirtualBox
    ※補足。Windows の場合、途中で何度も警告ウインドウが表示されますが、全て「続行」を選択します。
  • CentOS
    下記ページのリストのから、Japan の HTTP を選択 > 5.8/ > isos/ > i386/ CentOS-5.8-i386-bin-DVD-1of2.iso
    www.centos.org – centos.org content
    ※補足。5.8-i386-bin-DVD-2of2.iso は不要です。また、最新の 5.9 だとダメで、IP アドレス設定でつまづきました

VirtualBox だけインストールします。CentOS はダウンロードだけですが、長い時ですと 2 〜 3 時間と、とても時間がかかりますので何か別の作業でもしながらがおすすめです。

では、始めましょう♪

1.VirtualBox に CentOS 5 をインストールする

スクリーンショット 2013-02-09 13.50.42.png

VirtualBox を Mac にインストールしました。次は、VirtualBox に CentOS をインストールしていきます。

慣れないとなんでこんなに手順が多いのでしょう?と思うのですが、まず OS をインストールするための領域、いわば器である仮想マシンを作ります(1-1)。続いて仮想マシンの設定(1-2)を行います。そして最後に仮想マシンの中に CentOS をインストール(1-3)します。

1−1.仮想マシンの作成

悩まずシンプルに行う方針で行きます。ですので仮想マシン名を設定するぐらいであとは全てデフォルトのまま進めていきます。

  1. Oracle VM VirtualBox マネージャーウインドウ左上の「新規」をクリック
  2. 名前とオペレーティングシステム。
    名前を入力。今回は「CentOS1
    タイプ Linux
    バージョン Red Hat
    ※CentOS っぽい名前にすると、自動的にタイプが「Linux」、バージョンが「Red Hat」となる可能性が高いです
    続ける
  3. メモリーサイズ、デフォルトの 512 MB のまま「続ける
  4. ハードドライブ、「仮想ハードドライブを作成する」にチェックのまま、「作成
  5. ハードドライブのファイルタイプ、「VDI」にチェックのまま、「続ける
  6. 物理ハードドライブにあるストレージ、「可変サイズ」にチェックのまま、「続ける
  7. ファイルの場所とサイズ、ボックスはデフォルトの値のまま、仮想ハードドライブのサイズもデフォルトの値(8.00 GB )まま、「作成

1−2.仮想マシンの設定

作ったばかりの仮想マシン「CentOS1」の設定です。たどり着くまでが少し長いですが、2つだけです。

  1. Oracle VM VirtualBox マネージャーウインドウ左上の「設定」
  2. ストレージ
    コントローラー: IDE > 空、をクリック
    CD/DVDドライブ 「IDE セカンダリマスター」右のディスクマークをクリックし、「仮想CD/DVDディスクファイルの選択」をクリック。CentOS のイメージファイルを選択し、「オープン」
  3. ネットワーク
    アダプター2
    「ネットワークアダプターを有効化」にチェック
    割り当て ホストオンリーアダプター

1−3.CentOS のインストール

こぼれ話ですが、Windows で同じ工程を行なっておりましたら、Host Memory Low、つまりメモリ不足で強制終了したことがありました。それも何度か。こんな場合は落ち着いて、いくつかソフトを終了しメモリを確保してからめげずにトライすれば OK です。

ちなみに、Mac では起きたことがありません♪ありがたやです。

  1. Oracle VM VirtualBox マネージャーウインドウ左上の「起動」。すると新しくウインドウ「VirtualBox VM」が立ち上がります。以降はこの新しいウインドウ内での操作となります。
    ※ウインドウ内でマウスカーソルをクリックしますとウインドウの中でカーソルが動くようになります。このカーソル、ウインドウの外に出られません。VirtualBox VM から出るためには、左側の command キーを押します。
  2. CentOS-5 と表示される画面。Enter キーを押します。
  3. CD テストをするか尋ねられますので、Skip
  4. GUI の画面になり、マウスが使えるようになりました。「Next」をクリック。
  5. 言語選択。「Japanese (日本語)」を選択して「Next
  6. キーボード選択。「日本語」を選択して「
  7. 警告が表示されます。「はい」をクリック。
  8. パーティション設定画面。なにも変更せず、「
  9. 再び警告が表示されます。「はい」をクリック。
  10. ネットワークデバイスの画面。そのまま変更しないで「
  11. タイムゾーンの選択画面。「アジア/東京」が選択されていることを確認して、「
  12. Root パスワードを入力し、確認欄にも入力して、「」をクリック。
  13. ソフトウェア一覧から全てのチェックを外し今すぐカスタマイズするにチェックして、「」をクリック。
  14. 「言語 > 日本語」以外の全てのチェックを外して「次」をクリック。
  15. CentOS インストールの開始直前画面。「」をクリックしてインストールを開始させます。
  16. 自動的に ISO ファイルが取り出されています。ウインドウ右下のアイコン群の左から2番目のディスクアイコンが灰色になっています。このまま「再起動」をクリックして、インストールは完了です!

以上で、VirtualBox 上に CentOS をインストールするところまで進みました。次はネットワークの設定をし、それが済ましたらウェブサーバ構築に必要なソフトを入れて完了です。あとたった(?)の2つです♪

ちなみに、インストール作業は、本当に最小に近い構成としたのと、なにより 13インチ MacBook Pro Retina の処理能力もあってすばらしいことに 2 分程度で完了しました。

わたくしが世間知らずなだけで実はとっても遅いのかもしれませんが、以前使用していたパソコンと比べると何十倍、何百倍のケタで早くなっていますので、今のところ満足しています。

2.VirtualBox に CentOS5 をインストールしてからホストオンリーアダプタを設定して仮想マシンに IP アドレスを割り当てる方法

スクリーンショット 2013-02-09 13.59.20.png

ここが一番難しかったです!わたくしは、ネットワークまわりの知識経験が特に不足しているみたいです。ですから、力をつけていくのが楽しみです。ここの設定も、しっかり記録していつでも自在に設定できるようになるのです♪

2−1.ネットワーク構成の理解と決定

まずはどのようなネットワーク構成にするか、です。

仮想マシンからは外部のインターネットにアクセスできるようにします。経路としては仮想マシン → Mac → インターネットとなりますが、外部のインターネットといっても難しいことはなにもなく、普通の Google とか Yahoo! などへアクセスする、というイメージとなります。

Mac からのみ仮想マシンへアクセスできるようにします。外部のインターネットからは仮想マシンにアクセスできません。

そのために VirtualBox にある次の2つのネットワークのつなぎ方を組み合わせます。

  • NAT :
    外部やホストから仮想マシンにアクセス → ×
    仮想マシンから外部やホストにアクセス → ◯
  • ホストオンリーアダプタ :
    ホストから仮想マシンに、仮想マシンからホストにアクセス → ◯
    外部から仮想マシンにアクセス → ×

2−2.【VirtualBox】IP アドレスを決定します

VirtualBox > 環境設定 > ネットワーク。ホストオンリーネットワークを編集、と進みます。もしひとつもなければ、ホストオンリーネットワークを追加、で作成してから編集します。

アダプターの、IPv4 アドレス(今回は 192.168.56.1 が割り当てられた)、IPv4 ネットマスク(255.255.255.0)をメモしておきます。次に DHCP サーバーを選択し、サーバーを有効化にチェックが入っていないことを確認します。

Oracle VM VirtualBox マネージャーから仮想マシンを選択し、設定 > ネットワーク > アダプター2、と進みます。割り当てはホストオンリーアダプターを選択し、高度をクリックして表示される MACアドレスをメモ。例えば、08002744E0BA

必要な情報は取得出来ました。ssh、ウェブブラウザからアクセスする IP アドレスを決めます。192.168.56.1 がアダプターの、IPv4 アドレスとして設定されていました。最初の3番目までの192.168.56. は固定です。4番目を 101〜254 の中から選びます。今回は 111 とします。つまり ssh、ウェブブラウザからアクセするときの IP アドレスは、 192.168.56.111 となります。

2−3.【CentOS】IP アドレス設定

これで準備が出来ました。仮想マシンが立ち上がっていなければ起動します。「login:」と表示されたら root と入力して enter キーを押し、「Password:」と表示されたら設定したパスワードを入力して enter キーを押します。これで root ユーザでログインできました。そして /etc/sysconfig/network-scripts/ifcfg-eth1 を編集します。

vi /etc/sysconfig/network-scripts/ifcfg-eth1

修正前です。修正する前にファイル内の HWADDR と、MAC アドレスが一致していることを確認します。一致といっても完全に一致ではなく、コロン「:」は MAC アドレスにはありませんし、大文字小文字が合わないです。内容が合っていればそれで大丈夫です。

# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth1
BOOTPROTO=dhcp
ONBOOT=no
HWADDR=08:00:27:5e:75:6d
HOTPLUG=no

修正後です。↓

# Intel Corporation 82540EM Gigabit Ethernet Controller
 DEVICE=eth1
 BOOTPROTO=static
 ONBOOT=yes
 HWADDR=08:00:27:5e:75:6d
 IPADDR=192.168.56.111

network のサービスを再起動します。

/etc/init.d/network restart

経過が下記のように表示されれば OK です。

 Shutting down interface eth0:                      [ OK ]
 Shutting down loopback interface:                  [ OK ]
 Bringing up loopback interface:                    [ OK ]
 Bringing up interface eth0:
 Determining IP information for eth0... done.
                                                    [ OK ]
 Bringing up interface eth1:                        [ OK ]

以上でターミナルから、192.168.56.111 の TCP ポート 22 で ssh 接続できるようになりました。

※補足

以下補足です。w コマンド等で FROM を見ると接続元が 192.168.56.1 であることが分かります。

192.168.56.1 はVirtualBox > 環境設定で作成したホストオンリーネットワークのアダプターの IPv4 アドレスであることに注目です!つまり次のことが言えます。

  • ホスト OS (Mac)の IP アドレス 192.168.56.1
  • 仮想マシン(CentOS)の IP アドレス 192.168.56.111

ローカル開発環境の IP アドレスに、192.168.56.1 が使用できない理由が、何となくわかると思います。

3.VirtualBox 開発環境構築 システム設定編

スクリーンショット_2013-02-09_14.53.00.png

ssh からログイン

ここからはずっと、ターミナルから操作します。理由は割愛しますが、その方がいろいろ便利だからです。アプリケーション > ユーティリティにある、ターミナルを起動して次のコマンドで仮想マシンの CentOS に root ユーザでログインします。

ssh root@192.168.56.111

3−1.まずはアップデート、全体にわたって必要なアプリ(パッケージ)をインストール

まずはアップデートします。

yum -y update

これからの作業に必要なパッケージをインストールします。

yum install -y man vim-enhanced unzip wget

3−2.iptablesをインストール・設定

本番環境さながらに iptables を導入して最低限の設定をいたします。まずはインストールです。

yum install -y iptables

iptables 設定を行います。今回は仮想マシンへのアクセスを許可するポートを設定して、それら以外のアクセスを全て拒否するように設定していきます。

まずは下準備です。

# ポリシーを決めます。 INPUT を ACCEPT していますが最終的に DROP して必要なもの以外は遮断します。
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# ルールをクリアします。
iptables -F

実は、ルールのクリアは CentOS をインストールしてから初めて iptables を設定するときは行わなくても問題ありませんが、リセットしてやり直したいときにこのタイミングでクリアするんだぞ!と忘れないために記述しておきます。

なぜこのようなこと気にしていますかというと、以前 iptables 設定で今回と同じようにコマンドで設定しておりましたら手痛い失敗を下からなのでした。こちらの投稿です。

ここから必要最低限のパケット許可をしていきます。

# 接続済み(ESTABLISHED)とその関連(RELATED)パケットを許可します。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# icmp(ping)からの入力を許可します。
iptables -A INPUT -p icmp -j ACCEPT
# 自端末からの入力を許可します。
iptables -A INPUT -i lo -j ACCEPT
# http(80)、https(443) 接続を許可します。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ssh 接続を許可します。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

受け入れたいパケットの設定が終わりました。残りは全て拒否します。

# 上記以外の INPUT を拒否
iptables -P INPUT DROP

保存して、再起動します。

# 設定をセーブ
iptables-save > /etc/sysconfig/iptables
# iptables を再起動してポリシー・ルールを適用
/etc/init.d/iptables restart

以上で完了です。次のコマンドで確認します。

# 設定結果を確認
iptables -L

以下のように確認出来れば OK です。

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

最後に、仮想マシンを起動した時に iptables も自動的に起動するかどうか確認します。

# iptables が自動起動することを確認
chkconfig --list iptables

2 〜 5 が on となっていれば問題ありません。

iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off

3−3.NTP サーバーによる時刻同期設定変更

サーバなどと大層な感じですけれども、ntp ソフトを入れて時計合わせを自動的に行ってもらうだけです。

# ntp インストール
yum install -y ntp

手動で時刻同期ができることを確認します。

# 時刻を即時同期(ntp が stop 状態で行うこと)
ntpdate ntp.nict.jp

成功しましたら、どれくらいのズレを矯正したのかなどの情報が表示されます。

24 Jan 21:23:33 ntpdate[2150]: step time server 133.243.238.163 offset 1.661067 sec

起動設定をします。

# 自動起動するように設定し、確認します。
chkconfig ntpd on
chkconfig --list ntpd

次のように CentOS 起動時に自動的に ntp も立ち上がることを確認します。

ntpd           0:off 1:off 2:on 3:on 4:on 5:on 6:off

設定ファイルを編集して、時刻の取得先を設定します。

# 設定ファイルの編集
vim /etc/ntp.conf

次の3行を修正します。

server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org

server -4 ntp.nict.jp
server -4 ntp1.jst.mfeed.ad.jp
server -4 ntp2.jst.mfeed.ad.jp

あとは起動するだけです。プログラムをフルパスで指定して、start オプションを付けて実行するだけです。

# 起動
/etc/init.d/ntpd start

起動すれば「起動中」と表示されます。

ntpd を起動中:                                             [  OK  ]

同期がとれているかどうかの確認は、起動してから少し時間が立たないとできません。時刻の取得先との接続がうまくいったかどうかが分かるまでに時間がかかるからです。結果がわかるまで、5分間隔くらいで確かめてみると良いです。

# 設定確認
# * : 参照同期中であると宣言されたサーバ(sys.peer)
# + : 接続テストに合格し, いつでも参照可能なサーバ. 参照リストにある(好ましい)サーバ(candidat)
# - : クラスタリング検査で, 参照リストから外れたサーバ(outlyer)
ntpq -p

サーバの左側の少なくともひとつが * となっていれば大丈夫です。そして全部で 3 つのサーバを指定しましたが、のこりの 2 つは + となっていれば OK です。

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-a2.nict.go. .NICT.           1 u    6   64   17   28.566  -37.002   6.396
+ntp1.jst.mfeed. 210.173.176.251  2 u    2   64   17   36.179  -37.516   6.313
+ntp2.jst.mfeed. 210.173.160.86   2 u    4   64   17   29.320  -39.192   8.173
 LOCAL(0)        .LOCL.          10 l    5   64   17    0.000    0.000   0.001

3−4.不要なデーモンをストップ

メモリ節約のために、不要なソフトは OS 起動時に立ち上がらないように設定します。

「サービス auditd に関する情報の読み込み中にエラーが発生しました: そのようなファイルやディレクトリはありません」といったエラーとなるものもありますが、インストールされていないだけですので気にしません。

# 不要なデーモンをストップ
chkconfig auditd off
chkconfig autofs off
chkconfig avahi-daemon off
chkconfig bluetooth off
chkconfig cups off
chkconfig firstboot off
chkconfig gpm off
chkconfig haldaemon off
chkconfig hidd off
chkconfig isdn off
chkconfig kudzu off
chkconfig lvm2-monitor off
chkconfig mcstrans off
chkconfig mdmonitor off
chkconfig messagebus off
chkconfig netfs off
chkconfig nfslock off
chkconfig pcscd off
chkconfig portmap off
chkconfig rawdevices off
chkconfig restorecond off
chkconfig rpcgssd off
chkconfig rpcidmapd off
chkconfig smartd off
chkconfig xfs off
chkconfig yum-updatesd off

確認してみます。サービスをオフにする前と比較するとバッサリ減っていて気持ちがいいです。

# 確認
chkconfig --list

 3−5.要らないコンソールを無効

こちらもメモリ節約のための設定です。

# 要らないコンソールを無効
vim /etc/inittab

次のように、5 行をコメントにします。該当箇所は一番下の方にあります。

#2:2345:respawn:/sbin/mingetty tty2
#3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6

無効にすることのメリット、デメリット、意味などなど、全然わかりませんが調べてみますと(本番環境でも)みなさま当たり前のように SELinux を無効化していらっしゃいますので倣って無効にいたします。

# selinuxを無効
vim /etc/sysconfig/selinux

次のように「SELINUX=enforcing」となっている部分を「disabled」とするだけです。

SELINUX=disabled

3−6.再起動

以上でサーバ自体の設定は完了しました。再起動します。

# 再起動
reboot

次の表示後、CentOS から一旦強制的にログアウトします。次からはいよいよ LAMP の導入と設定、確認になります。あと少しですね。楽しみです。

Broadcast message from root (pts/0) (Thu Jan 24 21:56:51 2013):

The system is going down for reboot NOW!
[root@localhost ~]# Connection to 192.168.56.111 closed by remote host.
Connection to 192.168.56.111 closed.

作業を続けるには、再び root でログインします。

※補足

メモリ節約のためにいろいろいじった結果、約 400 MB のメモリが節約できています。嬉しいです。

調べるには free コマンドを使います。

# メモリーの使用状況を表示
# -m容量をMバイト単位で表示する
# -t物理メモリーとスワップ・メモリーの合計も表示する
free -t

いじって設定反映するために再起動する前

             total       used       free     shared    buffers     cached
Mem:        514884     465416      49468          0      65636     307700
-/+ buffers/cache:      92080     422804
Swap:      1048568         88    1048480
Total:     1563452     465504    1097948

再起動後

             total       used       free     shared    buffers     cached
Mem:        514864      70444     444420          0       4768      29092
-/+ buffers/cache:      36584     478280
Swap:      1048568          0    1048568
Total:     1563432      70444    1492988

4.VirtualBox 開発環境構築 LAMP編

スクリーンショット 2013-02-09 15.46.49.png

4−1.yum のリポジトリ追加、設定

最新、かどうかはわからないのですが、できるだけ新しい Apache、PHP、MySQL をインストールしたいです。ですが現在のダウンロード元にはありません。多分すっごく安定したバージョンのみを扱うようにしているからなのでしょう。

そこで、ダウンロード元、つまりリポジトリを追加して、必要な時のみそれらのリポジトリを使ってインストールするようにします。

インストールするリポジトリのデータはインストール後には不要になりますので、予めダウンロード先をデータが消えても構わないような場所「/tmp/」とするために移動します。

# yum のリポジトリ追加
# ダウンロードファイルはインストール後に不要となるので、予め作業用の場所に移動
cd /tmp/

ダウンロードするリポジトリは、EPEL、Remi、RPMforge です。

# リポジトリをダウンロード
wget http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm

ダウンロードしたファイルを使ってインストールします。1行のコマンドでインストールしていますが、ひとつひとつ、3行に分けてももちろん問題ありません。

「rpm -Uvh 」の後ろにダウンロードしたファイル名を入力して実行するだけです。

# リポジトリをインストール
rpm -Uvh epel-release-5-4.noarch.rpm remi-release-5.rpm rpmforge-release-0.5.2-2.el5.rf.i386.rpm

リポジトリの設定ファイルを編集します。yum 実行時にリポジトリを指定しない限り、デフォルトでは無効とするようにします。Remi ははじめから無効で「enabled = 0」となっているはずです。確認だけ、しておくと良いです♪

# リポジトリの設定ファイルを編集して、デフォルトでは無効にする。
# 各ファイルの [epel]、[remi]、[rpmforge] の enabled の値を「0」にする。
vim /etc/yum.repos.d/epel.repo
vim /etc/yum.repos.d/remi.repo
vim /etc/yum.repos.d/rpmforge.repo

リポジトリについては、以前の投稿も参考になるかもしれません。

4−2.LAMP パッケージのインストール・起動設定・起動・確認

いよいよ LAMP です。といっても「L」の「Linux」は導入済みですので、

  • 「A」の「Apache」→ httpd-devel(と追加で https も入れておきたいので mod_ssl )インストール
  • 「M」の「MySQL」 → mysql-server
  • 「P」の「PHP」 → php、php-develphp-mysql(php-mysql は PHP から MySQL を扱うために追加)

をインストールします。少なく見えるものですが、最低限これだけ指定しておけば、実は他にも必要なパッケージがあっても自動でインストールされますので問題ありません。

今回、指定したパッケージは 6 つでしたが、実際にインストールされたのは 44 個にもなりました。

コマンドは次の1行で終わりです。あっけなさすぎです、簡単です♪

# LAMP パッケージのインストール
yum --enablerepo=epel,remi,rpmforge install -y httpd-devel mod_ssl mysql-server php php-devel php-mysql

インストール完了しましたので早速起動します。

# 起動
/etc/init.d/httpd start
/etc/init.d/mysqld start

次回仮想マシンを起動した時に、Apache と MySQL が自動で立ち上がるようにしておきます。PHP は Apache を起動することで自動的に使えるようになりますので設定は不要です。

# 自動起動させる
chkconfig httpd on
chkconfig mysqld on

4−3.Apache の確認

Apache が起動していることをウェブブラウザからアクセスして実際に確かめます。ウェブブラウザに IP アドレスを入力するだけです。ブラウザによっては手動で IP アドレスの前に http:// をつけます。

つまり今回の場合、ウェブブラウザから http://192.168.56.111/ にアクセスします。

Apache 2 Test Page が表示されれば OK です。

4−4.PHP の確認

PHP が動いているかどうかは、テストプログラムを作成して確かめます。Apache をインストールしたことで、/var/www/html/ に置いたファイルにウェブブラウザからアクセスできるようになりましたので、ここに PHP の情報を表示する簡単なプログラムを置きます。

これまた、1行だけです。PHP の中身「<?php phpinfo(); ?>」を /var/www/html/ ディレクトリの phpinfo.php ファイルとして書き出します。

# PHP の設定確認
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

http://192.168.56.111/phpinfo.php にアクセスし、PHP Version から始まるページが表示されれば OK です。

作成したファイルはもう必要ありませんので削除しておきます。

# テストソース削除
rm /var/www/html/phpinfo.php

さて、以上で LAMP 環境が作成できましたので、あとは WordPress をインストールしてみるだけです。

ですがせっかくですので Apache、MySQL、PHP を、本番環境でも使えるような設定に編集したいと思います。といいましてもセキュリティ面やログなどの最低限な設定のみで、その他のパフォーマンスのチューニングなどの項目は設定いたしません。

5.Apache、MySQL、PHP を、本番環境でも使えるような設定に編集

スクリーンショット_2013-02-09_16.54.52.png

5−1.Apache の設定編集

まずはいつでもインストール直後の設定に戻れるように設定ファイルのバックアップを作成します。

# Apache 設定ファイルのバックアップ
cp -a /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org

いよいよ Apache の設定を編集していきます。

# 設定ファイルの編集
vim /etc/httpd/conf/httpd.conf

URL の指定、セキュリティとしてでクライアントに返す情報レベルの設定、その他にファイル一覧表示ページの自動生成禁止と .htaccess の使用を許可するように設定を編集します。

# ServerName に URL(今回は IP アドレスだが本番環境ではドメイン)を設定
ServerName 192.168.56.111:80
# Web サーバにアクセスしたクライアントに返す Apache 情報を最小限に設定
ServerTokens Prod
# エラーページにアクセスしたクライアントに返す情報をオフに設定
ServerSignature Off
# <Directory "/var/www/html"> 設定
# ファイル一覧ページの自動生成禁止
Options -Indexes FollowSymLinks
# .htaccess の使用を許可
AllowOverride All

該当箇所の編集が終わりましたら文法チェックを行います。「Syntax OK」と表示されれば問題ありません。

# 設定ファイルの文法チェック
apachectl configtest

設定を反映させます。Apache の再起動は必要なく、設定ファイルをリロードするだけで OK です。

# リロードして設定ファイルを反映
/etc/init.d/httpd reload

5−2.APACHE の設定編集の確認

Apache 設定を変更できたかどうか、確認していきます。

1.まずはファイル一覧ページの自動生成禁止を確認します。

そのために、ドキュメントルートにディレクトリ「test」を作成し、空のファイル「1.txt」「2.txt」を作成しておきます。

mkdir -p /var/www/html/test/
touch /var/www/html/test/1.txt
touch /var/www/html/test/2.txt

では確認してみましょう。ウェブブラウザで http://192.168.56.111/test/ にアクセスし、ファイル一覧ページが表示されなければ OK です。代わりに、次のような無慈悲なページが表示されるかと思います。

Forbidden

You don't have permission to access /test/ on this server.

2..htaccess 使用の許可を確認

DirectoryIndex(ウェブブラウザからファイル名を省略してアクセスした場合にどのファイルを返すのかを指定する)を使用して確認していきます。

まずは、現状の確認。http://192.168.56.111/ にアクセスしたら index.html ファイルを返すことを確認します。そのために、index.html と、index.shtml ファイルを作成します。

echo "zuwaisthml" > /var/www/html/index.shtml
echo "zuwai" > /var/www/html/index.html

ウェブブラウザから http://192.168.56.111/ にアクセスし、zuwai が表示されれば OK です。では、.htaccess ファイルを作成し、DirectoryIndex を指定します。

echo "DirectoryIndex index.shtml" > /var/www/html/.htaccess

同じようにアクセスしてみて zuwaisthml が表示されれば .htaccess が使える状態となっています。

3.確認 Web サーバにアクセスしたクライアントに返す Apache 情報を最小限に設定 & 確認 エラーページにアクセスしたクライアントに返す情報をオフに設定

上記 2 つを確認するために、存在しないページ、たとえば http://192.168.56.111/9 等にアクセスしてみます。次のような非常にアッサリした画面が返ってこれば OK です。

Not Found

The requested URL /9 was not found on this server.

4.確認用ファイルの削除

以上で Apache 設定ファイル編集の確認が完了しました。今まで確認用に作成したディレクトリ、ファイルを削除します。

rm -rf /var/www/html/*

確認は正直面倒ですけれども、確実に自身が手を加えた箇所の設定が思い通りに反映されているかがハッキリしますので、絶対に確かめたほうが良いです。

自信へとつながりますしね♪

5−3.PHP の設定編集

まずは PHP 設定ファイルをバックアップします。

# PHP 設定ファイルをバックアップ
cp -a /etc/php.ini /etc/php.ini.org

では PHP 設定ファイルを編集します。

vim /etc/php.ini

次の内容で修正します。セキュリティとログ、タイムゾーンに文字エンコーディングです。なお、インストール時点で mbstring を入れておりませんので mbstring の設定は実は無意味です。

# [PHP]
# 応答ヘッダーにPHPのバージョン等を出力しない
expose_php = Off
# ログレベル。本番環境では E_ALL とする
error_reporting = E_ALL | E_STRICT
# ブラウザでのエラー表示。本番環境では Off とする
display_errors = On
# エラーをログに残す
log_errors = On
# 攻撃の内容を詳しく知る為に 4KB 程に設定
log_errors_max_len = 4096
# エラーログ出力先
error_log = "/var/log/php_errors.log"
# 文字エンコーディング
default_charset = "UTF-8"
# [Date]
# タイムゾーン
date.timezone = "Asia/Tokyo"
# [mbstring]
# デフォルト言語
mbstring.language = Japanese
# 内部文字エンコーディング
mbstring.internal_encoding = UTF-8
# HTTP入力文字エンコーディングのデフォルト
mbstring.http_input = auto
# 文字エンコーディング検出順序のデフォルト
mbstring.detect_order = auto

エラーを残すログを作成します。予め作っておかないと、設定したファイルに書き込んでくれません。/var/log/ ディレクトリ所有者・グロープが root だからでしょうか?いつか調べるたら面白そうです。

# ログ用の空ファイルを作成
touch /var/log/php_errors.log
# Apache が書き込めるように所有者・グループを変更
chown apache:apache /var/log/php_errors.log

php.ini ファイル編集の反映は、Apache のリロードをすることで行えます。

# リロードして設定ファイルを反映
/etc/init.d/httpd reload

PHP エラーログにつきましては次の投稿も参考になるかと思います。

5−4.PHP の設定確認

ウェブブラウザから phpinfo() 関数の出力内容を見ることで確認しましょう。

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

http://192.168.56.111/phpinfo.php にアクセスして、設定情報を実際に確かめます。

OK でしたら、テストソースを削除しましょう。

rm /var/www/html/phpinfo.php

5−5.mysql の設定

はじめて MySQL にアクセスする前に、次のスクリプトを実行することをおすすめします。

# MySQL セキュアインストールスクリプトを実行
/usr/bin/mysql_secure_installation

root ユーザのパスワード設定と、わたくしは余分と感じましたテストユーザ・データベースの削除、リモートからの root ユーザアクセスを拒否、と基本的なことを設定出来ます。

最初は root のパスワードは設定されていないので、現在のパスワードはなにも入力せずに enter キーを押します。

あとは [Y/n] で尋ねられる質問はすべて y とすれば OK です。ちなみに、大文字の「Y」とする必要はありません。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

続いて、MySQL の設定ファイルを編集します。まずはバックアップをとります。

# MySQL の設定ファイルをバックアップ
cp -a /etc/my.cnf /etc/my.cnf.org

では、MySQL の設定ファイルを編集します。

# /etc/my.cnf を編集
vim /etc/my.cnf

内容は文字セットを設定しているだけです。一箇所だけ character-set-server で、他は default-character-set で文字セットを設定しますのでここは要注意です。

# [mysqld] ブロックに次を追加
character-set-server=utf8
# 次を末尾に追加
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

セキュアインストールスクリプトと設定ファルの編集で準備完了です。

# mysql 再起動
/etc/init.d/mysqld restart

5−6.MySQL の設定確認

MySQL にログインして文字コードを確認します。まずはログインです。

# MySQL ログイン
mysql -u root -p

次のように表示されればログイン完了です。コマンド打つところの左側が「[root@localhost ~]# 」というような形式から「mysql> 」へと変わります。

Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.29 MySQL Community Server (GPL) by Remi

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

では文字セットが utf8 となっているかどうかを確認します。

# MySQL のステータス確認
status

次のように、Server、Db、Client、Conn、の characterset が utf8 となっていれば OK です。

--------------
mysql  Ver 14.14 Distrib 5.5.29, for Linux (i686) using readline 5.1

Connection id:		2
Current database:	
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.5.29 MySQL Community Server (GPL) by Remi
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:			5 min 37 sec

Threads: 1  Questions: 4  Slow queries: 0  Opens: 33  Flush tables: 1  Open tables: 26  Queries per second avg: 0.011
--------------

確認できましたら、MySQL からログアウトします。

mysql> exit

次が最後です♪WordPress をインストールして、動くことを確認します!

6.WordPress をインストールして LAMP 環境確認を行う

スクリーンショット 2013-02-09 17.19.59.png

WordPress のインストールは以前執筆いたしましたこちらの投稿も参考になるかと思います。

まずは作業場所に移動して、最新の WordPress をダウンロードします。

# 作業場所へ移動
cd /tmp
# 最新の日本語 WordPress を入手
wget http://ja.wordpress.org/latest-ja.zip

WordPress を解凍、ドキュメントルートに配置、所有者・グループの設定をします。

# 解凍
unzip -q latest-ja.zip
# フォルダをリネーム
mv /tmp/wordpress/ /tmp/html/
# フォルダを移動
rm -rf /var/www/html/
mv /tmp/html/ /var/www/
# 所有者・グループを Apache 実行ユーザである apache に設定します。
chown -R apache:apache /var/www/html/

設定ファイルのひな形をコピーして設定ファイルを作成します。そして編集します。

# 設定ファイルを編集
cp -a /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
vim /var/www/html/wp-config.php

MySQL 設定、認証用ユニークキーの設定をします。追加でリビジョン数、自動保存間隔、SSL ログインの強制も設定します。

今回は手間を省いて MySQL 設定はこのままとします。もちろん本番環境では必ず変更します。また、認証用ユニークキーの設定はファイルに書かれている URL にアクセスして表示されるテキストを上書きペーストすれば OK です。

そして追加の設定はできるだけ末尾に追加したいと思いますので、次の場所の上に追加します。

  • /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */

追加内容は次となります。

/** リビジョン数を設定 */
define('WP_POST_REVISIONS', 3);
/** 自動保存間隔(秒)を設定 */
define('AUTOSAVE_INTERVAL', 300);
/** SSL ログインを強制する*/
define('FORCE_SSL_LOGIN', true);

root ユーザで MySQL にログインして WordPress 用データベースを作成します。

# DB、ユーザ、パスワードの作成・設定
# MySQL へログイン
mysql -u root -p

データベース名は database_name_here、ユーザ名は username_here、パスワードは password_here です。

# DB、ユーザ、パスワードの作成・設定
GRANT ALL PRIVILEGES ON database_name_here.* TO username_here@localhost IDENTIFIED BY 'password_here';
FLUSH PRIVILEGES;
CREATE DATABASE database_name_here CHARACTER SET utf8;

確認します。

# データベースの一覧表示
show databases;
# ユーザの確認(パスワードは異なるテキストで表示されます)
select user, host, password from mysql.user;

ターミナルからの作業は異常です。ドキュメントルートに WordPress を配置したので http://192.168.56.111/wp-admin/install.php にアクセスしてブログ管理者ユーザを作成してブラウザからインストールを進めて完了させます♪

これで、完了です!!!!!!はい、疲れました。へへへ。

参考ページ

CentOS インストール後の環境に LAMP を構築するのは今までもできていたのですが、仮想マシンに Linux をインストールし、ssh 接続やウェブブラウザからアクセスする方法に非常に苦労しました。手順をメモする前にも試しては諦め、放置して、そしてまた、、、という期間も合わせますとここまでくるのに数年間たってしまいました。

ようやくここまで来ました。

何度目かの挑戦でできるようになりました。先人のみなさまの記録には本当に助けられました。感謝いたします。

VirtualBox に CentOS5 をインストールしてからホストオンリーアダプタを設定して仮想マシンに IP アドレスを割り当てるときに「VirtualBox centos5 ターミナル」で Google 検索しました。次のページが大変参考になりました。特に、ホスト OS(Mac)から VirtualBox(CentOS)へ ssh 接続するときには勇気づけられました。ありがとうございます♪

ifcfg-eth0 を意識し始めたら急に道が開けるようになってきました♪「virtualbox centos ifcfg-eth0」で検索しましたら答えとなるサイトがたくさん出てきたのを思い出します!

これで MAC アドレスと HWADDR が対応していることに気が付きました!さらに、アダプタ 1 を ifcfg-eth0 に、アダプタ 2 を ifcfg-eth1 に対応させるということが分かりました!これは大きな一歩となりました!ありがとうございます♪

インターネット(外部)、Mac(自分のパソコン)、ローカル開発環境(VirtualBox の仮想マシン)間の通信設定が種類別にとてもわかりやすく解説されています!なぜ最初から NAT が設定されているのか?、加えてホストオンリーアダプターをなぜ追加するのか?このページを読んでわかりました!ありがとうございます♪

CentOS をインストールし、ssh 接続してからの作業はやっぱり次のページが大きな助けになりました。また、自分自身の過去の投稿も iptables を見直す助けになりました。記録を残すのは大事ですね。ありがとうございます♪

ntp の設定参考ページです。設定ファイルが結構難しいので、大変参考になりました。ポイントが分かってしまえばやっぱり難しくなくなりますね、ありがとうございます♪

最後の最後に、ローカル VPS を立てるさまざまなメリット

  • 本物の Linux 環境でいろいろ試せます。
  • わたくしたちのブログ、https://oki2a24.com とほぼ同じ環境を作れます。
  • 練習出来ます、ぶっつけ本番で不安にかられながら本番環境のサーバを弄る必要はないのです。
  • 壊しても大丈夫、笑って済ませられます。誰にも迷惑をかけず、しかもいくらでも変なことやっても、乗り越えることでわたくしの力にすることができます。
  • VirtualBox の仮想マシンで身につけた力はそのまま本番環境に活かすことができます。
  • Linux の細かな設定にまで手を伸ばすことができます。うまく行った設定は本番環境に使いましょうよ。
  • 効率よく勉強が進みます♪

語弊を恐れずに申し上げれば XAMPP、MAMP ですと、HTML、CSS、JavaScript、SQL、PHP を使ってつくり上げるソース、プログラムにしか集中出来ませんでした。XAMPP などではそこが逆にメリットかもしれません。

本投稿でローカルな VPS を立てるには、なれるまでは XAMPP よりもずっと、時間がかかります。しかしより多くのメリットがあると、思うのです。

以上です。

「【VirtualBox】◆Mac◆★LAMP★ローカル開発環境構築【WordPress】」への3件の返信

コメントを残す