MageComm CLI is a command line tool for managing Magento applications. It provides a convenient way to execute restricted magerun commands, and cat specific files within an archive. The main use case for this tool is to provide a way to execute magerun commands in a controlled manner via a messaging service. This allows us to execute commands on a remote server without exposing the application server.
It is important to note that the environment configuration/env is important to set if you plan to use this tool in a shared rmq/sqs instance as this will prefix your queues to avoid cross communication
The tool looks for a configuration file in /etc/magecomm/(unix) / %APPDATA%\magecomm\(windows) config.yml|config.json and if none found defaults to environment variables, then fallback to default values.
Currently there is no custom code changes for akoova, this is a fork of the original repo to allow us to make changes if needed in the future
- Release-Please is disabled for this repository.
Quick install for M1/M2 mac:
wget https://github.com/akoova/MageComm/releases/download/v0.1.7-akoova/magecomm-darwin-arm64 && sudo mv magecomm-darwin-arm64 /usr/local/bin/magecomm && sudo chmod +x /usr/local/bin/magecomm
If you wish to run a command for a clients environment use the following command:
MAGECOMM_ENVIRONMENT=ce23 aws-vault exec sudo-elasteradev -- magecomm magerun cache:clean
As this is an akoova specific fork, we will be using akoova specific tag nomenclature with a semver postfix, e.g. v1.0.0-akoova
Currently this tool is in beta, and is not recommended for production use.
Install with binary and create configuration file in /etc/magecomm/(unix) / %APPDATA%\magecomm\(windows) or fallback to environment variables.
config file can be in yaml or json format e.g config.yml or config.json, please ensure you either set your n98 alias to magerun or explicitly set the path in the config file.
WARNING: environment variables are not secure and can be easily read/modified by any user
Download the latest release from the releases page for your platform and extract to a directory in your PATH.
Then check your installed version with magecomm version
example config.yml:
disallow_configfile_overwrite: true
magecomm_log_path: /var/log/magecomm.log
magecomm_log_level: warn
magecomm_max_operational_cpu_limit: 80
magecomm_max_operational_memory_limit: 80
magecomm_environment: dev
magecomm_magerun_command_path: /usr/local/bin/n98-magerun2 --root-dir=/var/www/html
magecomm_listener_engine: sqs
magecomm_listener_allowed_queues:
- magerun
magecomm_sqs_aws_region: eu-west-1
magecomm_rmq_tls: false
magecomm_rmq_user: guest
magecomm_rmq_pass: guest
magecomm_rmq_host: localhost
magecomm_rmq_port: 5672
magecomm_rmq_vhost: /
magecomm_slack_enabled: "true"
magecomm_slack_disable_output_notifications: "false"
magecomm_slack_webhook_url: https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX
magecomm_slack_webhook_channel: "magecomm"
magecomm_slack_webhook_username: "magecomm"
magecomm_listeners:
- magerun
magecomm_force_magerun_no_interaction: "true"
magecomm_allowed_magerun_commands:
- cache:clean
- cache:flush
- setup:static-content:deploy
...etc
magecomm_restricted_magerun_command_args:
setup:static-content:deploy:
- --jobs
...etc
magecomm_required_magerun_command_args:
setup:upgrade:
- --keep-generated
...etc
example config.json:
{
"disallow_configfile_overwrite": true,
"magecomm_log_path": "/var/log/magecomm.log",
"magecomm_log_level": "warn",
"magecomm_max_operational_cpu_limit": 80,
"magecomm_max_operational_memory_limit": 80,
"magecomm_environment": "dev",
"magecomm_magerun_command_path": "/usr/local/bin/n98-magerun2 --root-dir=/var/www/html",
"magecomm_listener_engine": "sqs",
"magecomm_listener_allowed_queues": [
"magerun"
],
"magecomm_sqs_aws_region": "eu-west-1",
"magecomm_rmq_tls": false,
"magecomm_rmq_user": "guest",
"magecomm_rmq_pass": "guest",
"magecomm_rmq_host": "localhost",
"magecomm_rmq_port": 5672,
"magecomm_rmq_vhost": "/",
"magecomm_slack_enabled": "true",
"magecomm_slack_disable_output_notifications": "false",
"magecomm_slack_webhook_url": "https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX",
"magecomm_slack_webhook_channel": "magecomm",
"magecomm_slack_webhook_username": "magecomm",
"magecomm_listeners": [
"magerun"
],
"magecomm_force_magerun_no_interaction": "true",
"magecomm_allowed_magerun_commands": [
"cache:clean",
"cache:flush",
"setup:static-content:deploy"
...etc
],
"magecomm_restricted_magerun_command_args": {
"setup:static-content:deploy": [
"--jobs"
]
...etc
},
"magecomm_required_magerun_command_args": {
"setup:upgrade": [
"--keep-generated"
]
...etc
}
...etc
}
--debug: Enable debug mode--config: Path to overwrite config file, argument can be disabled by default config file
e.g
magecomm --debug listen
magecomm --debug magerun cache:clean
magecomm --debug cat path/to/archive.tar.gz /path/to/file.txt
magecomm --config=/custom/config/path.json magerun indexer:status
magecomm --config=/custom/config/path.json --debug magerun indexer:reindex
- A proxy for the magerun command via rmq/sqs with restricted command usage, allowed commands via
MAGECOMM_ALLOWED_MAGERUN_COMMANDSwith deeper control of args offered by MAGECOMM_RESTRICTED_MAGERUN_COMMAND_ARGS and MAGECOMM_REQUIRED_MAGERUN_COMMAND_ARGS - Engine (sqs|rmq), default sqs, configured in config or by ENV
MAGECOMM_LISTENER_ENGINE - The command will publish a message and then listen for the outputs return
- Listen for messages from specified queues then handle them appropriately, fallback to config, then ENV
LISTENERS - Engine (sqs|rmq), default sqs, configured in config or by ENV
MAGECOMM_LISTENER_ENGINE
- Extract a file from an archive and print its contents to stdout, we read headers to avoid being tricked by incorrect file extensions
The tool can be configured using a yaml or json config file at /etc/magecomm/ (unix) | %APPDATA%\magecomm\ (windows), or using --config=/custom/config/path.json before the command e.g. magecomm --config=... magerun, or by ENV variables.
Magecomm has a fallback strategy of, config file -> ENV -> default values
You can disable by the config override argument by placing disallow_configfile_overwrite: true in the default config file
The tool can also supports slack command run notifications via Webhook or App integration
All caps for envs, lowercase for config file
-
MAGECOMM_LOG_PATH: Path to log file, default: SYSLOG -
MAGECOMM_LOG_LEVEL: Log level, default: WARN, options (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC) -
MAGECOMM_MAX_OPERATIONAL_CPU_LIMIT: Maximum CPU limit of system before we defer processing messages, default: 80 -
MAGECOMM_MAX_OPERATIONAL_MEMORY_LIMIT: Maximum memory limit of system before we defer processing messages, default: 80 -
MAGECOMM_ENVIRONMENT: the environment scope the tool is to work in, Defaultdefault -
MAGECOMM_LISTENERS: Comma-separated list of queues to listen to -
MAGECOMM_LISTENER_ENGINE: Listener engine to use (sqs/rmq), default: sqs -
MAGECOMM_LISTENER_ALLOWED_QUEUES: Comma-separated list of queues to allow to listen to, default:cat, magerun -
MAGECOMM_PUBLISHER_OUTPUT_TIMEOUT: Timeout for when listening to publisher message output return, default: 60s -
MAGECOMM_MAGERUN_COMMAND_PATH: Path to magerun command, default:magerun(expected alias of n98-magerun2.phar or /usr/local/bin/n98-magerun2 --root-dir=/magento/root/path) -
MAGECOMM_FORCE_MAGERUN_NO_INTERACTION: Force magerun to run in no interaction mode, default:true -
MAGECOMM_ALLOWED_MAGERUN_COMMANDScomma separated list of commands allowed to be run, fallback to in-code list -
MAGECOMM_RESTRICTED_MAGERUN_COMMAND_ARGSJSON object of commands and their restricted args, default:{} -
MAGECOMM_REQUIRED_MAGERUN_COMMAND_ARGSJSON object of commands and their required args, default:{} -
MAGECOMM_SQS_AWS_REGION: AWS region to use for SQS, default: eu-west-1 -
MAGECOMM_DEPLOY_ARCHIVE_PATHpath to the folder that contains the archives which are deployed, default:/srv/magecomm/deploy/ -
MAGECOMM_DEPLOY_ARCHIVE_LATEST_FILEFilename of the latest archive (symlink), default:latest.tar.gz, if no value is set then MageComm will pick the latest created archive -
MAGECOMM_RMQ_HOSTDefault:localhost -
MAGECOMM_RMQ_PORTDefault:5672 -
MAGECOMM_RMQ_USERDefault: `` -
MAGECOMM_RMQ_PASSDefault: `` -
MAGECOMM_RMQ_TLSDefault:false -
MAGECOMM_RMQ_VHOSTDefault:/ -
MAGECOMM_SLACK_ENABLEDDefault:false, (true|false), if true you must configure the WEBHOOK or APP configurations to work. When true will send to slack a message when a command has executed with the command, the environment it was on and the commands output -
MAGECOMM_SLACK_DISABLE_OUTPUT_NOTIFICATIONSDefault:false, (true|false), if true command outputs will not be sent to slack along with the execution message -
MAGECOMM_SLACK_WEBHOOK_URLDefault: `` -
MAGECOMM_SLACK_WEBHOOK_CHANNELDefault: `` -
MAGECOMM_SLACK_WEBHOOK_USERNAMEDefault: `` -
MAGECOMM_SLACK_APP_TOKENDefault: `` -
MAGECOMM_SLACK_CHANNELDefault: `` -
MAGECOMM_SLACK_USERNAMEDefault: `` -
``
If using SQS the Pod/Instance this is deployed on must have an IAM role with the following permissions:
sqs:ReceiveMessagesqs:DeleteMessagesqs:DeleteMessageBatchsqs:GetQueueUrlsqs:ListQueuessqs:SendMessagesqs:SendMessageBatchsqs:GetQueueAttributessqs:ChangeMessageVisibilitysqs:ChangeMessageVisibilityBatchsqs:purgeQueuests:GetCallerIdentity
-
Listen to messages from
magerun:
magecomm listen magerun -
Execute a magerun command using SQS as the publisher engine:
magecomm magerun cache:clean
magecomm magerun setup:upgrade --keep-generated -
Extract and print the contents of a file from an archive (RAR, 7zip, and Xz are supported if installed)):
magecomm cat path/to/archive.zip /path/to/file.txt
magecomm cat path/to/archive.tar /path/to/file.txt
magecomm cat path/to/archive.tar.gz /path/to/file.txt
magecomm cat path/to/archive.tar.bz2 /path/to/file.txt
magecomm cat path/to/archive.tar.xz /path/to/file.txt
magecomm cat path/to/archive.rar /path/to/file.txt
magecomm cat path/to/archive.7zip /path/to/file.txt