tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

centos×apache×php×mongoを爆速でためしてみる(centos 5.11、apache 2.2.3、php 5.3、mongodb 2.6.5)

はじめに

これといった特質したトピックスはないですが、
とりあえず動けばいいので爆速でいれてみたっていう流れをメモ。
爆速ってわりには途中で入れ直したりしてますけどw

ながれ

  1. 環境確認
  2. apacheインストール
  3. phpインストール
  4. phpアップデート
  5. pearインストール
  6. mongodbインストール
  7. php × mongodbってみる

1. 環境確認

ふるいw

※ osのバージョン確認
# cat /etc/redhat-release 
CentOS release 5.11 (Final)

※ 32bitか64bitか確認
※ -> i386なので32bit
# uname -a
Linux godev.local 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux

※ 念のため。。
# php -v
-bash: php: command not found

2. apacheインストール

# sudo yum -y install httpd

※ 設定を2カ所だけ変更
# sudo /etc/httpd/conf/httpd.conf
---- vi追記/編集 ----
DirectoryIndex index.html index.htm index.cgi
↓
DirectoryIndex index.html index.htm index.cgi index.php ←index.phpを追加、index.phpを許可する

#AddEncoding x-compress .Z
#AddEncoding x-gzip .gz .tgz
↓ 2行コメント外して3行目(phpのとこ)追加
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
AddType application/x-httpd-php .php ※ .phpファイルを使えるようにする
--------------------

3. phpインストール

こちらも手抜きしていれたからか古いものに。。。汗

# yum -y install php

# php -v
PHP 5.1.6 (cli) (built: Nov 29 2010 16:47:37)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

※ 以下の感じで設定変更
※  ・無いものは追加
※  ・あるものは値を変更
※  ・コメントされてれば外す(値も変える)
# sudo vi /etc/php.ini
---- vi編集 ----
short_open_tag = On # short_open_tag有効

expose_php = Off # バージョンを隠す

max_execution_time = 300 # スクリプト実行時間

error_reporting  =  E_ALL & ~E_NOTICE # 出力するエラーの種類

magic_quotes_gpc = Off # エスケープ処理

default_charset = "UTF-8" # デフォルト文字コード

post_max_size = 20M # 最大POSTアップロードサイズ

upload_max_filesize = 20M # 最大アップロードサイズ

date.timezone = Asia/Tokyo # タイムゾーン指定

mbstring.language = Japanese # デフォルト言語

mbstring.internal_encoding = UTF-8 # 内部文字エンコーディングのデフォルト値

mbstring.http_input = UTF-8 # HTTP入力文字エンコーディング

mbstring.http_output = pass # HTTP出力文字エンコーディング

mbstring.encoding_translation = On # 内部文字エンコーディングの有効・無効

mbstring.detect_order = auto # 文字コード検出のデフォルト値

mbstring.substitute_character = none; # 無効な文字を代替する文字を定義
---------------
確認1

取り急ぎの確認

# sudo /etc/init.d/httpd start

# sudo vi /var/www/html/index.php
---- vi追記 ----
<?php
phpinfo();
?>
---------------

# apachectl -v
Server version: Apache/2.2.3
Server built:   Sep 16 2014 11:29:05

アドレス欄にhttp://localhost/index.phpとか打って確認。大丈夫そう。

確認2

ついでに後でmongodb接続とかjsonとか使いたいので
json_encodeだけやってみる

# sudo vi /var/www/html/index.php
---- vi追記 ----
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
---------------

アドレス欄にhttp://localhost/index.phpとか打って確認。ダメ。。。
errorlogにはこんな感じで表示される

[Fri Oct 17 11:55:36 2014] [error] [client 192.168.239.1] PHP Fatal error: Call to undefined function json_encode() in /var/www/html/index.php on line 6

json_encodeの説明ページを見ると思いっきりこんな感じで書いてある
http://php.net/manual/ja/function.json-encode.php

(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_encode — 値を JSON 形式にして返す

ってことでいきなしphpを5.2以上に入れ替える(_ _ ;)m

4. phpアップデート

気を取り直してアップデート。今回はなるはやで動けばいいだけなのでバージョンはそんなに気にしない。

※ まずはとにかく消す
# sudo yum erase php

※ 残骸がいるか確認(phpxxとかとにかく何か表示されるなら残骸がいる)
# sudo rpm -qa | grep php

※ 残骸含めてとにかく消す
# yum erase php*

※ インストールできそうなphpを探す
# yum list | grep php | less

※ php53があったのでそれをインストールすることに
# yum install --enablerepo=remi,epel,ius php53

※ 確認
# php -v
PHP 5.3.3 (cli) (built: Sep 30 2014 06:37:34) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

こちらが参考になりました
yumコマンドで外部リポジトリを指定して、最新のPHPにバージョンアップ

5. pearインストール

あとでpearで何か入れたくなることは必須なのでいれる。
今回はmongodb接続で使うってわかってるのでそのためにも。

最初pearいれようとしたら5.1.6となんちゃらって言われて怒られた(エラー内容うる覚え) ので yum updateupdate dbしといたほうがいい。したら動いた。

# sudo yum updat

# sudo updatedb

※ pearインストール
# sudo yum install php-pear

※ PHP用mongoモジュールをインストール
# sudo pecl install mongo 

※ php.ini追記
# vi /etc/php.ini
---- vi追記 ----
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extension=json.so
extension=mongo.so
---------------

# sudo /etc/init.d/httpd restart

こちらが参考になりました。こちらのPHPから使えるようにするを参考にしてます
MongoDBインストール ~ PHPで使うまで

6. mongodbインストール

こちらは以前の記事の手順まんまなので特に説明なくコマンドだけ羅列
mongodb入れてみるテスト(ダウンロード~web console~認証まで)

# pwd
/usr/local/src

※ あらかじめcUrlとかwgetでダウンロードしておく
# ls -al
-rw-r--r--  1 hoge hoge 114816896 10月 16 14:22 mongodb-linux-i686-2.6.5.tgz

# 解凍したりディレクトリ作ったり
# sudo cp mongodb-linux-i686-2.6.5.tgz /usr/local
# cd /usr/local
# sudo tar xvfz mongodb-linux-i686-2.6.5.tgz
# sudo rm mongodb-linux-i686-2.6.5.tgz 
# sudo ln -s mongodb-linux-i686-2.6.5 mongodb
# sudo mkdir -p /usr/local/mongodb/logs
# sudo mkdir -p /usr/local/mongodb/data/db

※ 起動して終わり
# sudo /usr/local/mongodb/bin/mongod --logpath /usr/local/mongodb/logs/mongodb.log --fork --logappend --dbpath /usr/local/mongodb/data/db --profile 1 --slowms 100 --quiet --rest

認証やらrest apiの対応もこのへんみてください
mongodbでREST APIを使ってみる - RESTを有効にする、iptables変更、使ってみる、まで
MongoDBインストール ~ PHPで使うまで

7. php × mongodbってみる

ってことで使ってみるだけなので、デフォルトのまま/var/www/html/index.phpに書いてためします

mongoに適当にデータつっこむ

restも有効にしてあるのでcUrlでつっこみます。こんな感じ
今回はvmwarecentosに対してやったのでvmwareのipを指定します

# curl -d '{name : "hoge01", "message" : "ore ha hoge"}' 'http://192.168.230.110:28017/hogedb/message/';
# curl -d '{name : "hoge21", "message" : "ore ha hoge"}' 'http://192.168.230.110:28017/hogedb/message/';
# curl -d '{name : "hoge33", "message" : "ore ha hoge"}' 'http://192.168.230.110:28017/hogedb/message/';
# curl -d '{name : "hoge444", "message" : "ore ha hoge"}' 'http://192.168.230.110:28017/hogedb/message/';
# curl -d '{name : "hoge77", "message" : "ore ha hoge"}' 'http://192.168.230.110:28017/hogedb/message/';
php書く
  • /var/www/html/index.php
<?php
// DB接続 : 別サーバの場合は"exsample.com:port番号"で指定
$mongo = new Mongo("localhost");

// データベース指定
$db = $mongo->selectDB( "hogedb" );

// コレクション指定
$col = $db->selectCollection( "message" );

// make where
$where = array('name' => new MongoRegex("/33/"));

// get document
$docs = $col->find($where);

// MongoCursorなのでarrayに変換してdump
var_dump(iterator_to_array($docs));
確認

確認って項目作るほどでもないですが、
ブラウザで確認してこんな風に表示されてればOK

{"5440718573661f45ddf8d352":{"_id":{"$id":"5440718573661f45ddf8d352"},"name":"hoge33","message":"ore ha hoge"}}

まとめ

自分用メモな上にあとから思い出しながら書いたので抜けたりあるかもしれません汗
とはいえ何となくで動かしてみたいときの参考になれば程度の記事でした!