我在VPS上運行Piwik來記錄我運行的Web應用程序的使用情況統計信息。我目前已經將它部署爲手動安裝,並且最近已經開始Docker化它的任務。根據十二個要素應用原則,我想將其設置爲動態讀取數據庫憑證,可能來自容器中的環境變量;這將允許我使用相同的圖像,無論環境如何。如何動態修改Piwik數據庫連接?
但是,我正在努力解決如何做到這一點。當我看到它有四種方法:
- 將
<?php echo getenv('PIWIK_DATABASE_USER') ?>
語句到config.ini.php
配置文件。但是,這會導致錯誤,我想知道這實際上只是一個INI文件,而不是一個PHP文件。看來other folks有struggled with this too。 - 重置全局常量
PIWIK_USER_PATH
以使用引導腳本指向不同的配置/臨時基礎文件夾。我相當肯定這會工作,但是我最不喜歡的解決方案,因爲如果我想創建一個新環境或更改現有環境,我必須重新構建容器圖像。 - 使用插件或引導系統來捕捉database credentials event並改變它們在使用之前
- 使用插件或引導系統覆蓋使用
Config::getInstance()->__set()
的配置。
所以,似乎引導設備或插件是一個很好的方法。我可以讀取一個bootstrap.php
,但它看起來像在引導過程中很早就被調用,並且此時單身人士未被填充。例如,如果我嘗試在這裏使用(4),我只是得到一個錯誤。我使用這個演示代碼:
<?php
require_once 'vendor/autoload.php';
\Piwik\Config::getInstance()->database['host'] ='localhost';
,這裏是錯誤:
PHP Fatal error: Uncaught Piwik\Container\ContainerDoesNotExistException: The root container has not been created yet. in /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}\n thrown in /var/www/html/core/Container/StaticContainer.php on line 40
我已經嘗試了演示插件,以及,我在config.ini.php
啓用它,但它不會出現被包含或實例化,所以其init()
方法不能改變任何東西。下面是插件代碼:
<?php
// plugins/DatabaseConfiguration/DatabaseConfiguration.php
namespace Piwik\Plugins\DatabaseConfiguration;
echo "Hello";
class DatabaseConfiguration extends \Piwik\Plugin
{
protected function init()
{
}
}
(注意臨時echo
輸出的東西在Web應用程序隨機上課的時候被Piwik包括在內)。
這是我打開它的配置:
PluginsInstalled[] = "DatabaseConfiguration"
One logged issue這個包括從貢獻者的報價通過私人顧問開展必要的工作。但是,我希望自己做必要的黑客攻擊!