devture / symfony-web-command-bundle
允许通过网页以安全方式调用控制台命令的Symfony扩展包
Requires
- php: >=8.0
- symfony/console: >=4.0,<8.0-dev
- symfony/framework-bundle: >=4.0,<8.0-dev
This package is auto-updated.
Last update: 2024-09-16 15:18:24 UTC
README
这是一个允许您以安全方式从网页执行应用程序控制台命令的Symfony扩展包。
在无法直接运行控制台命令(例如cron)但可以从网页访问应用程序的环境中非常有用。它可以让您将cron作业从类似以下内容
* * * * * user php /app/bin/console ticket:purge
转换为
* * * * * user curl -sS -XPOST -H 'Authorization: Bearer SECRET' http://application/web-command/execute/ticket:purge
安装
通过composer安装(composer require devture/symfony-web-command-bundle:dev-master
)。
添加到 config/bundles.php
Devture\Bundle\WebCommandBundle\DevtureWebCommandBundle::class => ['all' => true],
配置
在 config/packages/devture_web_command.yaml
中添加以下路由配置
devture_web_command: auth_token: '%env(DEVTURE_WEB_COMMAND_AUTH_TOKEN)%' forced_uri: '%env(DEVTURE_WEB_COMMAND_FORCED_URI)%'
环境变量 DEVTURE_WEB_COMMAND_AUTH_TOKEN
应包含您的认证密钥。请使用强密钥(例如,使用 pwgen -Bsv1 64
)。
环境变量 DEVTURE_WEB_COMMAND_FORCED_URI
包含指向应用程序的外部URL,以便在本地调用“控制台命令”(例如 curl http://localhost/web-command/...
)时仍生成正确的完整URL。示例值:https://example.com
。也可以留空(空字符串),以避免强制设置并依赖自动检测。
路由
在 config/routes/DevtureWebCommandBundle.yaml
中添加以下路由配置
DevtureWebCommandBundleWebsite: prefix: /web-command resource: "@DevtureWebCommandBundle/Resources/config/routes/website.yaml"
安全
如果您使用Symfony的Security组件来保护URL模式,您可能希望调整防火墙以不阻止 /web-command
请求。
修改: config/packages/security.yaml
security: # Other stuff.. access_control: # Other stuff.. - { path: ^/web-command/, role: IS_AUTHENTICATED_ANONYMOUSLY } # Other stuff.. - { path: ^/, role: ROLE_USER }
用法
通过向 /web-command/execute/:commandName
路由发送 POST
请求来从网页执行命令。
您需要使用提供给扩展包的认证令牌进行认证(通常存储在 DEVTURE_WEB_COMMAND_AUTH_TOKEN
环境变量中)。
基本调用可能如下所示(此例中使用 cURL)
curl \
-sS \
-XPOST \
-H 'Authorization: Bearer SECRET' \
http://application/web-command/execute/commandName
您可以向此URL端点发送 POST
JSON有效负载来配置它。示例
# outputVerbosity = 256 means "debug". See the `OutputInterface:VERBOSITY_` constants.
curl \
-sS \
-XPOST \
-H 'Authorization: Bearer SECRET' \
--data '{"input": {"days": 10, "--something": 4}, "outputVerbosity": 256}' \
http://application/web-command/execute/ticket:purge