减少在Azure Web应用程序上运行的PHP Wiki站点的磁盘空间使用


Reducing Disk Space Usage of PHP Wiki Site running on Azure Web App

最近我刚刚开始在Azure Web App上管理一个wiki (pukiwiki)站点,它也运行另一个MVC应用程序。以下是概念结构。

--site/
  --wwwroot/
    --<main app>
    --wiki/
      --attach/   //attached files
      --lib/      //php codes
      --image/    //images
      --<other folders>
      --index.php
      --pukiwiki.ini
      --.htaccess
      --<other files>

它工作得很好,但是,我的wiki被设计成包含许多图像和文章,所以这将是一个问题,wiki的存储将影响到我的web应用程序的总磁盘空间。

然后我认为这将是一种将上面列出的文件夹移动到Azure Blob Storage的方法。
Index.php和wiki.ini对PHP代码有一些要求,这些代码位于lib, attach和其他文件夹中,并且也有确定文件夹位置的定义。

//index.php
define('DATA_HOME', '');
define('LIB_DIR',   'lib/');
require(LIB_DIR . 'pukiwiki.php');
//pukiwiki.ini
define('DATA_DIR',      DATA_HOME . 'wiki/'     );
define('UPLOAD_DIR',    DATA_HOME . 'attach/'   );
...

我将文件夹移动到blob,并编辑了那些引用,以引用那里的位置。

//index.php
define('DATA_HOME', 'https://<account>.blob.core.windows.net/wiki/<container>/');
define('LIB_DIR',   'lib/');
require(LIB_DIR . 'pukiwiki.php');
//pukiwiki.ini
define('DATA_DIR',      DATA_HOME . 'wiki/'     );
define('UPLOAD_DIR',    DATA_HOME . 'attach/'   );
...

然而,由于引用另一个域的限制,它不起作用。允许通过编辑。user.ini来访问域将是一个解决方案,但就我所见,从安全角度来看,这似乎不推荐。

有什么好主意可以减少维基内容的磁盘空间吗?

关于"是否有减少磁盘空间的好主意"-这是主观的和广泛的。然而,从客观的角度来看,你所做的是错误的。

你试图像对待文件目录一样对待blob容器,但它不能这样工作。blob可以通过REST API(或特定于语言的SDK之一)访问。

如果你需要为Web应用程序提供一个单独的、更大的存储区域(不需要修改你的代码来专门使用blob存储),你必须做以下事情之一:

  • 创建一个Azure文件存储卷(位于blob存储之上,但实现SMB并允许您像访问任何其他UNC路径一样访问该卷)
  • 升级到更大的Web应用程序计划(有更多的磁盘空间)
  • 设置一个带有附加存储磁盘的虚拟机,作为你的Web应用程序的文件服务器(你还需要处理虚拟机可能脱机的场景,使你的文件服务器对你的Web应用程序不可用)

总是可以选择将内容存储在Web应用程序之外(例如数据库,直接blob访问等)。但这要取决于你的wiki软件如何设置

为了简单地满足您的需求,您可以尝试直接修改pukiwiki的源代码。将/lib/file.php脚本中get_source()函数语句修改为:

$path = 'https://<torage_account>.blob.core.windows.net/'.get_filename($page);

它将获取您存储帐户中的文件内容。

另外,你可以创建一个webjob来自动更新你在web apps文件夹中的文件到Azure Storage.