カテゴリー
コンピューター

VirtualBox で LAMP + PostgreSQL + APC + XDebug + PHPUnit の開発環境構築手順♪

前提

  • CentOS 5.9 インストール済み
  • CUI で SSH 接続可能
  • CentOS に IP アドレス割り振り済み

つまり、VPS 契約した直後のような状態です。

インストールして最低限の設定をするパッケージ

  • Apache
  • PHP
    • APC
    • XDebug
    • PHPUnit
  • MySQL
  • PostgreSQL

LAMP + PostgreSQL → LAMPP!と思っていのですけれども、別の構成ですでにこのような名前がありました><。ぜんぶまとめて強引に略称にすれば、、、LAMPPPAX (らんぷぷぱっくす)でしょうか♪

それはともかく、開発環境ですので SQL サーバーとして MySQL に加え、PostgreSQL をインストールします。

はじめるまえに

わたくしは今回の手順を行う前に時刻同期やメモリ節約として次のことを行なっています。

それでは、はじめます。

1.Apache、MySQL、PHP、PostgreSQL、APC、XDebug、PHPUnit インストール

まずはリポジトリを導入して最新版をインストールできるようにします。

# 作業場所として一時ファイルを保存するディレクトリに移動
cd /tmp/
# リポジトリ導入。ダウンロード。
wget http://ftp.tsukuba.wide.ad.jp/Linux/fedora/epel/5/i386/epel-release-5-4.noarch.rpm
wget http://yum.postgresql.org/9.2/redhat/rhel-5-i386/pgdg-centos92-9.2-6.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
rpm -Uvh epel-release-5-4.noarch.rpm pgdg-centos92-9.2-6.noarch.rpm remi-release-5.rpm rpmforge-release-0.5.2-2.el5.rf.i386.rpm

今回は開発環境ですのでリポジトリは常に有効にします。逆に本番環境では無効、つまり「enabled=0」としています。

# リポジトリ導入。今回は全て「enabled=1」とする。
vim /etc/yum.repos.d/epel.repo
vim /etc/yum.repos.d/pgdg-92-centos.repo
vim /etc/yum.repos.d/remi.repo
vim /etc/yum.repos.d/rpmforge.repo

Apache、MySQL、PHP、PostgreSQL をインストールします。

同時に、PHP のモジュールとして php-gd(図表を扱う)、php-mbstring(日本語(マルチバイト文字)を扱う)、php-mcrypt(暗号化を扱う)、php-soap(PHPUnit に必要(本来は「SOAPサーバーおよびクライアントを書くために使用する」とのこと))、php-xml(PHPUnit に必要(本来は「Web における構造化された ドキュメント交換用のデータフォーマット」とのこと))をインストルします。

さらに、PHP の拡張機能として APC、XDebug、PHPUnit もインストールします。

# LAMP + PostgreSAQL + APC + XDebug + PHPUnit インストール
yum install httpd mod_ssl mysql-server php php-devel php-gd php-mbstring php-mcrypt php-mysql php-pecl-apc php-pecl-xdebug php-pgsql postgresql92-server php-soap php-xml

# PHPUnit インストール
# その前にコマンドラインあるいは依存性情報から、 新規チャネルを自動的に探す
pear config-set auto_discover 1
pear install --alldeps pear.phpunit.de/PHPUnit

# 自動起動設定・確認
chkconfig httpd on
chkconfig mysqld on
chkconfig postgresql-9.2 on
chkconfig --list | grep httpd
chkconfig --list | grep mysqld
chkconfig --list | grep postgresql-9.2

また、以前インストールに際し、調べたことや困難に遭遇したことなどをリンクしておきます。

2.Apache と PHP 設定

2−1・まずは準備てきなものでございます

ウェブブラウザから CentOS の IP アドレスへアクセスしてもうまくいきません。「iptables -nL」などで確認してみますと、ポートが 22 以外、開いておりませんでした。デフォルトではなにも設定してないと思ったのですが、CentOS 5.9 でははじめからある程度設定されているのですね。現在の設定に、http(ポート 80)、https(ポート 443)の INPUT も受け入れるよう設定します。

# iptables でポートhttp(80)、https(443) の INPUT を許可
vim /etc/sysconfig/iptables

「COMIMT」前の 2 行を追加し、次のようになりました。

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*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
-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 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# iptables 再起動して設定変更を反映
/etc/init.d/iptables restart
# Apache を起動し、ウェブブラウザからアクセスできることを確認しておく
/etc/init.d/httpd start

2−2.Apache 設定ファイルを編集します

# Apache 設定ファイル編集
cp -ap /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
vim /etc/httpd/conf/httpd.conf

次の 5 箇所になります。

ServerTokens Prod

今回 CentOS 5.9 に割り振った IP アドレス「192.168.56.112」を設定します。

ServerName 192.168.56.112:80

次のはじめの 2 つは <Directory “/var/www/html”> 〜 </Directory> の設定を変更しています。

Options -Indexes FollowSymLinks
AllowOverride All
ServerSignature Off

各設定の意味はこちらをご参照ください♪

# 文法確認そして再起動し、ウェブブラウザからアクセスして確認
apachectl configtest
/etc/init.d/httpd start

2−3.そして PHP 設定ファイル編集

# PHP 設定ファイル編集
cp -a /etc/php.ini /etc/php.ini.org
vim /etc/php.ini

[PHP] ディレクティブ

expose_php = Off

[PHP] ディレクティブでエラー関係

error_reporting = E_ALL | E_STRICT
display_errors = On
log_errors_max_len = 4096
error_log = "/var/log/php_errors.log"

[PHP] ディレクティブで文字コード関係

default_charset = "UTF-8"

[Date] ディレクティブ

date.timezone = "Asia/Tokyo"

[mbstring] ディレクティブ

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.detect_order = auto

これらの設定については以前の投稿で調べたことを元にしております。

続いて、php.ini で設定したエラーログファイルを作成、パーミッション設定します。さらに、その PHP エラーログファイルのローテーション設定を行っておきます。

# PHP エラーログファイル作成、パーミッション設定
touch /var/log/php_errors.log
chown apache:apache /var/log/php_errors.log
# PHP エラーログファイルのローテート設定(Apache の設定をもとに)
cp -ap /etc/logrotate.d/httpd /etc/logrotate.d/php
vim /etc/logrotate.d/php

ローテート設定は Apache の設定ファイルをコピーしてそのまま使用します。ですので変更するのは対象設定ファイルを指定する 1 行目のみです。

/var/log/php_errors.log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

エラーログファイルを予め作成しなけれならないとわかった顛末、logrotate の各パラメーターの詳細、その設定を決めることについて、以前調べましたのでよろしければ御覧ください。

これで完了♪ Apache を再起動して、ウェブブラウザからアクセスできることを確認しておきます。

/etc/init.d/httpd restart

3.MySQL 設定

まずは起動して、初期化します。

# MySQL 起動
/etc/init.d/mysqld start
# MySQL セキュアインストールスクリプトを実行( [Y/n] で尋ねられる質問はすべて y)
/usr/bin/mysql_secure_installation

設定を編集します。

# MySQL の設定ファイル編集
cp -a /etc/my.cnf /etc/my.cnf.org
vim /etc/my.cnf

[mysqld] ディレクティブ

character-set-server=utf8

次の 3 つのディレクティブを追加

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8

再起動して設定を反映させます。

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

4.PostgreSQL 設定

初期化します。そして認証の設定をします。psql でプロンプトを使うためには、パスワードによる認証を必要とするようにします。

# PostgreSQL 初期化
/etc/init.d/postgresql-9.2 initdb
# PostgreSQL 起動
/etc/init.d/postgresql-9.2 start
# PostgreSQL 認証設定
cp -ap /var/lib/pgsql/9.2/data/pg_hba.conf /var/lib/pgsql/9.2/data/pg_hba.conf.org
vim /var/lib/pgsql/9.2/data/pg_hba.conf

3 行の末尾を修正します。

# "local" is for Unix domain socket connections only
local   all             all                                     md5 
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5 
# IPv6 local connections:
host    all             all             ::1/128                 md5

別の設定ファイルを修正して、パスワード設定時は暗号化するようにします。

# PostgreSQL ユーザのパスワード設定時の暗号化設定
cp -ap /var/lib/pgsql/9.2/data/postgresql.conf /var/lib/pgsql/9.2/data/postgresql.conf.org
vim /var/lib/pgsql/9.2/data/postgresql.conf

コメントを外します。

password_encryption = on

再起動して設定を有効にする前に、スーパーユーザーのパスワードを設定しておきます。

# スーパーユーザーのパスワード設定
su - postgres
psql
ALTER USER postgres encrypted password 'super-user-password';

再起動して認証設定を反映、有効にします。

# PostgreSQL を再起動し、設定を反映
/etc/init.d/postgresql-9.2 restart

これも、以前おこなった試みをベースとしております。

おわりに

おまけです。Apache、MySQL、PHP、PostgreSQL、APC、XDebug、PHPUnit のインストールで導入されたものの一覧です。依存の関係で、こんなにもたくさんのパッケージがインストールされるのですね!

Installed:
  httpd.i386 0:2.2.3-76.el5.centos                  mod_ssl.i386 1:2.2.3-76.el5.centos       
  mysql-server.i386 0:5.5.30-1.el5.remi             php.i386 0:5.4.14-1.el5.remi              
  php-devel.i386 0:5.4.14-1.el5.remi                php-gd.i386 0:5.4.14-1.el5.remi          
  php-mbstring.i386 0:5.4.14-1.el5.remi             php-mcrypt.i386 0:5.4.14-1.el5.remi      
  php-mysql.i386 0:5.4.14-1.el5.remi                php-pecl-apc.i386 0:3.1.14-1.el5.remi    
  php-pecl-xdebug.i386 0:2.2.2-1.el5.remi           php-pgsql.i386 0:5.4.14-1.el5.remi       
  php-soap.i386 0:5.4.14-1.el5.remi                 php-xml.i386 0:5.4.14-1.el5.remi         
  postgresql92-server.i386 0:9.2.4-1PGDG.rhel5    

Dependency Installed:
  apr.i386 0:1.2.7-11.el5_6.5                      apr-util.i386 0:1.2.7-11.el5_5.2            
  autoconf.noarch 0:2.59-12                        automake.noarch 0:1.9.6-2.3.el5            
  distcache.i386 0:1.4.5-14.1                      gmp.i386 0:4.1.4-10.el5                     
  imake.i386 0:1.0.2-3                             libXaw.i386 0:1.0.2-8.1                     
  libXmu.i386 0:1.0.2-5                            libXpm.i386 0:3.5.5-3                       
  libXt.i386 0:1.0.2-3.2.el5                       libcurl.i386 0:7.21.7-5.el5.remi.2          
  libedit.i386 0:20090923-3.0_1.el5.rf             libmcrypt.i386 0:2.5.8-4.el5.centos        
  libssh2.i386 0:1.2.9-1.el5.rf                    libtool-ltdl.i386 0:1.5.22-7.el5_4          
  libxslt.i386 0:1.1.17-4.el5_8.3                  mysql.i386 0:5.5.30-1.el5.remi              
  mysql-libs.i386 0:5.5.30-1.el5.remi              mysqlclient15.i386 0:5.0.67-1.el5.remi     
  perl-DBD-MySQL.i386 0:3.0007-2.el5               perl-DBI.i386 0:1.52-2.el5                  
  php-cli.i386 0:5.4.14-1.el5.remi                 php-common.i386 0:5.4.14-1.el5.remi        
  php-pdo.i386 0:5.4.14-1.el5.remi                 php-pear.noarch 1:1.9.4-12.el5.remi.1      
  postgresql-libs.i386 0:8.1.23-6.el5_8            postgresql92.i386 0:9.2.4-1PGDG.rhel5      
  postgresql92-libs.i386 0:9.2.4-1PGDG.rhel5       t1lib.i386 0:5.1.2-1.el5.rf                 

Complete!

以上です。

「VirtualBox で LAMP + PostgreSQL + APC + XDebug + PHPUnit の開発環境構築手順♪」への2件の返信

コメントを残す