staempfli / magento2-deployment-tool
Staempfli AG Magento2 部署工具
Requires
- n98/magerun2: ^1.4
- phing/phing: 2.*
- staempfli/cachetool: 2.1.0
- staempfli/symlinker-pro: ~1.0
README
此工具已被弃用,改为使用magento2-deployer-plus。尽管此存储库将保留且工具可支持到 Magento 2.2.3,但我们将不再添加更新。进一步的开发将在新的工具magento2-deployer-plus上进行。
如果您曾使用此工具,我们鼓励您迁移到新工具。新工具是此工具的改进版本,使用 deployer。新工具支持 Magento 版本 <= 2.1
。
您可以在其存储库中找到有关新工具的所有信息
Magento 2 部署工具
使用 PHing 创建的用于 Magento 2 的部署工具。此工具将新项目版本构建到单独的目录中,并在最后切换到实时版本。
使用 Magento >= 2.2
功能的零停机时间部署
工作流程
1. Get new Project version (i.e git clone, curl, ...)
2. Build Project (i.e composer install, untar, ...)
3. Symlinks to shared content in server
4. Generate Magento files and permissions (Skipped if `build.project.type=artifact`)
6. Set Maintenance (if needed)
7. Database backup (if needed)
8. Magento setup:upgrade (if needed)
9. Replace live version with new one
10. Unset maintenance
11. Clean up old releases and backups
演示
- 部署 git 仓库
- 部署 .tar 归档
安装
需要使用 composer 进行全局安装。
-
Composer require
composer global require "staempfli/magento2-deployment-tool":"~2.0"
-
检查您全局 composer 的
bin-dir
配置composer global config -l | grep "bin-dir"
-
将上一步骤中的路径添加到您的
$PATH
配置中 -
在新控制台标签页中打开并检查是否找到了
mg2-deployer
工具which mg2-deployer
设置
-
需要项目克隆中的
config.php
文件。- 如果您尚未以这种方式配置项目,可以遵循以下文档
-
创建数据库
CREATE DATABASE <database_name>; CREATE USER `<database_user>`@`<database_host>` IDENTIFIED BY "<user_password>"; GRANT ALL ON <database_name>.* TO `<database_user>`@`<database_host>`;
-
运行设置:(这可能会因为 Magento 编译而需要几分钟时间)
mg2-deployer setup
-
在流程结束时,您应该得到一个类似于以下的文件夹结构
| - backups
| - deployment-settings
| - public_html (Symlink)
| - releases
| - tmp-downloads
| - shared
| - magento
| - app (etc/env.php)
| - pub
| - media
| - var
| - log
使用方法
工具必须在部署项目的路径下执行。
-
部署新版本
mg2-deployer release [-Drelease.version=<version_number>]
-
其他可用命令
mg2-deployer -list Main targets: ------------ release Options -> [skipCronInstall|skipDatabaseBackup|finishWithMaintenance] maintenance:set Set maintenance window maintenance:unset Replace maintenance window with a specific released version release:live:replace Set a specific release as live version cache:clean:all Clear all caches (Magento, OPcache, Varnish)
自定义配置
属性
您可以根据需要自定义属性
在服务器上
deployment-settings/project.properties
- 该文件中添加的属性将覆盖默认属性
在项目中
{{PROJECT_ROOT}}/config/project.properties
- 如果您想在项目中共享属性,可以将它们添加到该文件中。
- 此处添加的属性具有最高优先级,并将覆盖
deployment-settings/project.properties
和默认属性。
您可以在
维护窗口
您可以使用自己的设计编辑维护文件
vim deployment-settings/templates/maintenance/${magento.dir}/pub/index.php
共享内容 & 符号链接
-
仅在服务器上相关的静态内容将保存在
shared
文件夹中。 -
在每次部署过程中,发布项目中会自动创建符号链接。
-
您可以通过编辑文件
deployment-settings/shared.symlinks
来添加您自定义的符号链接shared/magento/app/etc/env.php=>{{MAGENTO_DIR}}/app/etc/env.php shared/magento/pub/media=>{{MAGENTO_DIR}}/pub/media shared/magento/var/log=>{{MAGENTO_DIR}}/var/log
- 注意:您必须将
{{MAGENTO_DIR}}
替换为您的 magento 目录或如果与根项目相同,则替换为.
- 注意:您必须将
脚本
您可以在以下文件中设置在发布过程结束时运行的定制脚本
cp deployment-settings/scripts/release-after.sh.dist deployment-settings/scripts/release-after.sh
vim deployment-settings/scripts/release-after.sh
从工件构建项目
如果您选择 build.project.type=artifact
,以下为获取和构建项目文件的默认属性
command.get.project.artifact=
command.build.project.artifact=mkdir -p ${release.target} && tar -xzf ${downloads.target}.tar.gz -C ${release.target}
此配置期望 artifact
以 .tar.gz
扩展名在 tmp-downloads
中可用。
如果您需要从不同的服务器获取 artifact
,您可以修改属性如下
command.get.project.version=scp <user>@<server_domain>:<path>${release.version}.tar.gz ${downloads.target}.tar.gz
注意 ${}
变量在部署期间会自动替换。
技巧
加速开发服务器上的部署过程
-
发布 develop 分支的最新版本
-Drelease.version=develop
-
跳过数据库备份步骤
-DskipDatabaseBackup
-
您甚至可以在
deployment-settings/project.properties
中将这些选项设置为默认选项vim deployment-settings/project.properties release.version=develop skipDatabaseBackup=1
故障排除
JavaScript 翻译缺失(magento 版本 >=2.1.3 <2.2.1)
-
问题:在执行
setup:static-content:deploy
时,已知的 Magento 问题会影响多个语言。 -
GitHub 问题:
-
解决方案:在
2.2.1
中得到修复之前,唯一的解决方案是针对每种语言单独执行setup:static-content:deploy
。要使用mg2-deployer release
自动运行,您需要编辑以下内容-
vim deployment-settings/project.properties
-
在
static-content.languages
上设置仅 1 种语言static-content.languages=en_US
-
在
command.static-content.deploy.options
上添加您剩余的语言,为每种语言使用以下命令&& ${bin.n98-magerun2} --root-dir=${release.target}/${magento.dir} setup:static-content:deploy de_CH
-
结果将类似于以下示例
static-content.languages=en_US command.static-content.deploy.options=--exclude-theme Magento/luma --exclude-theme Magento/blank && ${bin.n98-magerun2} --root-dir=${release.target}/${magento.dir} setup:static-content:deploy de_CH --exclude-theme Magento/luma --exclude-theme Magento/blank && ${bin.n98-magerun2} --root-dir=${release.target}/${magento.dir} setup:static-content:deploy fr_FR --exclude-theme Magento/luma --exclude-theme Magento/blank
-
编译错误
- 解决方案:将 php 的
memory_limit
配置增加到 728M 或 1024M
设置新模板时的静态部署错误(如果没有使用配置传播)
-
问题:
- [LogicException] 无法通过指定键 'Template' 加载主题
- @variable 在文件中未定义
-
原因:如果设置了新模板,在执行
setup:static-content:deploy
之前需要先运行setup:upgrade
-
解决方案:在首次部署新模板时跳过
setup:static-content:deploy
。按照以下步骤进行发布mg2-deployer release -DfinishWithMaintenance -DskipStaticContentDeploy
<latest_release>/<magento_bin> setup:static-content:deploy <language1> <language2> ...
mg2-deployer maintenance:unset
之后,未来的部署将不会出现任何问题
先决条件
- PHP >= 7.0.8
- MAGENTO >= 2.2.1(对于旧版本的 MAGENTO,请使用
staempfli/magento2-deployment-tool:^1.2
)
变更日志
开发者
许可
版权
(c) 2016 Staempfli AG