Сокращение использования дискового пространства сайта Wiki PHP, работающего в веб-приложении Azure

Недавно я только начал управлять сайтом вики (pukiwiki) в веб-приложении Azure, которое также запускает другое приложение MVC. Ниже приведена концептуальная структура.

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

Это работает хорошо, однако, моя вики разработана так, чтобы содержать много изображений и статей, поэтому будет проблемой, что хранение вики повлияет на общее дисковое пространство моего веб-приложения.

Тогда я подумал, что это будет способ переместить перечисленные выше папки в хранилище BLOB-объектов Azure.
У 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 было бы решением, но это не выглядело рекомендуемым с точки зрения безопасности, как я видел.

Есть ли хорошая идея, чтобы уменьшить место на диске для содержимого вики?

0

Решение

Относительно «есть ли хорошая идея по сокращению дискового пространства» — это субъективно и широко. Однако из задача в перспективе то, что вы делаете, неверно.

Вы пытаетесь обработать контейнер BLOB-объектов как каталог файлов, и это не работает таким образом. Доступ к BLOB-объектам осуществляется через REST API (или один из SDK для конкретного языка).

Если вам требуется отдельная большая область хранения для веб-приложений (без изменения кода для работы с хранилищем больших двоичных объектов), вам необходимо выполнить одно из следующих действий:

  • Создайте том хранилища файлов Azure (расположен поверх хранилища BLOB-объектов, но реализует SMB и позволяет получать доступ к тому, как если бы вы обращались к любому другому пути UNC)
  • Обновление до более крупного плана веб-приложений (с большим объемом дискового пространства)
  • Настройте виртуальную машину с подключенным диском-хранилищем для работы в качестве файлового сервера для вашего веб-приложения (вам также необходимо иметь дело со сценариями, в которых виртуальная машина может отключиться и сделать ваш файловый сервер недоступным для вашего веб-приложения)

Всегда есть возможность хранить контент вне вашего веб-приложения (например, база данных, прямой доступ к BLOB-объектам и т. Д.). Но это будет зависеть от вашей вики-программы в том, как вы ее настроили.

3

Другие решения

Чтобы просто подойти к вашему требованию, вы можете попытаться напрямую изменить исходный код pukiwiki, Изменить предложение из get_source() функция в /lib/file.php скрипт для:

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

Он получит содержимое файла в вашей учетной записи хранения.

Кроме того, вы можете создать веб-задание для автоматического обновления файлов в папке веб-приложений в хранилище Azure.

1

По вопросам рекламы [email protected]