Vagrantに手動でPHP/Apache/MySQLをいれて動かす、基本的なことのメモ。

  • 59
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

「vagrant up」まで出来るようになった素人が、次にやったことです。

最初にPHPとApacheをいれたいのです。

が、その前に入っていないことを確認しておきます。

まずはsshで入っておきます
vagrant ssh
ver確認
php -v
httpd -v

# -bash: php: コマンドが見つかりません
# -bash: mysql: コマンドが見つかりません

まずはPHPを入れてみます。

PHPインストール
sudo yum install php

これをすると、依存関係の解決とかで、Apache(httpd)も入っちゃいます。
PHPインストール完了までにコンソールにこんな画面でてきてます。

PHPインストール中の画面一部
Dependencies Resolved

Installing:
 php
Installing for dependencies:
 apr
 apr-util
 apr-util-ldap
 httpd
 httpd-tools
 mailcap
 php-cli
 php-common

php以外にもいろいろインストールされます。

おわったら、ちゃんとインストールされているか確認してみる。

ver確認
php -v

# PHP 5.3.3 (cli) (built: Oct 30 2014 20:12:53)

httpd -v
# Server version: Apache/2.2.26 (Unix)

# 下の2つはインストール済のパッケージを確認したり。参考までに。
yum list installed 
rpm -qa

Apacheの起動と各種設定

基本的なことメモ
sudo service httpd status # ステータス確認
sudo service httpd start # 起動
sudo service httpd stop # ストップ

Vagrantfileにいくつか書いておく。というか、コメントアウトされている部分を有効にする。

Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.5"
  config.vm.network "forwarded_port", guest: 80, host: 4567
  config.vm.network "private_network", ip: "192.168.33.10"

上はコメントアウトしていない部分だけ、書いてみた。これで、IPにアクセスできるし、localhost:4567にアクセスできる。Apacheを起動した状態で、これらにアクセスすると、「Apache 2 Test Page」に飛ぶ。

ちなみに、/etc/hostsに

/etc/hosts
192.168.33.10   local.hoge.net

と書いておけば、local.hoge.netでアクセスできるようにもなる。

独自ファイルを置いてアクセスしてみる。

場所が知りたい。場所はこちら。

ファイルを置く場所
cd /var/www/html

ここにhoge.phpとか作れば、localhost:4567/hoge.phpでアクセスできる。(echoとか書いてみて調べたのですが、すでにPHPも使える状態になっている。PHPをinstallして、依存関係解決のために一緒にインストールされただけのことはある。)

シンボリックリンク

sudo rm -rf /var/www/html
sudo ln -fs /vagrant /var/www/html

これで、vagrant sshをしなくて、
ホストのVagrantfileがあるディレクトリをrootとして使える。嬉しい。

次に、vagrant upしたタイミングで、自動的にstartするようにしたい。

何もしないと、どういう状況かというと、vagrant haltとか何かしらの理由で、vagarantが止まって、再度vagrant upをした場合。Apacheは起動しない。sudo service httpd statusはstoppedになっている。

これを、vagrant up したら自動でApacheが起動するようにする。

これを実現するには、chkconfigを使って、ランレベルで有効にすれば良いらしい。

ランレベルを調べる
chkconfig --list

chkconfig --list httpd # これでhttpdのランレベルチェック

# httpd             0:off   1:off   2:off   3:off   4:off   5:off   6:off
# デフォルトだと上のようになっている。

これを、以下のコマンドで変更することで成す。

vagrant起動時にhttpdをスタートさせる
chkconfig httpd on 

# 改めてランレベルを確認
chkconfig --list httpd

# httpd             0:off   1:off   2:on    3:on    4:on    5:on    6:off

「ランレベル2、3、4、5、でonになっている。(ま、ランレベルについては、まだよくわからないけどな。)」

これで、一旦haltして再度upして、sshで入って、httpdのステータス確認したら、お、出来てる!

次にMySQLを入れたいのですが。

最初とてもシンプルにやってみる。

install
sudo yum install mysql-server

インストールされているmysql情報を確認

$ rpm -qa | grep mysql

# mysql-libs-5.1.73-3.el6_5.x86_64
# mysql-server-5.1.73-3.el6_5.x86_64
# mysql-5.1.73-3.el6_5.x86_64

5.1なので、ちょっと古い。5.6にしたい。(今のところ5.6がGA。Generally Availability:一般提供)

5.6にアップデートするには、どうするか?

yum updateとかでは、できませんから。以下の手順で行います。

まず削除する
yum remove mysql*

これで、rpm -qaとかすると空になっている。

そしてインストールを行う前に、yumリポジトリを追加する。
http://dev.mysql.com/downloads/repo/yum/
上記から適切なバージョンを選ぶ。
http://dev.mysql.com/downloads/file.php?id=450542
上ページの「No thanks, just start my download.」リンクから行うことで、Sign upとか不要!

ダウンロードする
wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yumリポジトリを追加する
sudo rpm -Uvh mysql-community-release-el6-5.noarch.rpm
インストールする
sudo yum install mysql-community-server

確認しよう

インストールされたか?
rpm -qa | grep mysql 

# mysql-community-libs-5.6.22-2.el6.x86_64
# mysql-community-release-el6-5.noarch
# mysql-community-common-5.6.22-2.el6.x86_64
# mysql-community-client-5.6.22-2.el6.x86_64
# mysql-community-server-5.6.22-2.el6.x86_64

yum list installed | grep mysql # こっちでも確認できるしね。
バージョン確認
mysql --version

# mysql  Ver 14.14 Distrib 5.6.22, for Linux (x86_64) using  EditLine wrapper

「ちゃんと5.6になっている」

ステータス
sudo service mysqld status

# mysqld is stopped

「止まっているね。」

起動する。
sudo service mysql start
サーバー起動時にmysql立つようにしておく
sudo chkconfig mysqld on # これで良い。

chkconfig | grep mysqld # その確認。

# mysqld            0:off   1:off   2:on    3:on    4:on    5:on    6:off

phpファイルからMySQL接続を試みる。

mysql_connect()を使ってみます。

先に流れを整理する

  • エラーになるからphp-mysql入れてみた
  • vagrant内で「php piyo.php」は問題ない
  • ブラウザから/piyo.phpにアクセスすとダメ (Fatal error: Call to undefined function mysql_connect())
  • ということで、mysql.sockを指定する。
  • vagrant reloadしたらおk。

以下のphpファイルを用意。

/vagrant/piyo.php
<?php
    $link = mysql_connect('localhost', 'root', 'root');
    if (!$link) {
        echo mysql_error();
        echo "error";
    } else {
        echo "ok";
    }
?>

サーバー:localhost
ユーザー名:root
パスワード:root
にしています。
これを、Vagrantfileのあるディレクトリに置く。

いったん、vagrant中に入って、/vagrant(piyo.phpのあるディレクトリ)でpiyo.phpを動かして様子をみる。

piyo.phpを動かしてみる。
php piyo.php

# Fatal error:  Call to undefined function mysql_connect() in /vagrant/piyo.php on line 2

エラーになります。これを解決するために、php-mysqlをインストールします。

インストール
sudo yum install php-mysql

# これで、php-mysqlと併せて、php-pdoもインストールされました。

再度php piyo.phpを試すと、今度はこんなエラー。
Warning: mysql_connect(): Access denied for user 'root'@'localhost' (using password: YES)

ユーザー名、パスワードがちがっているとのこと。ということで、
user:'root'
pass:''
に変更。これでいけました。今度はブラウザから、localhost:4567/piyo.phpにアクセス
すると、mysql_connect()以降が動いてない様子。

エラーが表示されないと、分からないので。

piyo.phpに追記
ini_set( 'display_errors', 1 );

再度ブラウザからアクセスしてみると、次のエラーが表示される。
Fatal error: Call to undefined function mysql_connect()

コレを解決するために、php.inimysql.default_socketを指定します。

まずは、mysql.sockの場所を確認。
mysql_config --socket

# /var/lib/mysql/mysql.sock
/etc/php.iniを編集
mysql.default_socket = /var/lib/mysql/mysql.sock

そして、vagrant reloadしておけば大丈夫です。
(Apachの再起動だけで済むかもしれません。)

これで、mysql_connect()が使えるようになりました。

他にも、いくつかインストールしたり、設定したりすること。

php-mbstringとかphp-pearとか、/etc/php.iniの設定とか。。いろいろありそうです。
けど、力つきたので、今日はここ迄にします。