Как очистить OPcache в защищенной среде BasicAuth с typo3/surf?
В проекте TYPO3 я работаю над средой Production/Staging (или Production/Dev, или любой другой), защищенной HTTP BasicAuth ( базовая аутентификация доступа).
Экземпляр get развернут через typo3 / surf.
- В определенный момент typo3 / surf должен создать временный php-файл, к которому можно получить доступ
- позже: после того, как переключение было сделано, и новое развертывание доступно через внешний интерфейс.
Как я могу настроить typo3 / surf для доступа к ранее сгенерированному сценарию очистки OPcache через интерфейс в защищенной среде BasicAuth?
1 ответ
Настройка typo3/surf для сброса PHP OPcache1
Для настройки сценария очистки / сброса OPcache необходимы четыре шага:
- Установить параметры задачи для
\TYPO3\Surf\Task\Php\WebOpcacheResetCreateScriptTask
- Добавить задачу
\TYPO3\Surf\Task\Php\WebOpcacheResetCreateScriptTask
ранняя стадия (например,package
но определенно раньшеtransfer
) - Установить параметры задачи для
\TYPO3\Surf\Task\Php\WebOpcacheResetExecuteTask
- Добавить задачу
\TYPO3\Surf\Task\Php\WebOpcacheResetExecuteTask
после этапаswitch
Вот необходимые фрагменты для вашей функции onInitialize2 в вашем скрипте конфигурации развертывания:
Задайте параметры задачи для "Создать задачу сценария":
Начиная с патча"Respect WebDirectory", путь к сценарию не следует настраивать вручную, поскольку он автоматически использует правильный путь WebDirectory (который задается с помощью опций).
Если вы используете старую версию typo3/surf или у вас есть какие-то особые требования, вы можете установить опцию scriptBasePath
установить абсолютный путь к результирующему файлу:
# In this example, I have to set the absolute path for the resulting php file.
# Since the deployment run in GitLab CI I get the path to the root of the project's GIT
# repository via the environment variable `CI_PROJECT_DIR`. Since the path to the webDirectory
# inside the GIT repository is `<GitRepoRootFOlder>/app/web` I add it manually and concatenate
# it as final string for the option `scriptBasePath`:
$workflow->setTaskOptions(\TYPO3\Surf\Task\Php\WebOpcacheResetCreateScriptTask::class, [
'scriptBasePath' => \TYPO3\Flow\Utility\Files::concatenatePaths([getenv('CI_PROJECT_DIR'), '/app/web']),
]);
Задайте параметры задачи для "Выполнить задачу":
На данный момент мы предоставляем имя пользователя и пароль
$workflow->setTaskOptions('TYPO3\\Surf\\Task\\Php\\WebOpcacheResetExecuteTask', [
'baseUrl' => $application->getOption('baseUrl'),
'stream_context' => [
'http' => [
'header' => 'Authorization: Basic '.base64_encode("username:password"),
],
],
]);
Активируйте обе задачи:
$workflow->beforeStage('transfer', \TYPO3\Surf\Task\Php\WebOpcacheResetCreateScriptTask::class, $application)
->afterStage('switch', \TYPO3\Surf\Task\Php\WebOpcacheResetExecuteTask::class, $application);
Этот ответ показывает только необходимые части для процесса сброса OPcache!
Пожалуйста, проверьте также пример конфигурации развертывания TYPO3 CMS в официальной документации.
Сноски
1 Этот ответ основан на ветке GIT typo3/surf, dev-master, версия 2.x
2 Пример размещения указанных фрагментов:
$deployment->onInitialize(function () use ($deployment, $application) {
/** @var SimpleWorkflow $workflow */
$workflow = $deployment->getWorkflow();
# the mentioned snippets have to be placed next to your existing configuration
});