Magento 2 Deployment & CLI
Before writing code
Fetch live docs:
- Fetch
https://experienceleague.adobe.com/en/docs/commerce-operations/configuration-guide/cli/set-modefor deployment modes - Fetch
https://experienceleague.adobe.com/en/docs/commerce-operations/configuration-guide/cli/static-view/static-view-file-deploymentfor static content deploy - Web-search
magento 2 zero downtime deploymentfor zero-downtime strategies
Deployment Modes
| Mode | Errors | Static Files | DI Compilation | Use Case |
|---|---|---|---|---|
| Developer | Displayed | Generated on demand | Automatic | Local development |
| Production | Logged only | Pre-deployed | Pre-compiled | Live site |
| Default | Not displayed | On demand | Not optimized | Initial install |
bin/magento deploy:mode:show
bin/magento deploy:mode:set production
bin/magento deploy:mode:set developer
Production Deployment Steps
Standard Sequence
# 1. Enable maintenance mode
bin/magento maintenance:enable
# 2. Pull latest code (git pull, composer install)
composer install --no-dev --optimize-autoloader
# 3. Run setup upgrade (applies db_schema changes and patches)
bin/magento setup:upgrade
# 4. Compile DI (generates interceptors, factories, proxies)
bin/magento setup:di:compile
# 5. Deploy static content (CSS, JS, images, templates)
bin/magento setup:static-content:deploy en_US --jobs=4
# 6. Flush cache
bin/magento cache:flush
# 7. Disable maintenance mode
bin/magento maintenance:disable
Static Content Deploy Strategies
- quick — minimizes deployment time by reusing files across locales (default in 2.4+)
- compact — minimizes disk space
- standard — full deployment
- Flags:
--exclude-theme,--no-html-minify,--jobs=Nfor parallelism
Zero-Downtime Deployment
Pipeline Deployment
Build and deploy on separate systems:
- Build server:
setup:di:compile+setup:static-content:deploy - Transfer artifacts to production
- Production:
setup:upgrade --keep-generated(no recompilation)
Blue-Green Deployment
Two identical environments with load balancer switching:
- Native support since 2.4.4:
deployment/blue_green/enabledinapp/etc/env.php - Deploy to inactive environment, test, switch traffic
- Instant rollback by switching back
Symlink Switching
- Deploy to versioned directories (
releases/20260214/) - Switch
currentsymlink to new release - Shared directories for
var/,pub/media/,app/etc/env.php - Tools: Deployer (deployer.org), Capistrano, custom scripts
Essential CLI Commands
Module Management
bin/magento module:enable VendorName_ModuleName
bin/magento module:disable VendorName_ModuleName
bin/magento module:status
Cache Management
bin/magento cache:clean # Clean invalidated cache types
bin/magento cache:flush # Flush all cache storage
bin/magento cache:status # Show cache type status
bin/magento cache:enable <type>
bin/magento cache:disable <type>
Indexer Management
bin/magento indexer:reindex
bin/magento indexer:status
bin/magento indexer:set-mode schedule
Cron
bin/magento cron:run
bin/magento cron:install
Admin
bin/magento admin:user:create
bin/magento admin:user:unlock <username>
Development
bin/magento dev:profiler:enable
bin/magento dev:template-hints:enable
bin/magento setup:config:set --<option>=<value>
CI/CD Pipeline Pattern
- Lint/Static Analysis: PHP_CodeSniffer, PHPStan, Magento coding standard
- Unit Tests:
vendor/bin/phpunit -c dev/tests/unit/phpunit.xml.dist - Build:
composer install --no-dev,setup:di:compile,setup:static-content:deploy - Integration Tests (optional, slow): against test database
- Deploy: transfer artifacts,
setup:upgrade, cache flush - Smoke Test: verify critical pages load
Best Practices
- Never run
setup:di:compileorsetup:static-content:deployon production during traffic - Use pipeline deployment for zero-downtime
- Use
--jobs=Nfor parallel static content deployment - Automate deployment — manual steps are error-prone
- Always take database backups before
setup:upgrade - Test deployment on staging before production
Fetch the deployment documentation for exact CLI options, mode-switching requirements, and pipeline deployment configuration before deploying.