タグ: PHP-FPM

ownCloud8をアップデートしたら、管理画面に”The test with getenv(“PATH”) only returns an empty response.”と表示されたとき

環境

の状態で、yum updateでownCloudを8.1.1にした結果、管理画面に

php does not seem to be setup properly to query system environment variables. The test with getenv("PATH") only returns an empty response.
Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm.

が表示された。

ownCloud 8.1: The test with getenv(“PATH”) only returns an empty response. – Techish.net
より
/etc/php-fpm.d/www.conf

clear_env = noの行のコメントアウトをはずして再読み込みすると解消する。

@@ -367,7 +367,7 @@
 ; Setting to "no" will make all environment variables available to PHP code
 ; via getenv(), $_ENV and $_SERVER.
 ; Default Value: yes
-;clear_env = no
+clear_env = no
広告

Dockerで作るPHPの実行環境サンプル

ファイル一式: https://github.com/mistymagich/vagrant-docker-php

php,nginx,mysqlのコンテナを動かして、PHPを実行させるサンプル環境です。

vagrantとvirtualboxもしくはdockerがインストールされているlinuxから起動できます。

必要なもの

  • Vagrantを使う方式
  • Dockerから起動する方式
    • DockerがインストールされたLinux
      バージョン 1.5.0 以上

セットアップ

  • Vagrantを使う方式
        > git clone https://github.com/mistymagich/vagrant-docker-php.git
        > cd vagrant-docker-php
        > vagrant up
    

    CoreOSが立ち上がるので、PuTTYなどでSSHでログインする (接続先は vagrant ssh-configで確認)

        $ cd /vagrant
        $ /vagrant/docker-build.sh
    
  • Dockerから起動する方式
        $ git clone https://github.com/mistymagich/vagrant-docker-php.git
        $ cd vagrant-docker-php
        $ chmod +x *.sh
        $ sudo ./docker-build.sh
        $ sudo echo '127.0.0.1 sandbox.local' >> /etc/hosts
    

    Ubuntu/Debianでdockerコマンドが docker.io1 になっている場合、docker-build.sh、docker-run.shの

    DOCKER=docker
    

    DOCKER=docker.io
    

    に変更したのち実行する。

起動

$ sudo ./docker-run.sh

正常に起動できれば、ブラウザで

http://sandbox.local

でアクセスするとPHPInfoが表示されます。

MySQLコンテナとの接続サンプルは

http://sandbox.local/dbconnect.php

にあります。

構造

Nginxコンテナ

コンテナ名:sandbox-nginx

公式Nginxコンテナをもとに、ホスト名sandbox.localに対して、PHPコンテナを参照する設定追加しています。
ドキュメントルートはsrc/public
拡張子がPHPならPHPコンテナにあるPHP-FPMを通して実行されます。

MySQLコンテナ

コンテナ名:sandbox-mysql

公式MySQLコンテナをそのまま利用しています。

データの永続化はしていません。

docker-run.sh実行時にsrcディレクトリにあるinit.sqlを実行することで、データベース・テーブル・データのインポートを行っています。

sanbox.localに対して3306にアクセスすることでMySQLコンテナにアクセスできます。

ユーザー名はroot、パスワードはdocker-run.shでMySQLコンテナ起動時にMYSQL_ROOT_PASSWORDで指定している値です。(編集していない場合、mysecretpw)

PHP(FPM)コンテナ

コンテナ名:sandbox-php

公式PHPコンテナのFPMをもとに、以下のモジュールを追加しています。

  • pdo
  • pdo_mysql
  • gd
  • mysqli
  • mcrypt
  • mbstring
  • iconv

関係図

関係図

PHP(FPM)コンテナはホスト名mysqlでMySQLコンテナにアクセスできます。
Nginxコンテナはホスト名phpでPHP(FPM)コンテナを参照しています。

PHPMyAdminを動かすサンプル

  1. PHPMyAdminをダウンロード
  2. 解凍して、中にあるPHPファイルをsrc/publicにコピー(すでにあるファイルは削除する)
  3. config.sample.incをconfig.incにリネーム
  4. config.incを編集

    ホスト名を変更

     /* Authentication type */
     $cfg['Servers'][$i]['auth_type'] = 'cookie';
     /* Server parameters */
    -$cfg['Servers'][$i]['host'] = 'localhost';
    +$cfg['Servers'][$i]['host'] = 'mysql';
     $cfg['Servers'][$i]['connect_type'] = 'tcp';
    

    末尾に追加

     $cfg['CheckConfigurationPermissions'] = false;
    
  5. http://sandbox.localにアクセス
  6. ID:root / PW:mysecretpw (docker-run.shのMySQLコンテナ起動時のMYSQL_ROOT_PASSWORDで指定している値)

その他

  • docker-run.sh実行時にすべてのコンテナを削除します。
  • コンテナが正常に動かない場合、docker ps -aでコンテナIDを調べ、docker logs コンテナID で原因となるメッセージが出力されることがあります。

  1. Ubuntu/Debianの場合、dockerコマンドがdocker.ioになっているため、いまさら聞けないDocker入門(2):ついに1.0がリリース! Dockerのインストールと主なコマンドの使い方 (1/3) – @ITにあるようにしてdockerコマンドを利用できるようにする方法もあります。