PHP 用 Stackdriver Debugger の設定
https://cloud.google.com/debugger/docs/setup/php?hl=ja
今回は「ローカルと他の場所」の手順に従って実行していきます。
PECL から stackdriver_debugger 拡張機能をインストール
$ pecl install stackdriver_debugger-alpha
kusanagiでphp7を使っているので、そちらにインストールしてもらうために以下のコマンドを実行すればいいらしい。
なのでルート権限に昇格した上で、php7が格納されているところでpeclを実行するとうまくいきます。
$ sudo su - $ cd /usr/local/php7/bin/ $ ./pecl install stackdriver_debugger-alpha
もしくは
$ sudo /usr/local/php7/bin/pecl install stackdriver_debugger-alpha
ちなみにPECLはLinuxライブラリに機能を追加するもので、カレントディレクトリに関係ないので、どこで実行してもOKです。
躓いたところ
- ルート権限がないとpearを使えないのでダメ
$ pecl install stackdriver_debugger-alpha WARNING: configuration download directory "/tmp/pear/download" is not writeable. Change download_dir config variable to a writeable dir to avoid this warning Cannot install, php_dir for channel "pecl.php.net" is not writeable by the current user
- ルート権限でもphp7を指定しないとバージョンが5.6だとダメ。
$ pecl install stackdriver_debugger-alpha PHP Deprecated: Comments starting with '#' are deprecated in /etc/php.d/newrelic.ini on line 49 in Unknown on line 0 pecl/stackdriver_debugger requires PHP (version >= 7.0.0), installed version is 5.6.40 No valid packages found install failed
参考
さくらのVPSのKUSANAGIでPHP7にimagickをインストール
https://juangotoh.hatenablog.com/entry/2016/11/02/100253
Google Cloud PHP Debugger パッケージを composer.json ファイルに追加
composerはカレントディレクトリにcomposer.jsonを生成しライブラリを管理するので、DocumentRoot配下などにインストールするとよいでしょう。
$ cd /home/kusanagi/sitename/DocumentRoot $ composer require google/cloud-debugger
注意!
root権限のままcomposerを実行してはいけません
AWSのインスタンスがmicroの場合のつまずき
サーバのメモリが少ないとproc_openが動かずにエラーになることがあります。
PHP Warning: proc_open(): fork failed - Cannot allocate memory in phar:
この問題はサーバがメモリ不足になって、しかも使えるSwap領域がないときに発生します。
通常ではあまり発生しませんが、gcpやAWSなどのクラウドサービスでmicroインスタンスで運用しているとき、メモリ不足でこのエラーを見ることがあります。 aws EC2でphpのcomposer updateでのエラー:The following exception is caused by a lack of memory or swap, or not having swap configured
http://www.thirtyfive.info/entry/2018/07/14/aws_EC2%E3%81%A7php%E3%81%AEcomposer_update%E3%81%A7%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%EF%BC%9AThe_following_exception_is_caused_by_a_lack_of_memory_or_swap%2C_or_not_having_swap_configured
実際にやったことは以下。
- root権限でswapにメモリを割り当てる
- root権限から抜ける(root権限のままcomposerを実行してはいけない)
- composerはDocumentRoot(/home/kusanagi/sitename/DocumentRoot)で実行する
$ sudo su - # メモリを割り当てる $ sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 $ sudo /sbin/mkswap /var/swap.1 $ sudo /sbin/swapon /var/swap.1 # rootを抜ける $ exit # kusanagiにログインしてドキュメントルートへ $ su kusanagi $ cd /home/kusanagi/sitename/DocumentRoot # composerでインストール $ composer require google/cloud-debugger
swapメモリは起動時にリセットされてしまうので、面倒な場合は以下の設定を変えておくとよい
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-memory-swap-file/
wp-config.phpの最後のほうに、以下のコードを貼り付ける。
※wp-config.phpをDocumentRootの1階層上に設置している場合は、DIRの後のパスを’/DocumentRoot/vendor/autoload.php’にする。
# Includes the autoloader for libraries installed with composer require __DIR__ . '/vendor/autoload.php';
Stackdriver Debugger デーモン プロセスを実行
$ php /[YOUR-APP-PATH]/vendor/bin/google-cloud-debugger -s /[YOUR-APP-PATH]
[YOUR-APP-PATH]はドキュメントルートへのパス(/home/kusanagi/sitename/DocumentRoot) です。
つまり実行するのは、
$ php /home/kusanagi/sitename/DocumentRoot/vendor/bin/google-cloud-debugger -s /home/kusanagi/sitename/DocumentRoot
これだと認証情報が見つからないといわれるので、google-cloud-debuggerのファイル内のNAMESPACEのあとに
putenv("GOOGLE_APPLICATION_CREDENTIALS=認証情報のjsonまでのパス");
を書いたらうまくいった。
が、その後、Wordpressでは何やっても動かない…Wordpressが何か特殊な動きをしているのか???