2007/06/24

1サーバに、PHP5とPHP4の環境を構築する

ポスト @ 9:35:41 | Linux,PHP,Apache,MySQL,Ubuntu

社内勉強会で、話した内容をまとめてみました。

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
    
  • ユーザとグループをapache2.2と同じにする
  • User nobody → User www-data
    Group #-   → Group www-data
    
  • phpを動かせるように、以下の行を追加
  • AddType application/x-httpd-php .php
    
  • index.phpをDirectoryIndexに追加
  • DirectoryIndex index.php index.html index.html.var
    
  • Apache2.0を起動
  • $ 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
となります。

ブックマークに追加する
ファイル共有・管理・受渡システムのWebFile
ファイル共有・管理・受渡システムのWebFile

Trackback

No Trackbacks

Track from Your Website

http://www.key-p.com/ohnishi/trackback/tb.php?id=113
(言及リンクのないトラックバックは無視されます)

Comment

No Comments

Post Your Comment


*は入力必須です。E-Mailは公開されません。