madj2k / t3-surf

v10.4.0-stable 2024-04-19 15:11 UTC

README

在运行部署时,以下阶段和对应任务会被执行。

阶段 1:初始化

通常只在首次部署到实例时使用。在此阶段,您可以预先填充某些目录,例如。

  1. TYPO3\Surf\Task\Generic\CreateDirectoriesTask
  2. TYPO3\Surf\Task\CreateDirectoriesTask
  3. TYPO3\Surf\Task\DumpDatabaseTask (当 initialDeployment == true)
  4. TYPO3\Surf\Task\RsyncFoldersTask (当 initialDeployment == true)

阶段 2:锁定部署

锁定部署

BEFORE

  1. TYPO3\Surf\Task\UnlockDeploymentTask (当 --force-run)

REGULAR

  1. TYPO3\Surf\Task\LockDeploymentTask

阶段 3:打包

在此阶段,通常打包所有文件和资产,这些资产将被传输到下一个阶段。

  1. TYPO3\Surf\Task\Package\GitTask
  2. TYPO3\Surf\DefinedTask\Composer\LocalInstallTask
  3. Madj2k\Surf\Task\Local\File\CopyEnvTask
  4. Madj2k\Surf\Task\Local\File\CopyHtaccessTask
  5. Madj2k\Surf\Task\Local\File\CopyAdditionalConfigurationTask
  6. Madj2k\Surf\Task\Local\File\FixPermissionsTask
  7. Madj2k\Surf\Task\Local\Git\SetFileModeIgnoreTask
  8. Madj2k\Surf\Task\Local\Composer\InstallStagingTask OR Madj2k\Surf\Task\Local\Composer\InstallProductionTask

阶段 4:传输

在此处放置所有任务,用于将资产从您的本地计算机传输到应用程序运行的节点。

  1. TYPO3\Surf\Task\Transfer

AFTER

  1. Madj2k\Surf\Task\Remote\File\CreateVarFoldersTask
  2. TYPO3\Surf\Task\Generic\CreateSymlinksTask
  3. TYPO3\Surf\Task\TYPO3\CMS\CreatePackageStatesTask

阶段 5:更新

在节点上更新应用程序资产

BEFORE

  1. Madj2k\Surf\Task\Remote\CMS\LockForEditorsTask

REGULAR

  1. Madj2k\Surf\Task\Remote\CMS\UpgradeTask

AFTER

  1. TYPO3\Surf\Task\TYPO3\CMS\SymlinkDataTask
  2. TYPO3\Surf\Task\TYPO3\CMS\CopyConfigurationTask

阶段 6:迁移

迁移 (Doctrine, 自定义)

  1. TYPO3\Surf\Task\TYPO3\CMS\SetUpExtensionsTask
  2. TYPO3\Surf\Task\TYPO3\CMS\CompareDatabaseTask

阶段 7:最终化

准备最终发布(例如预热)

REGULAR

  1. Madj2k\Surf\Task\Remote\File\FixPermissionsTask
  2. Madj2k\Surf\Task\Remote\TYPO3\CMS\FixFolderStructureTask

AFTER

  1. Madj2k\Surf\Task\Remote\File\CopyDummyFilesTask (仅在非生产环境下!)

阶段 8:测试

烟雾测试

阶段 9:切换

将符号链接指向当前发布。这是关键阶段。在此阶段,旧的在线实例将切换到新的准备好的实例。通常新的实例将被符号链接。

  1. TYPO3\Surf\Task\SymlinkReleaseTask

AFTER

  1. TYPO3\Surf\Task\TYPO3\CMS\FlushCachesTask

阶段 10:清理

删除临时文件或以前的发布

  1. TYPO3\Surf\Task\CleanupReleasesTask

阶段 11:解锁

解锁部署

  1. TYPO3\Surf\Task\UnlockDeploymentTask
  2. Madj2k\Surf\Task\Remote\TYPO3\CMS\UnlockForEditorsTask

AFTER

  1. Madj2k\Surf\Task\Remote\EmailNotification

您的部署项目的文件夹和文件

如果您想使用此扩展部署您的 TYPO3 项目,您应该创建一些文件夹结构和文件,以便能够充分发挥其潜力。

文件夹:.surf

包含用于部署的 TYPO3 扩展 Surf 的配置和相应的部署脚本。

文件:.surf/Production.php

<?php
use Madj2k\Surf\Deployment;

/**
 * Deployment-Script
 *
 * @author Steffen Kroggel <developer@steffenkroggel.de>
 * @copyright Madj2k
 * @license https://gnu.ac.cn/licenses/gpl.html GNU General Public License, version 3 or later
 * @var \TYPO3\Surf\Domain\Model\Deployment $deployment
 */

// load options
$options = require_once __DIR__ . '/Credentials/Production.php';

// make deployment
$myDeployment = new Deployment($deployment, $options);

文件:.surf/Staging.php

<?php
use Madj2k\Surf\Deployment;

/**
 * Deployment-Script
 *
 * @author Steffen Kroggel <developer@steffenkroggel.de>
 * @copyright Madj2k
 * @license https://gnu.ac.cn/licenses/gpl.html GNU General Public License, version 3 or later
 * @var \TYPO3\Surf\Domain\Model\Deployment $deployment
 */

// load options
$options = require_once __DIR__ . '/Credentials/Staging.php';

// make deployment
$myDeployment = new Deployment($deployment, $options);

文件夹:.surf/Credentials

包含相应环境的访问数据。**重要提示**:不要将这些文件放入您的版本控制中!

示例

<?php
/**
 * Credentials
 *
 * @author Steffen Kroggel <developer@steffenkroggel.de>
 * @copyright Madj2k
 * @license https://gnu.ac.cn/licenses/gpl.html GNU General Public License, version 3 or later
 * @version 1.0.3
 */
return [
    'context' => 'Production/Staging',
    'projectName' => 'Example',
    'deploymentPath' => '/var/www/example.com/surf',
    'phpBinaryPathAndFilename' => '/usr/bin/php7.4',
    'adminMail' => 'deployment@example.de',

    'hostname' => '',
    'username' => '',
    'password' => '',
    'port' => '',

    'repositoryUrl' => 'https://github.com/Example/Example.git',
    'branch' => 'staging',
    'doUpgrade' => false,
    'queryFileBeforeUpgrade' => '',
    'queryFileAfterUpgrade' => ''
];

文件:_.htaccess.dev / _.htaccess.prod / _.htaccess.stage / _.nginx.dev / _.nginx.prod / _.nginx.stage

包含给定环境的设置。您可以使用 .htaccess 为 Apache 或 .nginx 为 Nginx。将被自动部署。

文件:_.htpasswd.dev / _.htpasswd.prod / _.htpasswd.stage

与 _htaccess.* 相同

文件:composer.json

包含需要安装的包。要安装依赖于仅作为 @dev 可用的包的包,需要结合使用 minimum-stabilityprefer-stable。使用 preferred-install 可以指定某些包应作为 GIT 仓库安装,以便您可以直接工作。

文件夹:dummy

包含 sys_file-references 的虚拟文件。此文件夹的内容将在您的 stage-environment 中部署(当然不是在生产环境中!)

文件:_.env.dev / _.env.prod / _.env.stage

此文件包含在给定环境中要激活的所有扩展列表。如果在此文件安装前将其复制到 .env,则 "helhum/dotenv-connector" 包将自动创建相应的 PackageStates.php

示例

# Context
TYPO3_CONTEXT="Production"

# A set of TYPO3 framework extensions (delivered within typo3/cms), which should be marked as active
TYPO3_ACTIVE_FRAMEWORK_EXTENSIONS="about,backend,belog,beuser,context_help,core,cshmanual,extbase,extensionmanager,felogin,filelist,filemetadata,fluid,fluid_styled_content,frontend,func,impexp,info,info_pagetsconfig,install,lang,lowlevel,recordlist,recycler,reports,rsaauth,rte_ckeditor,saltedpasswords,scheduler,setup,sv,sys_action,sys_note,taskcenter,tstemplate,version,viewpage,wizard_crpages,wizard_sortpages"

文件:public/typo3conf/AdditionalConfiguration.php

此文件包含相应环境的有关设置。**重要:请勿将任何与实时环境相关的访问数据或加密密钥放入版本控制中。这些数据仅应分别放入生产环境和 stage 的 LocalConfiguration.php 中**!!!

如何部署

对于部署,您需要一个与您要执行的部署步骤同名的分支。

示例

  • 如果您想部署到 staging-environment,您必须将所有内容推送到 staging 分支。
  • 如果您想部署到生产环境,您必须将所有内容推送到 production 分支。

您还需要一个与您要部署的分支同名的 部署脚本,例如为 staging 分支使用 ./.surf/Staging.php

此外,还需要在 .surf/Credentials 中创建相应的 凭证文件。请使用上面的示例作为模板。

部署前

如果有任何未提交的更改,请将它们提交到相应的存储库,以防止在部署过程中调用 composer 时丢失。

如果您可能需要新的扩展,请别忘了在 packagist 上发布它。否则,它将无法在标准的 composer 更新过程中使用。

  • 为了使您的更改生效,composer.lock 必须获取新的版本信息。因此,在您的网站存储库中执行
vm$ composer update
  • 新的 composer.lock 也必须提交。因此,在执行部署之前,您需要推送您网站存储库中的更改。

部署

使用以下命令从您的 DocumentRoot 执行部署。

**重要:surf 扩展需要在 CLI 上使用 PHP 7** **重要:请不要用 root 或超级用户运行部署!!!始终使用您的本地用户(例如,通过 vagrant ssh 或通过 ddev ssh)** **重要:请登录到目标安装的 TYPO3 后端(Staging、Production 等),这样即使在 .surf 部署过程中出现故障或损坏,您也可以访问它**

vm$ php ./vendor/typo3/surf/bin/surf deploy <DEPLOYMENT-FILE>
vm$ php ./vendor/typo3/surf/bin/surf deploy Staging

如果出现问题,您可以使用详细的输出以获取更多信息

vm$ php ./vendor/typo3/surf/bin/surf deploy Staging -v
vm$ php ./vendor/typo3/surf/bin/surf deploy Staging -vv
vm$ php ./vendor/typo3/surf/bin/surf deploy Staging -vvv

重要提示

  • 确保已安装 PHP APCU
apt-get install php7.4-apc php7.4-apcu

当使用 doUpgrade 运行时

  • 在运行带有 doUpgrade = true 的部署之前,请确保您的 MySQL 用户有执行 mysldump 的正确权限
GRANT RELOAD, PROCESS ON *.* TO 'my-user'@'%';
FLUSH PRIVILEGES;
  • 如果您有一个外部服务器要访问,您至少需要安装 mysql-client
apt-get mysql-client
  • 如果您尝试通过 MySQL Client v8+ 访问较旧的 MySQL 版本,您应该在 /etc/mysql/my.cnf 中添加此行
[mysqldump]
column-statistics=0

10.4.0 版本中的更改

  • surf/shared/Data 中的符号链接文件夹已更改。请确保在您的目标服务器上创建以下文件夹或相应地移动现有文件夹。确保这些文件夹的权限都设置为您的 web 用户
mkdir typo3temp
mv assets typo3temp/assets
mkdir var
mv logs var/logs
mv labels var/labels
mkdir uploads
mkdir logs
  • 如果您一直在使用 \TYPO3\CMS\Core\Cache\Backend\ApcBackend,则在升级到 TYPO3 v10 之前,请从您的 LocalConfiguration.php 中删除此内容。否则,部署可能无法运行。
  • 现在扩展程序使用“public”作为Web目录(之前是“web”)。请确保您的Web目录和服务器上的符号链接已相应更改!