Matomo / Piwikデータベース接続を動的に変更するにはどうすればよいですか?

ハーフアー

VPSでPiwikを実行して、実行しているWebアプリの使用統計を記録します。現在、手動インストールとしてデプロイしており、最近、Docker化のタスクに着手しました。12要素のアプリの原則に沿って、おそらくコンテナー内の環境変数からデータベースのクレデンシャルを動的に読み取るように設定したいと思います。これにより、環境に関係なく同じ画像を使用できるようになります。

しかし、私はこれを行う方法を見つけるのに苦労しています。私が見ているように、4つのアプローチがあります。

  1. <?php echo getenv('PIWIK_DATABASE_USER') ?>ステートメントを構成config.ini.phpファイルに入れます。ただし、これはエラーになり、これは実際には単なるINIファイルであり、PHPファイルではないのではないかと思います。と思われる他の人々がしている、あまりにもこれに苦労します
  2. PIWIK_USER_PATHブートストラップスクリプトを使用して、別の構成/一時ベースフォルダーを指すようにグローバル定数リセットします。これでうまくいくと確信していますが、新しい環境を作成したり、既存の環境を変更したりする場合は、コンテナイメージを再構築する必要があるため、最も好ましくないソリューションです。
  3. プラグインまたはブートストラップシステムを使用して、データベースクレデンシャルイベントをキャプチャし、使用する前に変更します
  4. プラグインまたはブートストラップシステムを使用して、を使用して構成を上書きします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]

編集
0

コメントを追加

0

関連記事

分類Dev

matomo / piwikで使用するnext.jsでルート変更を聞く

分類Dev

VueJSシングルページアプリにMatomoトラッキングコードを追加するにはどうすればよいですか?

分類Dev

Access XHR object in callback of trackPageView() using Piwik.js (matomo)

分類Dev

接続用にデータベースを変更するにはどうすればよいですか?

分類Dev

Matomo(Piwik)がReactアプリで間違ったURLを追跡する

分類Dev

MatomoのGeoIP、以前のPiwikマップ東京区

分類Dev

MatomoのLiveAPIは日付を尊重していません

分類Dev

サーバーをデータベースに接続するにはどうすればよいですか

分類Dev

mysql データベースをノードに接続するにはどうすればよいですか?

分類Dev

MSAccessデータベースをJetbrainsDataGripに接続するにはどうすればよいですか

分類Dev

pypikaを使用してデータベースに接続するにはどうすればよいですか?

分類Dev

ADOを使用してデータベースに接続するにはどうすればよいですか?

分類Dev

JBoss 7.1.1 FinalをOracleデータベースに接続するにはどうすればよいですか?

分類Dev

既存のSQLiteデータベースをExpandableListViewに接続するにはどうすればよいですか?

分類Dev

ノードjsのDB接続を動的に変更するにはどうすればよいですか?

分類Dev

SparkSQLContextからNetezzaデータベースに接続するにはどうすればよいですか

分類Dev

Arduinoからデータベースに接続するにはどうすればよいですか?

分類Dev

adminer 4.3.1でSQLiteデータベースに接続するにはどうすればよいですか?

分類Dev

HostGatorで作成したデータベースに接続するにはどうすればよいですか?

分類Dev

Swift 3.0で外部データベースに接続するにはどうすればよいですか

分類Dev

mysqlデータベースから変数をランダムに取得するにはどうすればよいですか?(dbo接続でphpを使用)

分類Dev

GCloud SQLデータベースに正しく接続するにはどうすればよいですか?

分類Dev

Rails を使用して手動で MYSQL データベースに接続するにはどうすればよいですか?

分類Dev

Roomデータベースの主キーを変更するにはどうすればよいですか?

分類Dev

Sqliteデータベースのモードを変更するにはどうすればよいですか?

分類Dev

redisでデータベースの名前を変更するにはどうすればよいですか?

分類Dev

Pythonでpickleデータベースを変更するにはどうすればよいですか?

分類Dev

.NET Coreで起動から一度だけデータベース接続を設定するにはどうすればよいですか?

分類Dev

iOS、デリゲートスタイルでインターネット接続の変更を検出するにはどうすればよいですか?

Related 関連記事

  1. 1

    matomo / piwikで使用するnext.jsでルート変更を聞く

  2. 2

    VueJSシングルページアプリにMatomoトラッキングコードを追加するにはどうすればよいですか?

  3. 3

    Access XHR object in callback of trackPageView() using Piwik.js (matomo)

  4. 4

    接続用にデータベースを変更するにはどうすればよいですか?

  5. 5

    Matomo(Piwik)がReactアプリで間違ったURLを追跡する

  6. 6

    MatomoのGeoIP、以前のPiwikマップ東京区

  7. 7

    MatomoのLiveAPIは日付を尊重していません

  8. 8

    サーバーをデータベースに接続するにはどうすればよいですか

  9. 9

    mysql データベースをノードに接続するにはどうすればよいですか?

  10. 10

    MSAccessデータベースをJetbrainsDataGripに接続するにはどうすればよいですか

  11. 11

    pypikaを使用してデータベースに接続するにはどうすればよいですか?

  12. 12

    ADOを使用してデータベースに接続するにはどうすればよいですか?

  13. 13

    JBoss 7.1.1 FinalをOracleデータベースに接続するにはどうすればよいですか?

  14. 14

    既存のSQLiteデータベースをExpandableListViewに接続するにはどうすればよいですか?

  15. 15

    ノードjsのDB接続を動的に変更するにはどうすればよいですか?

  16. 16

    SparkSQLContextからNetezzaデータベースに接続するにはどうすればよいですか

  17. 17

    Arduinoからデータベースに接続するにはどうすればよいですか?

  18. 18

    adminer 4.3.1でSQLiteデータベースに接続するにはどうすればよいですか?

  19. 19

    HostGatorで作成したデータベースに接続するにはどうすればよいですか?

  20. 20

    Swift 3.0で外部データベースに接続するにはどうすればよいですか

  21. 21

    mysqlデータベースから変数をランダムに取得するにはどうすればよいですか?(dbo接続でphpを使用)

  22. 22

    GCloud SQLデータベースに正しく接続するにはどうすればよいですか?

  23. 23

    Rails を使用して手動で MYSQL データベースに接続するにはどうすればよいですか?

  24. 24

    Roomデータベースの主キーを変更するにはどうすればよいですか?

  25. 25

    Sqliteデータベースのモードを変更するにはどうすればよいですか?

  26. 26

    redisでデータベースの名前を変更するにはどうすればよいですか?

  27. 27

    Pythonでpickleデータベースを変更するにはどうすればよいですか?

  28. 28

    .NET Coreで起動から一度だけデータベース接続を設定するにはどうすればよいですか?

  29. 29

    iOS、デリゲートスタイルでインターネット接続の変更を検出するにはどうすればよいですか?

ホットタグ

アーカイブ