2007/06/24
1サーバに、PHP5とPHP4の環境を構築する
社内勉強会で、話した内容をまとめてみました。
PHP5で作ることが、ようやく出てきたので、各自のローカルの環境に、必要になったのと同時に、今までのメンテナンスをするためにも、PHP4は必須なので、今回は、1サーバにPHP4とPHP5を共存させる方法です。
PHP4と5を入れる以外にも、それぞれのPHPがアクセスするDBをMySQL4.1とMySQL5.0という構成にしています。これは、社内の環境がこのようになっているためです。DBは1つでいいという場合は、ご自身で工夫してください。
環境は、Ubuntu7.04-jaを利用しています。
今回の構成
最終的には、上図のようになります。標準パッケージで、Apache2.2にPHP5、MySQL5.0をインストールします。そして、ソースから、Apache2.0とPHP4、MySQL4.1をインストールします。
この際に、Apache2.0はポートがかぶらないように、8080として、MySQL4.1もポートを3307にすることで、すべての環境が同時に利用できるようにしておきます。
XAMPPのように、簡単に切り替えられるものもありますが、やはりそれも面倒だし、なによりDBの切り替えには対応していないので、今回のような環境を構築します。
また、最終的に、Nameベースのバーチャルホストをつかって、80ポートでリバースプロキシーを使って、PHP4のサーバにもアクセスできるようにします。
PHP5の環境構築
ここは、パッケージを利用しますので、一気にインストールをします。
$ sudo apt-get install apache2 \ libapache2-mod-php5 \ php5 \ php5-cli \ php5-common \ php5-dev \ php5-mysql \ mysql-server \ mysql-common
DocumentRootに、index.phpでphpinfo()を設置して、http://server-name/でphpinfo()を確認してください。
PHP4の環境構築
インストール手順は以下のように行います。
- MySQL4.1系のインストール
- Apache2.0系のインストール
- PHP4系のインストール
事前準備
ソースからインストールするに当たり、必要になるパッケージをインストールしておく。
実際には、インストールしながら必要パッケージを探して、インストールしています。
$ sudo apt-get install libncurses5-dev \ g++ \ automake \ flex \ expat
MySQLをインストールするディレクトリの作成
$ sudo mkdir -p /usr/local/mysql/var
mysqlユーザが存在するかどうかを確認しておく
$ cat /etc/passwd | grep mysql
MySQL4.1のインストール
以下のように、行いました。
$ wget http://dev.mysql.com/get/Downloads/MySQL-4.1/mysql-4.1.22.tar.gz/from/http://mirror.mysql-partners-jp.biz/ $ tar zxfv mysql-4.1.22.tar.gz $ cd mysql-4.1.22 $ ./configure \ --prefix=/usr/local/mysql \ --with-charset=utf8 \ --with-extra-charset=all \ --with-mysqld-user=mysql \ --with-tcp-port=3307 $ make $ sudo make install
MySQL4.1の初期設定
初期DBの作成
$ sudo ./scripts/mysql_install_db
権限の変更
$ sudo chown -R mysql. /usr/local/mysql
設定ファイルの設置
本来は、/usr/local/mysql/etc以下に設置すればいいはずなのだが、なぜか、/usr/local/mysql/varを見に行っているので、そちらに設置します。
$ sudo cp support-files/my-medium.cnf /usr/local/mysql/etc/my.cnf
起動スクリプトを準備
$ sudo cp support-files/mysql.server /usr/local/mysql/bin/ $ sudo chmod 755 /usr/local/mysql/bin/mysql.server
起動できる準備が整ったので、以下のように起動します。
なんだか、ちょっと変なメッセージが出ますが、問題なく動作しているようです。
$ sudo /usr/local/mysql/bin/mysql.server start
Apache2.0のインストール
以下のように、一気にインストールしてしまいます。configureオプションは各自お好みで!
$ wget http://www.meisei-u.ac.jp/mirror/apache/dist/httpd/httpd-2.0.59.tar.gz $ tar zxfv httpd-2.0.59.tar.gz $ cd httpd-2.0.59/ $ ./configure \ --prefix=/usr/local/apache2 \ --with-mpm=prefork \ --enable-ssl \ --enable-defaulte=shared \ --enable-rewrite \ --enable-auth-digest $ make $ sudo make install
PHP4のインストール
以下のように、一気にインストールしてしまいます。configureオプションは各自お好みで!
$ wget http://jp2.php.net/get/php-4.4.7.tar.bz2/from/jp.php.net/mirror $ tar jxfv php-4.4.7.tar.bz2 $ cd php-4.4.7/ $ ./configure \ --prefix=/usr/local/php \ --sysconfdir=/usr/local/php/etc \ --with-apxs2=/usr/local/apache2/bin/apxs \ --with-mysql=/usr/local/mysql \ --enable-mbstring \ --enable-mbregex \ --enable-zend-multibyte \ --enable-trans-sid $ make $ sudo make install
Apache2.0の設定
/usr/local/apache2/conf/httpd.confを以下のように変更する。
- Portの変更
Listen 80 → Listen 8080
User nobody → User www-data Group #- → Group www-data
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html index.html.var
$ sudo /usr/local/apache2/bin/apachectl start
DocumentRootに、index.phpでphpinfo()を設置して、http://server-name:8080/でphpinfo()を確認してください。
おまけ
portでの動作確認をするために、/etc/serviceを変更する。
変更箇所は以下の通り。
mysql5 3306/tcp mysql5 3306/udp mysql4 3307/tcp mysql4 3307/udp www(php5) 80/tcp www(php5) 80/udp www(php4) 8080/tcp www(php4) 8080/udp以下のように、あいているポートが確認できるようになります。
$ netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:mysql5 *:* LISTEN tcp 0 0 localhost:mysql4 *:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp6 0 0 *:www(php4) *:* LISTEN tcp6 0 0 *:www(php5) *:* LISTEN tcp6 0 0 *:ssh *:* LISTEN
最終調整
すべてのプログラムが、それぞれのポートで動いているので、最後に、PHP4の方へも、80番ポートでアクセスできるように、リバースProxyを利用して、下記の図のようにアクセスできるようにする。
Apache2.2のリバースプロキシー
Apache2.2のリバースプロキシーを有効にします。
$ sudo a2enmod proxy $ sudo a3enmod proxy_http
標準のmままでは、proxyのアクセスを拒否されているので、/etc/apache2/mods-available/proxy.confの、
Deny from all
をコメントにする。
<IfModule mod_proxy.c>
#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.
ProxyRequests Off
<Proxy *>
Order deny,allow
#Deny from all
#Allow from .your_domain.com
</Proxy>
php4.example.comのリクエストの場合は、php4のApache2.0へ転送するように、設定を行う。
/etc/apache2/sites-available/以下に、php4という以下のファイルを作成する。
<VirtualHost *>
ServerName php4.example.com
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
php4のファイルを有効にするために、以下のコマンドを実行
$ sudo a2ensite php4
最後に、両方のApacheを再起動して完了。
$ sudo /usr/sbin/apache2ctl restart $ sudo /usr/local/apache2/bin/apachectl restart
これで、
- http://php5.example.com/ にアクセスするとPHP5
- http://php4.example.com/ にアクセスするとPHP4
Trackback
No Trackbacks
Track from Your Website
http://www.key-p.com/ohnishi/trackback/tb.php?id=113
(言及リンクのないトラックバックは無視されます)


Comment
No Comments