减少 Azure Web App 上 PHP Wiki 站点 运行 的磁盘 Space 使用率

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 的存储会影响我的网络应用程序的总磁盘 space 将是一个问题。

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

//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 访问域将是一个解决方案,但正如我所见,从安全角度来看,它看起来并不推荐。

有没有减少 wiki 内容的磁盘 space 的好主意?

关于 "is there any good idea to reduce disk space" - 这是主观和宽泛的。但是,从objective的角度来看,你的做法是不正确的。

您正试图将 blob 容器视为文件目录,但这种方式行不通。通过 REST API(或特定语言的 SDK 之一)访问 Blob。

如果您需要为 Web 应用程序提供一个单独的、更大的存储区域(无需修改您的代码以专门用于 blob 存储),您必须执行以下操作之一:

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

始终可以选择在 Web 应用程序之外存储内容(例如数据库、直接 blob 访问等)。但这将特定于您的 wiki 软件的设置方式。

为了简单的接近你的要求,你可以尝试直接修改pukiwiki的源代码。修改/lib/file.php脚本中get_source()函数的sentence为:

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

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

此外,您还可以创建一个网络作业,自动将网络应用文件夹中的文件更新到 Azure 存储。