Joomla 4:强大的 CLI 应用程序
随着 Joomla 4 的发布,引入了新的和改进的 CLI(命令行界面),它位于 Joomla 核心中。您现在可以在不登录网站的情况下执行维护任务。让我们来看看。
“一个 Joomla,适用于所有人”,这是一个大胆的声明。但,这确实是事实。一方面,Joomla 是一个用户友好的 CMS,具有直观的管理面板,适合初学者和偶尔的用户。另一方面,Joomla 是一个功能强大的 CMS 应用程序,拥有丰富的功能,适合高级用户。因此,Joomla 完全适合所有类型的 Web 应用程序,从简单的 5 页业务网站到繁忙在线商店的复杂电子商务解决方案。
事实上,如果您浏览 JED(Joomla 扩展目录),几乎可以找到您想要制作的任何东西的扩展。如果您计划中的网站没有可用的扩展,请不要担心。有扩展可以帮助您构建自己的自定义、独一无二的 Joomla 扩展。
您甚至可以从头开始,使用 Joomla 的标准、结构良好的框架来构建自己的扩展。如果成功,您可以将其添加到 JED,让其他人使用您的扩展。
这会有多酷呢?
Joomla 和 Joomla 4 使得这成为可能的一种方式是,它带有 新的和改进的 CLI(命令行界面),这是 Joomla 4 核心的组成部分。
让我们来看看 CLI,了解您可以做什么。
随着年份的推移和技术的进步,Joomla 正在使执行某些任务变得更加容易,而无需登录到管理仪表板。我们最近讨论了 Joomla 的任务计划程序 ,它允许您在 Joomla 内部设置 Cron 作业以重复执行任务。还有 Joomla API,可以从远程源/网站控制 Joomla。还有 Joomla 的 CLI。
Joomla 的 CLI 是一种连接到您的 Joomla 网站并从远程终端(例如,从您的网站托管控制面板的 SSH)执行任务的方式。
如果您从同一个托管帐户运行多个网站,这将特别有用且节省时间。
让我们首先了解什么是命令行界面。
什么是命令行界面?
命令行界面(CLI)是一种基于文本的用户界面(UI),用于运行软件、管理计算机文件以及与计算机/服务器交互。CLI允许用户通过在界面中输入单个命令来响应视觉提示,并以相同的方式接收响应。Windows命令提示符是一个您可能已经熟悉的命令行界面。
用户通过在指定的行中输入命令来响应视觉提示,并从操作系统那里收到回复。此软件提供提示,用户做出响应,然后应用程序按顺序对命令做出反应。通过这种命令和响应的交互,用户可以发出一系列由系统或Joomla等应用程序执行的命令。
可用的提示和命令取决于您的操作系统和特定的命令行界面,但可能有数百甚至数千种不同的可执行命令。许多命令在不同平台之间是相同的,您可能已经熟悉其中的一些。然而,有些命令是特定于您使用的特定CLI和应用程序的。
您可能已经熟悉了各种可以使用的命令行界面的应用程序。常见的应用程序包括Mac上的“终端”,在Windows上被称为“命令提示符”,以及在网站服务器的控制面板中引用为SSH。
使用文本命令来控制您的应用程序可能一开始看起来很令人畏惧,但这是Linux和其他基于Unix的操作系统中广泛使用的技能。如果您想成为一名网站开发者,这也是一项值得学习的技能。一旦您熟悉了使用CLI的术语,您在磨练技能的过程中还会遇到其他用途。
例如:
在JetBrains Webstorm等编辑器中,使用Node.js制作网络应用程序。
或者,
使用PuTTY或SSH等远程终端程序在Amazon的弹性计算云(Amazon EC2)实例上为客户运行命令。
然而,对于初学者来说,有基于GUI的“外壳”可用,被认为更容易使用。严格来说,术语“外壳”通常用于描述命令行解释器。外壳可以是任何包含UI的程序,包括完全面向图形的程序。
Joomla的CLI在哪里?
与其他许多您可以在Joomla网站管理区域找到的Joomla扩展不同,Joomla的命令行界面是核心的一部分。因此,没有可调整的设置,它只是在那里默默地运行在您的Joomla网站后台。
如何使用Joomla的CLI?
首先。在您能够访问Joomla CLI之前,您需要创建一种直接连接到您网站主机的方法,而无需实际登录到您的Joomla或您的主机Cpanel。
如果您的计算机上运行Windows,Cpanel建议使用名为“PuTTY”的桌面应用程序,尽管如果您运行Windows 10或更高版本,它有自己的Windows SSH客户端,您可以从命令提示符中访问。
要访问命令提示符,请打开运行对话框,按Windows键 + r。然后在运行对话框中,输入cmd,然后单击“确定”以打开命令提示符窗口。
如果您使用Linux或运行Mac,您可能已经安装了软件以直接连接到您的网站服务器。在本文的基础上,我将假设您正在运行Windows,因为我也是。
访问您网站服务器的方式类似,但在您能够连接到Joomla的CLI之前,您必须先在网站托管控制面板上设置SSH访问。
对于这篇文章,我将在Windows 8机器上使用‘PuTTY’,因为在设置过程中我遇到了一些问题,所以我会和你分享一些,以节省你设置SSH访问网站服务器的部分时间。
因此,请前往‘PuTTY’下载页面,并根据需要在你的机器上安装‘PuTTY’。
下一步是在你的Web托管Cpanel上激活SSH,或者其他Web托管控制面板,比如Plesk。我们将坚持使用Cpanel,因为它是最受欢迎的。
设置您的访问密钥
要使用SSH,您需要在Cpanel中设置和管理一对公钥/私钥。起初,这些说明看起来很复杂,但实际上非常简单。A2 Hosting网站上有一篇很好的文章,其中包含了针对不同操作系统的许多信息。根据不同的主机,说明可能会有所不同,所以我鼓励你针对你的特定用途进行这项研究。
还值得记住的是,您需要将您的私钥下载到您的计算机上,所以记得您将其放在了哪里。如果您在Mac/Linux或Windows 10上使用本机SSH客户端,您应该将密钥文件保存到
Mac/Linux: /home/username/.ssh目录。(用您的用户名替换username。)
Windows 10: \Users\username\.ssh目录(用您的用户名替换username。)
这是为了让您的终端程序知道在哪里找到您的密钥。
如果您使用‘PuTTY’,只需记住它的下载位置,因为您需要在‘PuTTY’的设置中引用它。
设置PuTTY以访问您的服务器
如果您已经安装了‘PuTTY’,找到桌面图标并打开程序。如果没有,现在就安装它。打开PuTTY的桌面图标看起来是这样的
设置PuTTY以访问您的服务器并不困难,您只需要输入3件事。这可能会根据您的网站主机略有不同,所以您需要检查自己的情况。以我的情况为例,我需要做以下操作
- 输入我的托管账户的用户名以及我想要访问的域名。这需要在“会话”分类标签页中的“主机名(或IP地址)”字段中写入。
- 接下来,在“端口”字段中,输入您的SSH连接端口号。默认端口是22,但许多主机将其更改为提高连接安全性。我的端口是7822。
- 现在,您需要在分类树中打开一个新的选项卡,滚动到“SSH”,然后打开“Auth”。在该选项卡的底部,浏览到您保存下载的SSH私钥的位置,高亮显示它,然后单击“打开”。
- 返回到“会话”选项卡,在“保存会话”字段中添加一个容易记住的名称。然后单击“保存”按钮。
- 现在,您已经准备好使用“PuTTY”连接到您的网站托管SSH客户端。您可以通过双击保存的容易记住的名称,或者单击打开按钮来实现。
如果一切按计划进行,您现在应该看到PuTTY的终端窗口。它应该看起来像这样
从这一点开始,无论您使用的是哪个操作系统或SSH客户端,终端窗口都应该看起来相似。您发出的命令也将相同。因此,我将只提到“终端”。
下一步是输入您在Cpanel中设置公钥/私钥时创建的密码。如果您在规定时间内没有这样做,您的网站服务器将关闭与您的终端的连接,您将收到类似于以下错误消息
使用终端连接到您的网站服务器有一个奇怪的地方。在输入密码时,没有任何显示!没有星号,没有破折号,什么都没有。我还注意到,我无法将密码复制粘贴到终端窗口中(虽然这可能只针对‘PuTTY’)。
我是一个超级长强密码的倡导者,但这个可能是个例外!虽然我仍然建议您遵循Cpanel对创建密码强度的建议。如前文所述,john123是不够好的。根据您的SSH密钥、操作系统和Cpanel实例,您可能只需输入密码进行初始连接。但后续会话将不会要求您输入密码。这可能会或可能不会让您担心。
使用终端访问Joomla的CLI
所以,请输入您的密码,完成后,按键盘上的“Enter”键。
如果一切顺利,您应该会看到一行新信息,如下所示
username@123host [~] #
这是您的网站文件的根目录。根据您的网站托管套餐,这可能会在您的“public_html”文件夹中。
如果您将Joomla安装到了不同的目录,您需要导航到该目录。如果您在同一托管套餐上运行多个Joomla实例,这也适用。
是时候翻出您那本老DOS手册了!
在我的例子中,我的域名designwebs.co.uk位于我的public_html文件夹之外的文件夹中,如下所示
如果您还记得DOS命令,您只需输入cd [您的文件夹名称],在我的例子中是cd desighwebs.co.uk,在您的终端窗口的光标闪烁处。CD是简码,仅表示“更改目录”。
我现在已进入可以操作Joomla CLI的正确目录。如果您想检查您是否在Joomla所在的同一目录中,您可以在提示符下简单地输入‘dir’(简写为'directory'),该目录下所有熟悉的Joomla文件和文件夹都会列出。如下所示
让我们使用Joomla的CLI
看起来花了很长时间才到达这个阶段,但一旦您掌握了终端窗口或像‘PuTTY’这样的SSH客户端的使用,就不应该花太多时间。Joomla CLI的全部目的是为了加快任务的速度,特别是那些需要等待任务完成的任务。备份您的网站是使用Joomla CLI的一个好例子。我们稍后会详细介绍。
所以,让我们第一次调用Joomla的CLI,确保我们已经连接并一切按预期工作。
连接到Joomla CLI的标准格式以
php cli/joomla.php
开头。虽然如果您进入cli目录(cd my-website-folder-name/cli),而不是从Joomla的根目录开始工作,您可以使用
php joomla.php
代替。
更新的Joomla CLI文档提供了关于您可以使用Joomla CLI完成的任务更多信息。
测试我们的连接的一个好任务就是找出网站正在运行的Joomla版本。
所以,在命令提示符下输入
php cli/joomla.php core:check-updates
然后按回车。
PuTTY提示
如果您使用复制粘贴功能复制Joomla CLI命令,只需将鼠标右键单击PuTTY终端中的光标即可粘贴它。
如果您已连接且一切正常,您将获得一条消息,详细说明您的网站正在运行的Joomla版本。
Joomla命令行界面(CLI)格式
当你在终端中输入命令以访问Joomla的命令行界面(CLI)时,有一个固定的格式。
这个格式可能包括2个或更多部分,具体取决于你想做什么,以及你需要多少信息。
每个Joomla组件的开发者都将能够根据Joomla的CLI提供不同数量的控制和数据检索。Akeeba是早期采用这种Joomla功能的例子,因此以Akeeba Backup为例,你几乎可以从你的终端控制所有功能。
以下CLI命令请求特定备份保留的备份数据
php cli/joomla.php akeeba:backup:info 1 --format=json
所以,让我们分解它,使其有意义。
php cli/joomla.php |
激活Joomla CLI所需的URL |
akeeba |
命令的唯一名称 |
backup |
特定的软件 |
info |
你想要执行的操作 |
1 |
命令的参数(如果有需要) |
--format=json |
一个选项,或者两个。在这种情况下,我们的CLI命令的输出将以Json格式。 |
请确保注意命令中的空格和冒号,以确保它正常工作。
Joomla的CLI命令遵循类似参数和选项的原则,但作为“核心”命令,它们要简单一些。
目前,Joomla的CLI命令分为11类
缓存、配置、核心、数据库、扩展、查找器、计划程序、会话、站点、更新和用户。
各自有自己的功能。
例如
php cli/joomla.php core:check-updates 检查Joomla更新
php cli/joomla.php site:down 将网站置于离线模式
向CLI命令的参数中添加选项可以帮助缩小结果。例如,如果你想找到他们用来构建网站的工具扩展,你会使用以下命令
php cli/joomla.php extension:list
但是,如果你只想找到特定类型的扩展,例如与语言相关的扩展,你将使用相同的命令但添加选项 --type=language
php cli/joomla.php extension:list --type=language
这将返回以下信息
已安装的扩展。
=====================
----------------- -------------- --------- ---------- --------
名称 扩展ID 版本 类型 激活
----------------- -------------- --------- ---------- --------
English (en-GB) 222 4.1.4 language Yes
English (en-GB) 223 4.1.4 language Yes
English (en-GB) 224 4.1.4 language Yes
----------------- -------------- --------- ---------- --------
提示
如果你在终端的命令提示符中输入php cli/joomla.php,你将获得所有Joomla CLI命令及其描述的列表。
开始使用Joomla的CLI
我们将运行4项基本维护任务,你应该定期在我们的Joomla网站上完成这些任务。所有操作都在终端中完成,无需登录到Joomla的后端管理。我们将使用4个简单的CLI命令来完成这些任务。
首先,我们需要收集我们将要使用的命令。你可以在下面的备忘单中找到当前Joomla CLI命令。由于Akeeba Backup 是最广泛使用的Joomla备份扩展,我们将使用它来进行备份。
我们需要以下CLI命令
php cli/joomla.php update:extensions:check
php cli/joomla.php akeeba:backup:take
php cli/joomla.php extension:discover:install
php cli/joomla.php cache:clean
如果你还没有,请登录到你选择的终端,并确保你位于Joomla的根目录。
任务一:检查扩展更新
在终端命令提示符中输入 php cli/joomla.php update:extensions:check。
在我的情况下,没有可安装的更新。成功消息以绿色显示。我说这个命令执行的时间不到3秒。
任务二:进行备份
现在是时候使用Akeeba Backup进行备份了。在您的终端命令提示符中输入 php cli/joomla.php akeeba:backup:take。
进行备份显然需要一些时间。在备份过程中,进度会在终端窗口中详细显示,就像在Joomla的管理后端中看到的那样。
备份成功的显示为绿色。从时间戳中,您可以看到它只用了1分10秒就完成了。这很不错。
任务三:安装扩展更新
现在是时候安装任何扩展更新了。在终端命令提示符中输入 php cli/joomla.php extension:discover:install。
在我的情况下,所有内容都是最新的,所以没有要安装的。如果是这种情况,CLI会提供一些替代建议。在这种情况下,Joomla CLI建议尝试运行命令extension:discover。这与从系统仪表板运行“安装 > 发现”选项的方式相同。
任务四:清除Joomla的缓存
最后,我们将清理Joomla的缓存。在您的终端命令提示符中输入php cli/joomla.php cache:clean。
一旦清除了缓存中的垃圾,您将再次看到绿色的成功消息。
错误信息
如果您在输入CLI命令时出现拼写错误,或者输入了未识别的命令,您将收到红色错误消息。消息将包含一些有用的信息,以帮助您找出出错的原因。您可以在下面的图片中看到
命令“cache:clea”未定义
命令“cache:clea”不存在
当然,我提到的“cache:clea”错误在Joomla CLI中不存在,因此它没有定义执行的动作。因此,它会抛出错误。
在管理员中检查Akeeba Backup
并不是总能检查CLI命令是否实际上已启动,而不需要在Joomla的文件和设置中进行一些挖掘。但是,一些扩展使这变得容易。让我们再次看看Akeeba Backup。如果您登录到Joomla管理员面板并导航到Akeeba Backup的控制面板,您将在右侧看到“备份统计”面板。在这里,您可以查看最后一个是通过命令行启动的备份。它还提供了关于备份详情和执行时间的信息。
使用Joomla CLI的好处是什么?
像这里讨论的许多主题一样,下面还有很多东西在幕后进行,但没有时间和空间来详细说明。像许多主题一样,对更新后的Joomla 4功能,“表面上的问题只是刚刚开始”。
我认为掌握Joomla命令行界面的最大好处是执行必要任务的速度很快。上述四个任务从开始到结束大约花了2分钟,包括启动“PuTTY”终端,通过SSH连接到我的服务器,手动输入登录密码以及逐个复制/粘贴四个命令。
如果您在多个网站上执行相同的任务,这将节省大量时间。
对于高级用户,命令行和终端允许您在您完全访问的多个网站上自动化重复性任务。您可以遍历它们的目录并针对它们执行相同的Joomla CLI命令,快速而容易。
想象一下手动登录Joomla管理员并单独在您的100多个网站中运行Akeeba Backup需要多长时间?
“这正是命令行应用程序的全部意义。它非常有利于无限定制。结合像Ansible 这样的工具,甚至可以用来在运行数千个站点的数百台服务器上执行命令。”
命令行工具协同工作,赋予您超级能力。
引言:尼古拉斯 @ Akeeba
个人来说,现在我已设置好“PuTTY”,打算为我的所有网站添加SSH访问权限,并每次收到那些“此更新来自您的网站”的邮件时,就运行那些更新、备份和缓存清理操作。我认为最初投资时间去创建SSH访问密钥和设置终端是值得的。我甚至可能花时间去编写一个批处理命令,以便依次遍历每个网站!
在评论区告诉我您将如何使用Joomla的命令行界面
Joomla CLI 快速参考表
php cli/joomla.php (+ 命令)
缓存 | |
cache:clean | 清理过期的缓存条目 |
配置 | |
config:get | 显示配置选项的当前值 |
config:set | 为配置选项设置值 |
核心 | |
core:check-updates | 检查Joomla更新 |
core:update | 更新Joomla |
数据库 | |
database:export | database:export |
database:import | 导入数据库 |
扩展 | |
extension:discover | 发现扩展 |
extension:discover:install | 安装发现的扩展 |
extension:discover:list | 列出发现的扩展 |
extension:install | 从URL或路径安装扩展 |
extension:list | 列出已安装的扩展 |
extension:remove | 删除扩展 |
查找器 | |
finder:index | 清除和重建索引 |
调度器 | |
scheduler:list | 列出所有计划任务 |
scheduler:run | 运行一个或多个计划任务 |
scheduler:state | 启用、禁用或删除计划任务 |
会话 | |
session:gc | 执行会话垃圾回收 |
session:metadata:gc | 执行会话元数据垃圾回收 |
站点 | |
site:down | 将网站置于离线模式 |
site:up | 将网站置于在线模式 |
更新 | |
update:extensions:check | 检查挂起的扩展更新 |
update:joomla:remove-old-files | 删除旧系统文件 |
用户 | |
user:add | 添加用户 |
user:addtogroup | 将用户添加到组 |
user:delete | 删除用户 |
user:list | 列出所有用户 |
user:removefromgroup | 从组中删除用户 |
user:reset-password | 更改用户密码 |
Akeeba Backup CLI 快速参考表
php cli/joomla.php (+ 命令)
akeeba:backup:alternate | 使用Akeeba Backup的前端备份功能进行备份 |
akeeba:backup:alternate_check | 使用前端功能检查失败的Akeeba Backup备份 |
akeeba:backup:check | 检查失败的Akeeba Backup备份尝试 |
akeeba:backup:delete | 删除Akeeba Backup已知的一个备份记录或其文件 |
akeeba:backup:download | 返回Akeeba Backup已知的一个备份记录的备份存档部分 |
akeeba:backup:fetch | 从远程存储将备份下载回服务器 |
akeeba:backup:info | 列出Akeeba Backup已知的一个备份记录 |
akeeba:backup:list | 列出Akeeba Backup已知的所有备份记录 |
akeeba:backup:modify | 修改Akeeba Backup已知的一个备份记录 |
akeeba:backup:take | 使用Akeeba Backup进行备份 |
akeeba:backup:upload | 重新上传备份到远程存储 |
akeeba:filter:delete | 删除Akeeba Backup已知的一个过滤器值 |
akeeba:filter:exclude | 为Akeeba Backup设置排除过滤器 |
akeeba:filter:include-database | 为Akeeba Backup添加一个额外的数据库进行备份 |
akeeba:filter:include-directory | 为Akeeba Backup添加一个额外的远程目录进行备份 |
akeeba:filter:list | 获取Akeeba Backup已知过滤器值 |
akeeba:log:get | 检索Akeeba Backup已知的日志文件 |
akeeba:log:list | 列出Akeeba Backup已知的日志文件 |
akeeba:migrate | 将设置从Akeeba Backup 8迁移 |
akeeba:option:get | 获取Akeeba Backup配置文件的配置选项值 |
akeeba:option:list | 列出Akeeba Backup配置文件的配置选项,包括它们的标题 |
akeeba:option:set | 设置Akeeba Backup配置文件的配置选项值 |
akeeba:profile:copy | 创建Akeeba Backup配置文件的副本 |
akeeba:profile:create | 创建新的Akeeba Backup配置文件 |
akeeba:profile:delete | 删除Akeeba Backup配置文件 |
akeeba:profile:export | 将Akeeba Backup配置文件导出为JSON字符串 |
akeeba:profile:import | 从JSON字符串导入Akeeba Backup配置文件 |
akeeba:profile:list | 列出Akeeba Backup备份配置文件 |
akeeba:profile:modify | 修改Akeeba Backup配置文件 |
akeeba:profile:reset | 重置Akeeba Backup配置文件 |
akeeba:sysconfig:get | 获取Akeeba Backup组件范围的选项值 |
akeeba:sysconfig:list | 列出Akeeba Backup组件范围的选项 |
akeeba:sysconfig:set | 设置Akeeba Backup组件范围的选项值 |
进一步阅读
https://docs.cpanel.net/cpanel/security/ssh-access/
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
https://www.a2hosting.com/kb/cpanel/cpanel-security-features/configuring-ssh-keys-with-cpanel
https://www.digitalcitizen.life/command-prompt-how-use-basic-commands/
https://docs.joomla.org/J4.x:CLI_Update
https://docs.joomla.org/J4.x:CLI_Database_Exporter_Importer
https://docs.joomla.org/J4.x:Writing_A_CLI_Application
https://symfony.com/doc/current/console/style.html
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
https://www.akeeba.com/documentation/akeeba-backup-joomla/akeeba-backup-cli.html
在Joomla社区杂志上发表的一些文章代表作者对特定主题的个人意见或经验,可能不代表Joomla项目的官方立场
通过接受,您将访问 https://magazine.joomla.net.cn/ 外部的第三方服务
评论 5
任务调度器,命令行界面,我喜欢听到的这一切。这是使最好的CMS变得更好的强大功能。迫不及待想要玩这些...
你好,感谢你的好文章。我已经使用CLI界面成功更新了Joomla核心,然而,与Akeeba备份相关的所有命令都无法正常工作。我得到了错误信息"命令“akeeba:backup:list:未定义”,然后是“命令“akeeba:backup:list”不存在”
此外,当我在我的网站管理员区域登录时,我可以看到Akeeba备份有可用的更新,但是检查扩展更新时,它告诉我没有可用的更新。
任何帮助都将受到赞赏。
谢谢,Adrian。
你好,Adrian,
这个问题解决了吗?你遇到Akeeba问题的最可能原因是只有Akeeba备份的PRO版本才与Joomla CLI集成。更多信息请参阅这里。
你好,Brendan。谢谢你的回复。你说得对,CLI仅与专业版一起工作。
这篇文章具有误导性。描述为“任务三:安装扩展更新”的方法不执行扩展更新。命令*extension:discover:install*只能安装新扩展,不能更新现有扩展。
请测试你的工作并纠正内容。
我们迫不及待地等待Joomla CLI中的扩展更新功能,它将以与Joomla后端相同的方式工作。