
后端运维【免费下载链接】ajentiAjenti Core and stock plugins项目地址https://gitcode.com/gh_mirrors/aj/ajenti点击查看免费下载Ajenti Dev Multitoolajenti-dev-multitool是 Ajenti 官方为插件开发者提供的命令行迷你工具集它把插件开发中最常见的重复性操作——运行开发服务器、安装 Bower 前端依赖、编译 CoffeeScript/LESS 资源、生成 setuptools 打包配置——统一收敛为一条命令。本文基于仓库中的官方开发文档 docs/source/dev/multitool.rst结合 docs/source/dev/intro.rst、docs/source/dev/resources.rst 等配套文档以及仓库内真实插件、Makefile 与 CI 脚本的源码证据系统讲解该工具的原理、每个子命令的用法与典型场景。读完本文你将能够独立搭建插件开发环境、一键构建并运行自己的插件、管理前端资源依赖并通过打包命令将插件发布到 PyPI。工具定位围绕当前目录及以下全部插件批量操作ajenti-dev-multitool是一个独立安装的 Python 包与 Ajenti 本体解耦。它本质上是一个围绕插件目录树的批处理执行器默认情况下它会作用于当前工作目录及其子目录中发现的全部插件。这意味着你可以在 Ajenti 完整源码树的根目录下执行它此时它遍历plugins/下的所有插件也可以在某个单独插件目录内执行它此时只处理当前这一个插件。例如在仓库根目录执行make bower时Makefile 中对应的目标就是ajenti-dev-multitool --bower install一次调用即可为全部插件安装前端依赖而scripts/ci.sh中的持续集成流程同样直接调用ajenti-dev-multitool --bower install与ajenti-dev-multitool --build来完成依赖安装和资源编译。这种工具在目录树内递归发现插件的设计让开发、CI 与发布环节可以共享同一套命令语义。安装与开发环境准备安装工具本体按官方文档使用 pip 安装即可部分环境需要 sudosudo pip install ajenti-dev-multitool对应的 Python 3 版本安装方式见 docs/source/dev/intro.rstpip3 install ajenti-dev-multitool安装前端构建工具链该工具需要 NodeJS 生态来编译前端资源因此在开发 Ajenti 插件前需要准备以下全局工具npm -g install bower babel-cli babel-preset-es2015 babel-plugin-external-helpers less coffee-script angular-gettext-cli angular-gettext-tools同时需要 GNU gettext 工具用于翻译文件编译# Ubuntu / Debian apt-get install gettext # RHEL dnf install gettextscripts/install-dev.sh中完整复现了这套依赖安装逻辑含 NodeJS 18 的 NodeSource 源配置、bower/babel/less/coffee-script等全局 npm 包安装可作为一键搭建开发环境的参考实现。自动化安装开发环境可选仓库提供了一键脚本 scripts/install-dev.sh它会自动完成以下全部步骤安装 Python 3、pip、venv 及python3-augeas、python3-dbus、python3-apt、libssl-dev等系统依赖安装 NodeJS 与前端构建工具链在/opt/ajenti创建虚拟环境并克隆 Ajenti 源码到/opt/ajenti/ajenti安装ajenti-dev-multitool与全部插件依赖依次执行ajenti-dev-multitool --bower install、--msgfmt、--build完成依赖安装与资源编译生成/etc/ajenti/config.yml默认配置与自签名证书。安装完成后进入开发模式的完整流程为source /opt/ajenti/bin/activate→cd /opt/ajenti/ajenti→make rundev→ 浏览器访问https://localhost:8000自签名证书警告属正常现象。核心子命令详解官方文档共定义了四个基础子命令它们覆盖了插件开发循环中运行—依赖—构建—打包四个关键环节仓库中的配套文档与 Makefile/CI 脚本还印证了--new-plugin、--msgfmt、--xgettext等扩展命令的实际使用。--run与--run-dev一键运行带当前插件的 Ajenti--run以全局安装的 Ajenti 启动服务并挂载当前目录中的插件--run-dev与--run相同但额外开启开发者模式dev mode。开发者模式的关键行为是资源热重建每次刷新浏览器页面时Ajenti 都会自动调用ajenti-dev-multitool --build重新编译发生变更的前端资源。这一机制在 core 插件的视图处理器中有明确的源码实现plugins/core/views/main.py 中当aj.dev为真且进程以 root 运行、页面请求命中/view/.*路由时会遍历所有DirectoryPluginProvider目录并分别以--rebuild当请求头Cache-Control: no-cache存在即用户强制刷新 Ctrl/Cmd-F5 时或--build调用ajenti-dev-multitool。该实现同时体现了两个约束资源重建需要root 权限非 root 运行时会输出 Cannot build resources without root permissions. 的警告若未安装该工具会记录 please install ajenti-dev-multitool 错误日志。启动开发模式的实际命令为sudo ajenti-dev-multitool --run-dev它将启动 Ajenti 及全部内置插件和当前目录下的插件每次浏览器刷新自动重建资源。访问http://localhost:8000/后即可在侧边栏看到新插件。仓库 Makefile 中的rundev/run目标cd ajenti-panel ./ajenti-panel -v --autologin --plugins ../plugins --dev -c $(CONFIGFILE)展示了等价的底层调用方式。--bower command按插件批量执行 Bower 命令Bower 是 Ajenti 插件声明前端第三方组件jQuery、AngularJS、Bootstrap 等的依赖管理方式。--bower子命令会遍历每个拥有独立bower.json文件的插件并在其目录内执行指定的 Bower 命令# 为当前目录及以下所有插件安装/更新 Bower 组件 ajenti-dev-multitool --bower install # 其他 Bower 命令也可透传例如列出依赖 ajenti-dev-multitool --bower list --force --verbose组件会被安装到plugin/resources/vendor目录。在 Ajenti 完整源码树根目录执行make bower对应 Makefile 中的ajenti-dev-multitool --bower install即可为全部插件安装依赖。插件侧的bower.json写法如下参考 plugins/core/bower.json 的真实依赖声明{ name: plugin, private: true, dependencies: { jquery: ~2.1.3, angular: ~1.8.3 } }--build与--rebuild资源编译与强制全量重建--build与--rebuild负责前端资源的生产构建其输出物是plugin/resources/build目录下的编译产物。具体行为包括自动编译插件中的CoffeeScript.coffee与 LESS.less源文件将plugin.yml中resources一节列出的 CSS 与 JS 按声明顺序拼接、合并成构建产物--rebuild会丢弃此前已构建的资源后从头重建用于解决增量构建可能出现的陈旧产物问题。两种命令都只处理当前目录及其子目录下的文件与工具整体的目录树语义一致。构建命令的典型用法# 新插件首次构建 ajenti-dev-multitool --build # 强制全量重建例如切换分支或清理陈旧产物后 ajenti-dev-multitool --rebuild在开发模式下--build与--rebuild的调用由页面刷新行为自动触发见 plugins/core/views/main.py普通刷新F5→ 增量--build强制刷新Ctrl/Cmd-F5携带Cache-Control: no-cache→ 全量--rebuild。资源编译的输入由插件的plugin.yml声明。以 plugins/core/plugin.yml 为例resources列表混合声明了 vendor 依赖、LESS 样式、ES/CoffeeScript 源码与 HTML partial并以特殊语法ng:core、ng:core.templates声明 AngularJS 模块plugins/ace/plugin.yml 还展示了pre_build钩子的用法——构建前先删除resources/vendor/ace-builds中的演示与源文件目录以精简打包体积。--setuppy command插件打包与发布--setuppy子命令用于对插件包执行 setuptools 命令其关键特性是自动生成setup.py文件无需开发者手工维护随后在该插件包目录中运行指定命令ajenti-dev-multitool --setuppy sdist upload --sign --identity John Doe上例完成了三件事生成源码分发包sdist、上传到 PyPIupload、并使用指定 GPG 身份对包签名--sign --identity John Doe。仓库 Makefile 的upload-plugins目标正是利用该子命令批量发布插件ajenti-dev-multitool --setuppy sdist twine upload plugins/*/dist/*.tar.gz -i Ajenti Packagers -s --skip-existing由于工具会遍历目录树下全部插件并自动为每个插件生成setup.py一条命令即可完成全量插件的打包签名流程发布物位于各插件的dist/目录。配套子命令--new-plugin、--msgfmt与翻译工作流除官方文档列出的四个核心命令外仓库内各文档与构建脚本还印证了以下配套命令--new-plugin Some plugin name在指定名称下生成一个插件骨架。官方入门流程docs/source/dev/intro.rst为ajenti-dev-multitool --new-plugin Some plugin name cd some_plugin_name ajenti-dev-multitool --build sudo ajenti-dev-multitool --run-dev--msgfmt编译插件locale/目录下的.po翻译文件Ajenti 多语言机制基于 angular-gettext / gettext。Makefile 的build目标中--msgfmt先于--build执行pull-crowdin目标在拉取 Crowdin 翻译后同样调用--msgfmt重新编译。--xgettext/--pull-crowdin/--push-crowdin/--add-crowdin与 Crowdin 翻译平台同步的系列命令在 Makefile 的push-crowdin、pull-crowdin、add-crowdin目标中被组合使用构成插件的国际化维护工作流。--find-outdated检测过时依赖/组件对应 Makefile 中的check目标。资源构建机制插件资源管线的工作原理理解--build/--rebuild的输出目标需要先了解 Ajenti 插件的资源组织规范详见 docs/source/dev/resources.rst。推荐目录结构插件资源统一放在插件目录下的resources/子目录中并建议按以下结构组织plugin/ resources/ css/ styles.less js/ module.coffee routing.coffee controllers/ some.controller.coffee services/ some.service.coffee img/ image.png partials/ view.htmlplugin.yml资源声明CSS、JS 与 HTML 资源必须在插件的plugin.yml的resources列表中注册才会被编译并下发到客户端。声明顺序即前端加载顺序示例name: test resources: - resources/vendor/jquery/dist/jquery.min.js # Bower 组件 - resources/css/animations.less # 样式LESS 会被自动编译 - resources/js/core/filters.coffee # JSCoffeeScript 会被自动编译 - resources/partial/index.html # HTML 模板 - ng:moduleName # 特殊语法发布 AngularJS 模块其中ng:moduleName是特殊指令它告知 Ajenti core 从该插件加载指定的 AngularJS 模块示例中为test。资源访问方式AngularJS 模板会在客户端预加载plugins/test/resources/dir/template.html中的模板可通过 URL/test:resources/dir/template.html访问plugin_id:相对路径语法其他资源文件则通过 HTTP 端点/resources/plugin_id/resources/path访问。Bower 组件集成在插件目录创建bower.json后运行ajenti-dev-multitool --bower install组件即安装到plugin/resources/vendor。这些 vendor 文件同样需要在plugin.yml的resources中显式列出如 plugins/ace/plugin.yml 所列出的resources/vendor/ace-builds/...系列构建时会被合并进最终产物。完整工作流实战从空目录到发布综合官方文档与仓库脚本一个插件的典型开发发布闭环如下准备环境安装ajenti-dev-multitool、NodeJS 工具链与 gettext见上文安装与开发环境准备生成插件骨架ajenti-dev-multitool --new-plugin My plugin cd my_plugin声明并安装 Bower 依赖若插件需要前端组件# 编写 plugin 目录下的 bower.json 后执行 ajenti-dev-multitool --bower install编写插件Python 模块内含jadi.component组件类负责后端逻辑plugin.yml声明元数据与资源resources/下放置前端代码与模板构建资源ajenti-dev-multitool --build开发运行sudo ajenti-dev-multitool --run-dev浏览器访问http://localhost:8000/修改 CoffeeScript/LESS 后刷新页面即可看到重建结果Ctrl/Cmd-F5 强制全量重建。注意Python 代码变更不会被热加载需要重启服务root 权限是资源自动重建的前提发布打包ajenti-dev-multitool --setuppy sdist upload --sign --identity Your Name该流程与仓库 scripts/install-dev.sh 中--bower install→--msgfmt→--build的顺序逻辑、以及 scripts/ci.sh 中安装依赖 →--bower install→--build→ 跑 Karma 前端测试的 CI 节奏完全一致可直接复用到自己的工程化流程中。常见问题与使用须知资源没有生效检查资源是否已在plugin.yml的resources列表中注册构建输出位于plugin/resources/build可确认产物是否生成。强制刷新Ctrl/Cmd-F5可触发--rebuild丢弃陈旧产物。提示 Cannot build resources without root permissions.开发模式下的自动重建要求以 root 身份运行见 plugins/core/views/main.py请以sudo启动--run-dev。提示 please install ajenti-dev-multitool.说明运行环境中缺少该工具执行pip3 install ajenti-dev-multitool安装即可。--setuppy找不到setup.py该工具会自动生成setup.py无需手工创建请勿手工改动生成结果以免与自动生成逻辑冲突。Python 代码不热更新这是设计使然开发模式下热重建仅覆盖 CoffeeScript、ES6 与 LESS 前端资源Python 后端修改需重启服务官方文档 docs/source/dev/intro.rst 与 docs/source/dev/intro-core.rst 均有此说明。总结ajenti-dev-multitool以作用于当前目录及以下全部插件的批处理模型把 Ajenti 插件开发中最繁琐的环节压缩为一条条可组合的命令--run/--run-dev负责运行与热重建--bower统一管理前端第三方依赖--build/--rebuild完成 CoffeeScript、LESS 到生产资源的编译合并--setuppy配合自动生成的setup.py打通打包签名发布链路而--new-plugin、--msgfmt与 Crowdin 系列命令则补齐了项目脚手架与国际化工作流。无论你是在开发单个插件、维护整个 Ajenti 源码树还是在 CI 中自动化构建与测试这套工具都是贯穿始终的同一套操作语言——建议将其与仓库 Makefile、scripts/ci.sh 中的目标定义对照阅读可以更快建立对完整开发管线的心智模型。赞分享后端运维【免费下载链接】ajentiAjenti Core and stock plugins项目地址https://gitcode.com/gh_mirrors/aj/ajenti点击查看免费下载相关推荐如何用开源方案构建高性能全球天气APIOpen-Meteo的技术架构解析如何用开源方案构建高性能全球天气APIOpen Meteo的技术架构解析 在当今数据驱动的时代精准的天气信息已成为众多应用场景的核心需求。从智能家居的自动化后端API网关数据工程MusicFree插件发布流程从开发到上线的完整指南MusicFree插件发布流程从开发到上线的完整指南 引言为什么需要规范的插件发布流程 在MusicFree生态系统中插件是核心功能的关键组成部分。一个音视频移动开发插件系统终极指南Cuberite插件从开发到上线的完整流程终极指南Cuberite插件从开发到上线的完整流程 Cuberite是一款轻量级、快速且可扩展的Minecraft游戏服务器本指南将带你完成Cuberite游戏开发上一篇DVA组件的性能分析识别与解决瓶颈的工具下一篇Tailwind CSS与SVGawesome-tailwindcss图标处理最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考