【问题标题】:Hosting piwik on a server with a read-only filesystem在具有只读文件系统的服务器上托管 piwik
【发布时间】:2013-02-24 04:55:18
【问题描述】:

我使用 CloudControl 进行托管,我想设置一个服务器(可能支持负载平衡)来托管我所有网站的 piwik。唯一的问题是 CloudControlled 允许您访问的唯一可写目录是由 $_SERVER['TMPDIR'] 定义的。

是否可以修改 piwik 以使用该目录来满足其所有文件写入需求?

我还会遇到使用负载平衡的任何问题吗?我的负载均衡器后面的每个节点都会生成自动生成的报告之类的东西,因为它们彼此不知道?

【问题讨论】:

  • 是否 Piwik 需要对任何文件的写入权限?它将数据存储在数据库中,不是吗? ...但是如果它确实需要写访问权限,那么即使您设法对其进行修改,您也将注定失败,因为每次更新都会破坏您的修改。在这种情况下,您最好转移到不同的托管环境。

标签: php filesystems hosting matomo cloudcontrol


【解决方案1】:

我们的想法是在您更新时为您的系统保留此更改。

这很容易做到:在 piwik main 文件夹中创建一个bootstrap.php

这是该文件的内容:

<?php
define('PIWIK_USER_PATH', $_SERVER['TMPDIR']);

您可以仔细检查:在index.php 中,您应该会看到它在同一文件夹中检查bootstrap.php 文件。它在可用时包含在内,这使您可以进行少量自定义并在更新时保留它们。例如。在过去三年左右的时间里,我一直从 svn 运行 piwik,并且在那里进行了一些自定义更改。

【讨论】:

  • 感谢您的建议。我已经按照您的建议包含了 bootstrap.php 文件,但现在我遇到了一个新错误:“未找到配置文件 {/data/local/depsh5jzunc/tmp/config/global.ini.php}。 "我会假设 piwik 会识别出它尚未安装,如果它没有该配置文件,它会引导我完成设置过程?
  • 安装后是否可以添加bootstrap.php?我猜PIWIK_USER_PATH 让它认为它已经设置好了。
  • 不幸的是,它变成了一种先有鸡还是先有蛋的问题,因为我需要 boostrap.php 文件来强制 piwik 在我唯一可用的可写文件夹中工作。
  • 好的,在这种情况下。我建议您在部署 piwik 之前在 localhost 上进行配置。这可能吗?
【解决方案2】:

代码太多了,我无法确认它是否有效,但常量 PIWIK_USER_PATH 似乎被用作文件 io 的基本根。考虑到这一点,在第 23 行周围编辑 index.php,原来是:

if(!defined('PIWIK_USER_PATH'))
{
    define('PIWIK_USER_PATH', PIWIK_DOCUMENT_ROOT);
}

类似于:

if(!defined('PIWIK_USER_PATH'))
{
    define('PIWIK_USER_PATH', $_SERVER['TMPDIR']);
}

可能有效 - 但是当它试图读取原始位置的文件时会发生什么?但是,由于这是一个 临时 目录,它可能不可行,在这种情况下,使用 override_function 或类似方法的方法与持久存储(您的数据库)配对也可能有效 -通过使用数据库加载/保存例程覆盖文件函数;显然,这会打开另一个符合圣经比例的蠕虫,因此,我的最终建议是让您获得另一个限制较少的宿主。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-09
    • 2017-07-29
    • 2014-03-23
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多