VPSでPiwikを実行して、実行しているWebアプリの使用統計を記録します。現在、手動インストールとしてデプロイしており、最近、Docker化のタスクに着手しました。12要素のアプリの原則に沿って、おそらくコンテナー内の環境変数からデータベースのクレデンシャルを動的に読み取るように設定したいと思います。これにより、環境に関係なく同じ画像を使用できるようになります。
しかし、私はこれを行う方法を見つけるのに苦労しています。私が見ているように、4つのアプローチがあります。
<?php echo getenv('PIWIK_DATABASE_USER') ?>
ステートメントを構成config.ini.php
ファイルに入れます。ただし、これはエラーになり、これは実際には単なるINIファイルであり、PHPファイルではないのではないかと思います。と思われる他の人々がしている、あまりにもこれに苦労します。PIWIK_USER_PATH
ブートストラップスクリプトを使用して、別の構成/一時ベースフォルダーを指すようにグローバル定数をリセットします。これでうまくいくと確信していますが、新しい環境を作成したり、既存の環境を変更したりする場合は、コンテナイメージを再構築する必要があるため、最も好ましくないソリューションです。Config::getInstance()->__set()
。したがって、ブートストラップデバイスまたはプラグインのいずれかが適切なアプローチのようです。をbootstrap.php
読むことはできますが、ブートストラッププロセスのかなり早い段階で呼び出されているようでConfig
、その時点ではシングルトンは設定されていません。たとえば、ここで(4)を使用しようとすると、エラーが発生します。私はこのデモコードを使用しています:
<?php
require_once 'vendor/autoload.php';
\Piwik\Config::getInstance()->database['host'] ='localhost';
そしてここにエラーがあります:
PHPの致命的なエラー:キャッチされていないPiwik \ Container \ ContainerDoesNotExistException:ルートコンテナーはまだ作成されていません。/var/www/html/core/Container/StaticContainer.php:40\nStack trace:\ n#0 /var/www/html/core/Container/StaticContainer.php(80):Piwik \ Container \ StaticContainer :: getContainer()\ n#1 /var/www/html/core/Config.php(64):Piwik \ Container \ StaticContainer :: get( 'Piwik \\ Config')\ n#2 / var / www / html / bootstrap.php(4):Piwik \ Config :: getInstance()\ n#3 /var/www/html/index.php(15):require_once('/ var / www / html / b ... ')\ n#4 {main} \ n40行目の/var/www/html/core/Container/StaticContainer.phpにスローされます
デモプラグインも試しましたが、config.ini.php
で有効にしましたが、含まれていないか、インスタンス化されていないようです。そのため、そのinit()
メソッドは何も変更できません。プラグインコードは次のとおりです。
<?php
// plugins/DatabaseConfiguration/DatabaseConfiguration.php
namespace Piwik\Plugins\DatabaseConfiguration;
echo "Hello";
class DatabaseConfiguration extends \Piwik\Plugin
{
protected function init()
{
}
}
(echo
クラスがPiwikに含まれている場合、Webアプリでランダムに何かを出力するための一時的なものに注意してください)。
これが設定でオンにすることです:
PluginsInstalled[] = "DatabaseConfiguration"
これに関して記録された問題の1つには、民間コンサルタントを介して必要な作業を行うという寄稿者からの申し出が含まれます。しかし、私は必要なハッキングを自分でやりたいと思っています!
この質問は良いゴム製のアヒルであることがわかりました!これが私の解決策です。プラグインアプローチを使用しましたが、少し追加の構成が必要でした。
特に私はこれらの行を見逃していましたglobal.ini.php
:
; The below is appended to the global.ini.php config file
[Plugins]
Plugins[] = DatabaseConfiguration
別の[Plugins]
セクションがありますが、これは正常に機能しているように見えるので、次のように追加しましたDockerfile
。
# Inject settings file here
COPY config/config.ini.php /var/www/html/config/config.ini.php
COPY config/global.ini.php.append /tmp/global.ini.php.append
# Append the global config to the existing file (this did not seem to be settable
# in the standard config file)
RUN cat /tmp/global.ini.php.append >> /var/www/html/config/global.ini.php
これを追加するのは良かったのですがconfig.inc.php
、私にはうまくいかなかったようです。
最後に、次のコードがにインストールされplugins/DatabaseConfiguration/DatabaseConfiguration.php
ます。
<?php
/**
* A Piwik plugin to set database credentials based on environment variables
*/
namespace Piwik\Plugins\DatabaseConfiguration;
class DatabaseConfiguration extends \Piwik\Plugin
{
public function registerEvents()
{
return [
'Db.getDatabaseConfig' => 'getDatabaseConfig'
];
}
public function getDatabaseConfig(&$dbConfig)
{
$dbConfig['host'] = getenv('PIWIK_DATABASE_HOST');
$dbConfig['dbname'] = getenv('PIWIK_DATABASE_NAME');
$dbConfig['username'] = getenv('PIWIK_DATABASE_USER');
$dbConfig['password'] = getenv('PIWIK_DATABASE_PASSWORD');
}
}
Gitユーザーの場合、このプラグインはこちらから入手できます。
少し時間があれば、Piwik開発者がこの機能をプラグインリストに追加できるかどうかを確認します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加