On version 2.4.4, Magento is able to handle blue/green deployment, making this module no more required.
To enable blue/green deployment you can add the deployment config deployment/blue_green/enabled
in file app/etc/env.php:
'deployment' => [
'blue_green' => [
'enabled' => true
]
]
magento/framework/Module/Plugin/DbStatusValidator.php magento/module-deploy/Model/Plugin/ConfigChangeDetector.php
Related commit is here: https://github.com/magento/magento2/commit/c241e11adf59baeca9d9e66cdbd726e4b0b88b21
⚠ Consequently, this module is now deprecated.
Disable native change detection from Magento2 to allow Zero Downtime Deployment (ZDD).
composer require zepgram/module-zero-downtime-deployment
bin/magento module:enable Zepgram_ZeroDowntimeDeployment
bin/magento setup:upgrade
By default, Zero Downtime is enabled on production mode and disabled on Magento's developer and default modes.
However, you can enable it for those modes from configuration path: dev/zero_downtime_deployment/is_always_enabled
This section is only visible on developer mode from back-office
For example, it can be useful to display errors when you roll-back your code while your database is ahead.
ZDD enables you to deploy your website without any downtime. However, this module contains only necessary changes to make it possible on Magento2.
To be able to perform a complete ZDD you'll need a blue/green deployment strategy. Which depends on your hosting provider.
For example:
- AWS: https://aws.amazon.com/fr/quickstart/architecture/blue-green-deployment/
- Kubernetes: https://kubernetes.io/blog/2018/04/30/zero-downtime-deployment-kubernetes-jenkins/
The mainly steps to reach the ZDD with Magento2:
- Start the deployment: green pods are the old one, for now they must stay active while creating blue pods.
- You must set your blue pods to a dedicated redis database and keep the green pods on their own redis db (avoiding cache corrupting).
- Run
bin/magento setup:upgrade --keep-generated
to upgrade your database. - Upgrading is done: now green pods must be killed and replaced by blue pods based on health check statement.
You can find a lot of articles detailling the procedure: