Help us understand the problem. What is going on with this article?

vagrantを用いたPHPの環境構築

More than 3 years have passed since last update.

初めに

この記事は

  • PHPを自宅で動かしたい
  • 開発環境の構築はさっぱり
  • 環境構築に時間をかけたくない
  • vagrantを使ってみたい

という比較的初心者向けになっています。
最終的に、PHPからmysqlを操作し、ブラウザでデータの確認までします。

ステップ1(本記事)→vagrantを用いたPHPの環境構築
ステップ2→centOS6.5にmysql5.6をインストールする
ステップ3→PHPからmysqlの操作

前提条件

  • vagrantインストール済み
  • VirtualBoxインストール済み
  • centOS入手済み

開発環境

  • OS X Yosemite

Windowsでも同じことができると思います(未確認)

※追記
Windows環境で試してみました。
マシンの起動(vagrant up)までは同じ手順になります。
Windowsのコマンドプロンプトはssh接続機能がないため
Tera Term等を利用してcentOSにログインすることになります。
Tera Term等でログインする以外は同じ手順で大丈夫でした。
Tera Termのログインは
ホスト名 => 127.0.0.1
TCPポート => 2222
user => vagrant
password => vagrant
でした。
※追記

1.BOXの追加

まず入手したcentOSをvagrantに追加します。

$ vagrant box add NAME URL

NAME -> 任意の名前
URL -> 入手したcentOSの物理パス
(例)

$ vagrant box add centOS /Users/myPc/centos65-x86_64-20140116.box

2.仮想マシンの作成

次に仮想マシンを作成します。仮想マシンは一つのディレクトリに一つしか作成できません。

$ mkdir DirNAME
$ cd DirNAME
$ vagrant init NAME

DirNAME -> 任意のディレクトリ名
NAME -> vagrantにBOXを追加した時の名前。上記例ではcentOS

(例)

$ mkdir centOSDir
$ cd cnetOSDir
$ vagrant init centOS

ディレクトリの中にVagrantfileというファイルがあれば成功です。

3.ネットワークの設定

次にVagrantfileを編集してネットワークの設定を行います。

$ vi Vagrantfile

大体25行目あたりの

# config.vm.network "private_network", ip: "192.168.33.10"

この行のコメントアウトを外します。

4.仮想マシンの起動

いよいよ仮想マシンの起動です。

$ vagrant up

で起動。

$ vagrant ssh

で仮想マシンにログインできます。

$ exit

で仮想マシンからログアウトできます。
ただし、Vagrantfileがあるディレクトリからでしかログインができません。
そこで、どこからでも仮想マシンにログインできるように設定します。
Vagrantfileがあるディレクトリで以下のコマンドを叩きます。

$ vagrant ssh-config --host NAME >> ~/.ssh/config
$ ssh NAME

NAME -> 任意の名前
これでどこからでも仮想マシンにssh NAMEでログインができます。

(例)

$ vagrant ssh-config --host centOSssh >> ~/.ssh/config
$ ssh centOSssh

5.Apache,PHPのインストール

centOSにログインしたら次にApacheとPHPをインストールします。

$ sudo yum install php
$ sudo yum install httpd

これでインストールできます。

6.ブラウザからのアクセス

次に実際に自身が作ったページにブラウザからアクセスしてみましょう。
Apacheは/var/www/にあるhtmlというディレクトリを見に行きます。
まずはPHPではなくhtmlファイルから。

$ cd /var/www/html
$ sudo vi index.html
index.html
<html>
<body>
Hello World
</body>
</html>

index.htmlを作成したらコメントアウトをした行のipアドレスにブラウザからアクセスします。

# config.vm.network "private_network", ip: "192.168.33.10"

この例だと192.168.33.10にアクセスしましす。
Hello Wolrdと表示されたら成功です。

次にPHPで表示させてみます。まずApacheにPHPを対応させます。

$ sudo vi /etc/httpd/conf/httpd.conf

でhttpd.confを開いてAddTypeタイプで検索してください
自分の場合は760行目あたりにありました。
その下にある

# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

この下に下記2行を追加してください。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

追加した結果は

# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

となります。これで拡張子がPHPのファイルをPHPプログラムとして処理をしてくれます。

ではindex.htmlを作ったディレクトリでPHPファイルを作ってみましょう。

$ sudo vi test.php
test.php
<html>
<body>
<?php
        echo('Hello PHP');
?>
</body>
</html>

そして、先ほどアクセスしたアドレス(自分の例では192.168.33.10)に/test.phpとつけてアクセスしてみましょう。
(例)
192.168.33.10/test.php
Hello PHPと表示されたら成功です。

7.Macとのファイル同期

これで仮想マシン上のファイルにブラウザから見れるようになりましたが、
編集するたび仮想マシンにログインしてはお気に入りのエディタで編集できなかったりして
めんどくさいのでMac上でファイルを同期したいと思います。

といっても特に設定する必要はなく、Mac上のVagrantfileがあるディレクトリにあるファイル
は仮想マシンに自動的に同期されます。仮想マシンの同期先は/vagrantになります。

試しにMac上のVagrantfileがあるディレクトリにsampleという名前のディレクトリを作って、
中にsample.txtを作って同期されるか確認してみましょう。

Vagrantfileがあるディレクトリで

$ mkdir sample
$ cd sample
$ vi sample.txt
sample.txt
サンプル

上記のコマンドを叩いたら、仮想マシンにログインし確認してみましょう。
ログインしたら

$ cd /vagrant
$ ls
$ cd sample
$ cat sample.txt

でsampleディレクトリがあるのを確認し、sample.txtがあるか確認して、サンプルと表示されたら成功です。

8.シンボリックリンクの作成

これで、仮想マシンのファイルをブラウザから見れるようになり、Mac上で編集したファイルを仮想マシンと同期をとることができました。

しかし、仮想マシンのApacheが見にいくディレクトリはは/var/www/htmlですが
同期されるディレクトリは/vagrantです。
せっかく同期されているのにこのままではブラウザから同期したファイルを見れません。
そこでシンボリックリンクを作成して、ブラウザから同期したファイルを見れるようにします。
まず、仮想マシンにログインして/var/www/にあるhtmlディレクトリを削除します。

$ cd /var/www
$ sudo rm -r html

すると

$ rm: remove directory `html'?

と聞かれるのでyesと打ってエンターを押します。

$ rm: remove directory `html'?yes

これでhtmlディレクトリを削除しました。

つぎに/vagrantにhtmlディレクトリを作ります。Mac上でVagrantfileがあるディレクトリでhtmlディレクトリを作成します。

$ mkdir html

これで同期されるため仮想マシンの/vagrantにhtmlディレクトリができました。次にシンボリックリンクを作成します。仮想マシンにログインして

$ sudo ln -s /vagrant/html /var/www/html

これでシンボリックリンクを作成しました。
シンボリックリンクはショートカットのようなもので、Apacheは/var/www/htmlを見にいくと
/var/www/にあるhtmlはシンボリックリンクのため、/vagrantにあるhtmlディレクトリを見にいくように
なります。
つまり、Mac上で編集したファイルは自動で仮想マシンと同期され、ブラウザで見れるようになります。

9.Macで編集したファイルをブラウザで確認

最後にMacでファイルを作成し、自動的に仮想マシンに同期して、ブラウザから確認します。
Mac上でVagrantfileがあるディレクトリに作成したhtmlディレクトリの中にファイルを作成します。

$ vi last.php
last.php
<hmlt>
<body>
<?php
    echo('last php');
?>
</body>
</html>

作成して、test.phpにアクセスしたのと同じようにブラウザからアクセスしてみましょう。
(例)
192.168.33.10/last.php
last phpと表示されたら成功です。

終わりに

これでvagrantを用いたPHPの環境構築は終わりです。
今回は手動で環境構築を行いましたが、chef等を利用して自動で環境構築を行うことも可能です(chefは勉強中)。
次回はcentOSにmysqlをインストールしたいと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away