読者です 読者をやめる 読者になる 読者になる

もなかアイスの試食品

「とりあえずやってみたい」そんな気持ちが先走りすぎて挫折が多い私のメモ書きみたいなものです.

複数人のPHP開発環境の構築【後編】

Linux

前回の記事の続きです。monakaice88.hatenablog.com


環境
CentOS 6.6
PHP 5.3.3



開発環境構築手順

  1. SElinuxの無効化(開発用だもん仕方ないね)
  2. ユーザの作成(開発者数分)
  3. SSH使用ユーザの設定(ファイルの転送で使用)
  4. ポート解放(80番、PHPインストール確認用)
  5. httpd設定
  6. PHPのインストール
  7. 複数httpd起動の設定 <-----------------------------------今回はここから
  8. ポート解放(開発用サイト分)
  9. XDebugのインストール・設定



複数httpd起動の設定

開発者用の設定ファイルを作ります。(今回はuser1、user2)
「/etc/httpd/conf」に設定ファイル「httpd.conf」を開発者それぞれの分を用意します。

[root@localhost ~]# cd /etc/httpd/conf
[root@localhost conf]# cp httpd.conf httpd_user1.conf
[root@localhost conf]# cp httpd.conf httpd_user2.conf

user1用の設定ファイル(/etc/httpd/conf/httpd_user1.conf)を以下のように編集します。

# 65行目
PidFile run/httpd.pid
↓
PidFile run/httpd_user1.pid

# 136行目
Listen 80
↓
Listen 81

# 242行目
User apache
Group apache
↓
User user1
Group user1

# 276行目(確認)
ServerName localhost

# 292行目
DocumentRoot "/var/www/html"
↓
DocumentRoot "/home/user1/www/html"

# 317行目
&lt;Directory "/var/www/html">
↓
&lt;Directory "/home/user1/www/html">

# 484行目
ErrorLog logs/error_log
↓
ErrorLog logs/user1/error_log

# 526行目
CustomLog logs/access_log combined
↓
CustomLog logs/user1/access_log combined

user2用の設定ファイル(/etc/httpd/conf/httpd_user2.conf)も同じように編集します。
ちなみに、使用ポートは82番とします。

ログの出力先ディレクトリ・ドキュメントルートを変更したので、
そのディレクトリを作成します。

[root@localhost ~]# cd /etc/httpd/logs/
[root@localhost logs]# mkdir user1
[root@localhost logs]# mkdir user2</pre>
<pre class="brush: bash; toolbar:false;" title="ドキュメントルートディレクトリ作成">[root@localhost ~]# su user1
[user1@localhost root]$ cd
[user1@localhost ~]$ mkdir -p www/html
[user1@localhost ~]$ exit
exit
[root@localhost ~]# su user2
[user2@localhost root]$ cd
[user2@localhost ~]$ mkdir -p www/html

以下のコマンドを入力し、設定ファイルが正しく記載されているか確認します。

[root@localhost html]# apachectl -f /etc/httpd/conf/httpd_user1.conf -t

ポート解放(開発用サイト分)

httpd_user1.conf」・「httpd_user2.conf」のポート番号の設定値に合わせて、開放するポートを追加します。

[root@localhost ~]# vim /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.

:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 81 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 82 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

iptablesを再起動します。

# service iptables restart
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]

XDebugのインストール・設定

XDebugをインストールします。

[root@localhost ~]# pecl install xdebug

端末のインストールログに生成された共有ファイルのパスが表示されます。PHPの設定で使用するのでどこかにコピー&ペーストしておきます。

Build process completed successfully
Installing '/usr/lib64/php/modules/xdebug.so'

Release Warnings
================
p

install ok: channel://pecl.php.net/xdebug-2.2.6
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=xdebug.so" to php.ini

XDebug用の設定ファイルを作成します。XDebugの共有ファイルのパスを「zend_extension」に設定します。

[root@localhost ~]# vim /etc/php.d/xdebug.ini
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.remote_enable=On
xdebug.remote_port=9000
xdebug.remote_connect_back=On

※「xdebug.remote_port=9000」の設定より、ポート番号9000にデバッグ情報を送信しますので、ファイヤーウォール・統合開発環境の待受ポートの設定が必要です。

「user1」用のhttpdのドキュメントルートディレクトリ(/home/user1/www/html)に、.htaccessファイルを新規作成します。
.htaccessファイルには、XDebugデバッグ情報を送る宛先IPアドレスを設定します。

; user1のPCのIPアドレスを記載する。
php_value xdebug.remote_host 192.168.255.1

※参考Xdebugをセットアップする -でじうぃき

また、勝手に.htaccessファイルが消されないように、ファイルの属性を変更します。

[root@localhost ~]# chattr +i /home/user1/www/html/.htaccess
↓解除する場合
[root@localhost ~]# chattr -i /home/user1/www/html/.htaccess

※参考[Linux] 削除できないファイルの作り方|A Day In The Boy's Life
(同じように「user2」用のhttpdのドキュメントルートディレクトリ(/home/user2/www/html)に、.htaccessファイルを作成します。)

以下のコマンドを入力することで、開発者ごとのhttpdを起動します。

[root@localhost ~]# apachectl -f /etc/httpd/conf/httpd_user1.conf -k start
[root@localhost ~]# apachectl -f /etc/httpd/conf/httpd_user2.conf -k start

上記のコマンドの「start」を、「stop」・「restart」に変更すると、停止・再起動になります。

また、起動するたびにコマンドを入力しないといけないため、「/etc/rc.local」に以下のように追記して、自動的に「user1」・「user2」用のhttpdが起動するようにします

[root@localhost ~]# vim /etc/rc.local
# 以下の2行を追記
apachectl -f /etc/httpd/conf/httpd_user1.conf -k start
apachectl -f /etc/httpd/conf/httpd_user2.conf -k start

以上で、設定は終わりです。
ちなみにEclipseデバッグができることは確認しました。

おまけ

PHPでセッションを使用している場合、「/var/lib/php/session」に権限が無いため、ファイルが作成されずにエラーになってしまいます。(httpd_user1.conf、httpd_user2.confのUser・Groupで設定したユーザ・グループでファイルを作成しようとするため)
そのため、「/var/lib/php/session」のパーミッションを変更します。

↓デフォルトのパーミッションの確認
[root@localhost ~]# ls -l /var/lib/php/
合計 4
drwxrwx---. 2 root apache 4096 10月 30 13:17 2014 session
↓パーミッションの変更
[root@localhost ~]# chmod 777 /var/lib/php/session/
[root@localhost ~]# ls -l /var/lib/php/
合計 4
drwxrwxrwx. 2 root apache 4096 10月 30 13:17 2014 session

※参考PHP sessionファイルのパーミッション | Unknown World