no-image

kusanagiのWordPressにStack Driverを入れる方法

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です。

躓いたところ

  1. ルート権限がないと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
  1. ルート権限でも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

実際にやったことは以下。

  1. root権限でswapにメモリを割り当てる
  2. root権限から抜ける(root権限のままcomposerを実行してはいけない)
  3. 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が何か特殊な動きをしているのか???

pocketlinehatebuimagegalleryaudiovideocategorytagchatquotegoogleplusfacebookinstagramtwitterrsssearchenvelopeheartstaruserclosesearch-plushomeclockupdateeditshare-squarechevron-leftchevron-rightleafexclamation-trianglecalendarcommentthumb-tacklinknaviconasideangle-double-upangle-double-downangle-upangle-downstar-halfstatus