LoginSignup
2
8

More than 5 years have passed since last update.

[PHP]Vagrantの環境をNetBeansからリモートデバッグする

Last updated at Posted at 2017-04-24

はじめに

この辺の準備が整ってきたので、いよいよリモートから開発できる環境を整えていきます。

環境

ローカル側

Windows10 Pro x64
Core i5-6300U 2.40GHz
メモリ16.0GB


Vagrant 1.9.3
VirtualBox 5.1.18 r114002

VM側

CentOS Linux release 7.3.1611 64bit


httpd(Apache)
PHP 5.6.30
Xdebug 2.5.3

設定手順

Virtual Machineを立ち上げる

起動する

設定手順・起動方法などについてはこちらを参照のこと。

CentOS側の設定

以下の手順に沿って設定を行っていく。

  • httpdサービスの起動とfirewalldサービスの停止を行う
  • シンボリックリンクの設定を行う
  • サービスのインストールをする
  • 設定ファイルの書き換えを行う

なお、ID/PASS:vagrant - vagrantでログイン時に以下のコマンドを投入しておくとラク。

bash
$ sudo su - # ルートユーザーに切り替える

httpdサービスの起動とfirewalldサービスの停止を行う

コマンドライン上から下記コマンドを投入する。

bash
$ systemctl stop firewalld   # ファイアーウォールを止める
$ systemctl start httpd      # Apacheを起動する

# 念のため現在の状態を確認する
$ systemctl status firewalld
$ systemctl status httpd

# 次回以降、起動時に自動で設定するためのコマンド
$ systemctl enable httpd.service
$ systemctl disable firewalld.sercive

# そんなサービスねーよって言われたときの対応
$ yum -y install httpd

ICOPY011.JPG

念のため、ローカル環境からVagrantfileに設定したIPを叩いて、サービスが起動していることを確認する。
ICOPY012.JPG

シンボリックリンクの設定を行う

シンボリックリンクとは?

シンボリックリンクとは、OSのファイルシステムの機能の一つで、特定のファイルやディレクトリを指し示す別のファイルを作成し、それを通じて本体を参照できるようにする仕組み。リンクは本体と同じディレクトリに置いても良いが、通常は別の場所から参照できるようにするために作成される。UNIX系OSでよく用いられるもので、Windowsでも利用することができる。

ということで、本来はショートカット的な意味合いを持つものらしい。
やりたいことはローカルのディレクトリをVM側のドキュメントルートに設定すると言うものだが、シンボリックリンクを利用することで一発らしい。ステキ。
なお、ドキュメントルートはVagrantfileがあるディレクトリ直下(以下、便宜上ローカルドキュメントルートと呼称)となる。

bash
$ rm -rf /var/www/html          # 現在のドキュメントルートを削除
$ ln -fs /vagrant /var/www/html # ローカルディレクトリをドキュメントルートとしてリンク

こちらもテスト的なことを行う。
ローカルディレクトリにinfo.htmlを作成し、表示されることを確認する。
ICOPY014.JPG
ICOPY013.JPG

サービスのインストールをする

必要なサービスをインストールしていく。
今回新たにインストールするサービスは、PHPXdebug
PHPにはZend Engineなるものが利用されているようです。時間があるときに調べようと思います。

bash
#リポジトリのインストール
$ yum install -y epel-release
$ yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# php-mycryptインストール
$ yum --enablerepo=epel install -y libmcrypt

# PHP+Xdebugインストール
$ yum --enablerepo=remi,remi-php56 install -y php php-mysqlnd php-opcache php-mbstring php-gd php-mcrypt php-xml php-pear php-devel php-xmlrpc php-pecl-apcu php-pecl-xdebug
# remi-php56の部分を書き換えれば別バージョンのPHPも入れられると思う。

# 例によってインストール確認
$ php -v

ICOPY016.JPG
うまくいっていればwith Xdebug v2.5.3の文字が目に入ることと思う。

設定ファイルの書き換えを行う

インストール直後は設定ファイルがアレなので、修正していきます。
主に修正するのは次の2つ。

  • php.ini
  • 15-xdebug.ini

他の文献ではxdebug.iniとしか記述されていませんでしたが、こちらの環境では15-xdebug.iniとして作成されていました。これを書き換えたところ、正常に動作。

/etc/php.ini

php.ini
zend_extension="/lib64/php/modules/xdebug.so"
;xdebug.soファイルのフルパス

xdebug.remote_enable=On
xdebug.remote_connect_back=On
xdebug.remote_autostart=On

xdebug.remote_host=192.168.33.10
;Vagrantfilesに記述したIPアドレス

xdebug.remote_port=9000
xdebug.max_nesting_level=1000
xdebug.idekey="SAMPLE"

xdebug.soの場所が分からずに詰みかけました。微妙に文献と違うんだよなぁ...。

/etc/php.d/15-xdebug.ini

15-xdebug.ini
;extension=xdebug.so
;これをコメントアウトして

zend_extension=/usr/lib64/php/modules/xdebug.so
;xdebug.soファイルへのフルパスに書き換える

xdebug.default_enable = 1
xdebug.remote_enable  = on
bash
$ systemctl restart httpd # 念のためApacheを再起動

またまた念のためローカルドキュメントルートにphpファイルを追加し、phpinfoを出力させる。

info.php
<?php
    phpinfo();

ICOPY024.JPG

この辺からXdebugが有効化してることを確認する。

NetBeans側の設定

いよいよNetBeansからリモートデバッグできるように設定をしていく。

プロジェクトの初期設定を行う

2a6776a7-a76c-ebbc-4be3-bfec77c5a7b2.jpeg
ファイル → 新規プロジェクトを選択し、プロジェクト作成ダイアログを開く。

ICOPY017.JPG
特に何も設定せず、次へをクリックする。

ICOPY018.JPG
ソース・フォルダ横の参照ボタンをクリックし、ローカルドキュメントルートの場所を指定する。

ICOPY020.JPG
実行方法は変更せず、プロジェクトURLをVMのIPアドレスに設定する。
終了をクリックする。

ICOPY023.JPG
プロジェクト名を右クリックし、プロパティを選択する。

ICOPY026.JPG
左側の実行構成から進み、詳細ボタンをクリックする。

ICOPY022.JPG
毎回聞くにチェックを入れ、OKをクリック。

実行してみる

1f79de00-372e-58c3-b175-f55c4cdef7c0.jpeg
テキトーなところにブレークポイント打ってデバッグボタン横プルダウンからプロジェクトをデバッグを選択。

ICOPY030.JPG
デバッグURLを聞かれるので、間違いなければOKをクリック。

ICOPY032.JPG
はい、リモートデバッグできるようになりました。

所感

一度通ればなんてことはないのだけど...設定を通すまでがね...。
今後はmySQLやらphpMyAdminやらを整えた上でいよいよフレームワークやらユニットテストやらの設定に入ることになるのでしょうか。
Vagrantイイ。スゴクイイ。設定がうまくいってるところでboxファイル化しといて、しくじったらその時点にロールバックすればいいし。
あっ、NetBeansとGitとの連携とかも色々とあったなそういえば...。

参考文献

2
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
8