- 后端
- 运维
【免费下载链接】ajenti
Ajenti Core and stock plugins
本文以 Ajenti 官方文档入口 docs/source/index.rst 为骨架,系统梳理 Ajenti 平台的组成(Ajenti Core 与 Ajenti Panel)、六大核心能力域(HTTP 服务、性能、API、安全、前端、平台支持)及其完整文档导航体系,并对照仓库源码给出实现层面的佐证。读完本文,你将掌握 Ajenti 的整体架构、功能边界、文档地图与从安装到配置的实战入口,可直接据此上手部署与二次开发。
平台组成:Ajenti Core 与 Ajenti Panel
Ajenti 平台由两大产品组成,二者职责边界清晰:
- Ajenti Core:一个 Python 库,即平台本体。它内置 HTTP 服务器、Socket 引擎与插件容器,是所有上层能力的基础。核心入口见 ajenti-core/aj/core.py,其中完成了 gevent 事件循环初始化、配置/用户/SMTP/TFA 加载、监听 socket 绑定、WSGI 应用组装与 SSL 上下文构建等全部启动流程。
- Ajenti Panel:一个启动脚本与一组"库存"插件(stock plugins)的组合,开箱即用地提供文件管理器、网络配置器、服务管理器等常见服务器管理功能。启动脚本 ajenti-panel/ajenti-panel 负责解析命令行参数、探测/生成默认配置并调用
aj.entry.start()拉起平台。
从仓库目录结构可以直观印证这一划分:ajenti-core/aj/下是平台核心(core.py、wsgi.py、auth.py、config.py、gate/、security/等),而plugins/目录则存放全部插件,例如filemanager(文件管理)、network(网络配置)、services(服务管理)、dashboard(仪表盘)、terminal(终端)、packages(软件包管理)等。这种"核心 + 插件"的结构正是 Ajenti 高度模块化设计的具体体现——一切皆是模块,可移除、可替换。
功能总览
官方文档从六个维度给出了 Ajenti 平台的能力全景,下面逐一展开并结合源码印证。
HTTP Server
- HTTP 1.1 支持:基于 gevent 的 WSGI 服务器实现,见 ajenti-core/aj/core.py 中的
pywsgi.WSGIServer。 - WebSockets 与 XHR polling 回退:请求处理器 ajenti-core/aj/wsgi.py 中的
RequestHandler通过检测HTTP_UPGRADE请求头来决定走 WebSocket 通道还是普通 WSGI 通道;配合 python-socketio(Server(async_mode='gevent'))实现实时双向通信,并在不支持 WebSocket 的环境下回退到轮询。 - 快速事件循环处理:启动时执行
monkey.patch_all(select=True, thread=True, ...)将标准库网络调用替换为 gevent 协程实现,从而以事件驱动方式并发处理大量连接。 - 灵活路由:平台提供独立的 WSGI 路由层(
aj.routing)与 HTTP 中间件聚合机制HttpMiddlewareAggregator,支持按路径分发表单与 WebSocket 请求。 - 会话沙箱(Session sandboxing):会话由
aj.gate子系统管理,每个登录会话被隔离在独立的受限进程/工作器中运行,互不干扰。 - SSL 与客户端证书认证:平台在 ajenti-core/aj/core.py 中基于
gevent.ssl.SSLContext构建 TLS 上下文,显式禁用 SSLv2/SSLv3/TLSv1/TLSv1.1,并可通过client_auth配置启用客户端证书校验(ssl.CERT_REQUIRED/ssl.CERT_OPTIONAL)。
性能
官方文档对性能的宣称如下(性能数据以实际部署环境实测为准):
- 每秒请求数超过 1000(>1000 requests per second)。
- 内存占用约 30 MB,另加每个会话约 5 MB(30 MB RAM footprint + 5 MB per session)。
从设计上看,这一轻量特性得益于 gevent 事件循环与"核心 + 插件"的按需加载架构;README.md 也明确将"轻量、可运行在低端机器、路由器等设备上"列为核心卖点。本项目为 GitHub 镜像仓库,未包含基准测试脚本,上述数字为官方文档声明的目标量级,不能作为实测结论引用。
API
- 高度模块化的 Python API:一切皆为模块(
jadi.component组件、jadi.service服务、jadi.interface接口),可任意移除或替换,依赖注入由 jadi 框架统一管理。 - 内置 Web 服务器 API:
aj.api.http提供路由(@get/@post等装饰器)、文件下载、GZIP 压缩、WebSocket 处理等能力,详见 docs/source/ref/aj.api.http.rst。 - 透明的 SSL 客户端授权:客户端证书在校验后由 ajenti-core/aj/security/verifier.py 的
ClientCertificateVerificator与配置中登记的证书(serial + sha256 digest)比对,直接映射到系统用户并自动登录,无需再输入密码。 - 插件架构与依赖注入:
aj.plugins负责插件发现与加载(PythonPathPluginProvider/DirectoryPluginProvider),插件之间通过 jadi 的接口/组件机制协作。 - 服务端推送与 Socket API:
aj.gate提供 Socket.IO 命名空间(SocketIONamespace),aj.plugins.core.api.push提供服务端主动推送能力,参见 docs/source/ref/aj.plugins.core.api.push.rst。
安全
- 可插拔的认证与授权:认证以
AuthenticationProvider接口抽象(见 ajenti-core/aj/auth.py),实现类通过 jadi 组件机制注册。 - 内置认证器:
- UNIX 账户认证(
provider: os):调用/bin/su验证系统用户密码,见OSAuthenticationProvider; - 密码/用户库认证(
provider: users):基于/etc/ajenti/users.yml中的 scrypt 哈希校验; - SSL 客户端证书认证:证书校验通过后直接建立会话;
- Mozilla Persona E-mail 认证:官方文档列出的认证方式之一。
- UNIX 账户认证(
- 非特权会话隔离:登录会话在独立进程中以受限用户权限运行,从源码结构看,该能力由 ajenti-core/aj/gate/session.py 等会话/工作器模块协同实现。
- Fail2ban 规则:仓库内置了现成的 Fail2ban 过滤规则 scripts/ajenti.conf,其正则
^.* WARNING : Failed login from \w+ at IP : <HOST>匹配登录失败日志,可对暴力破解自动封禁 IP。
前端
- 干净、现代、响应式 UI,单页应用、无刷新:前端基于 AngularJS,界面入口与侧边栏由
plugins/core提供。 - 实时数据更新与 Socket.IO 流式推送:如上文所述,通过 python-socketio 的
Server+ WSGIApp 与浏览器建立长连接。 - 完整移动端/平板支持:响应式布局。
- LESS/CSS 与 CoffeeScript/JavaScript 自动构建:开发模式下(
--dev)每次请求自动重新编译资源;前端构建依赖 bower、babel、less、coffee-script 等工具链。 - 大量库存指令(stock directives)与 AngularJS 模板:随核心与各插件分发,覆盖文件系统、passwd、services、terminal 等通用场景,见 docs/source/refjs/core.rst 等前端组件参考。
支持平台
官方文档声明的受支持平台与运行环境:
- Debian 9 或更高版本;
- Ubuntu Bionic(18.04)或更高版本;
- RHEL 8 或更高版本;
- 其他 Linux 或 BSD 系统经少量修改亦可运行;
- 支持 Python 3.5+(仓库当前代码基于 Python 3 开发)。
Ajenti 登录界面:默认通过 HTTPS 8000 端口访问,可使用系统 root 账户登录。
Ajenti 仪表盘:单页响应式界面,支持实时数据更新与插件化 Widget 布局。
实战入口:安装、运行、配置与安全加固
官方文档入口页通过 toctree 将用户手册组织为"安装 → 运行 → 配置 → 安全 → 贡献"的完整链条,以下是各环节的核心要点:
安装(Install)
详见 安装指南,仓库同时提供了自动化脚本 scripts/install-venv.sh 与 scripts/install.sh。官方推荐在虚拟环境中安装,以避免新版 Debian/Ubuntu 下 pip 的 "externally managed environment" 错误:
curl https://raw.githubusercontent.com/ajenti/ajenti/master/scripts/install-venv.sh | sudo bash -s -该脚本会自动完成:检测发行版并安装依赖(如build-essential python3-pip python3-dev python3-lxml libssl-dev python3-dbus python3-augeas python3-apt ntpdate,RHEL 系为gcc python3-devel python3-pip python3-pillow python3-augeas python3-dbus chrony openssl-devel redhat-lsb-core)、在/opt/ajenti创建虚拟环境、通过 pip 安装ajenti-panel与核心插件、生成/etc/ajenti/config.yml与 SSL 证书、并注册 systemd / Upstart / SysVinit 服务。
若登录后出现空白响应,官方建议升级gipc与gevent:
/opt/ajenti/bin/python3 -m pip install gipc gevent -U若 HTTPS 证书缺失,可重新生成:
/opt/ajenti/bin/python3 /opt/ajenti/bin/ajenti-ssl-gen $(hostname)运行(Run)
详见 运行指南。服务安装后可通过service ajenti restart、/etc/init.d/ajenti restart或systemctl restart ajenti管理。默认面板地址为HTTPS 8000 端口,默认用户名为root,密码为系统 root 密码。
命令行选项(与 ajenti-panel/ajenti-panel 中的usage()一致):
| 选项 | 说明 |
|---|---|
-c, --config <file> | 使用指定配置文件而非默认值 |
-v | 调试/详细日志(等价于--log debug) |
--log <level> | 固定日志级别:debug、info、warning、error |
--dev | 开发模式,每次请求自动重建前端资源 |
-d, --daemon | 后台守护进程模式 |
--stock-plugins | 使用随附插件运行(未使用--plugins时默认启用) |
--plugins <dir> | 追加指定目录中的插件 |
--autologin | 以面板运行用户自动登录(公共环境下存在严重安全隐患,源码中强制要求与-v同时使用) |
调试路径:主日志位于/var/log/ajenti/ajenti.log,崩溃 traceback 位于/var/log/ajenti/crash-DATE.txt(写入逻辑见 ajenti-core/aj/entry.py 的handle_crash);前端问题可通过浏览器开发者工具(F12)排查。
配置(Config)
详见 配置指南。所有配置文件存放于/etc/ajenti/,均使用 YAML 格式:
- config.yml:主配置文件,包含全部关键参数;
- smtp.yml:邮件中继服务器凭据,用于密码重置功能;
- users.yml:
users认证提供者使用的用户账户文件(默认路径/etc/ajenti/users.yml)。
配置结构的默认值在 ajenti-core/aj/config.py 的ensure_structure()中定义(如max_sessions默认 99、session_max_time默认 3600 秒、restricted_user默认 nobody、language默认 en 等),仓库自带的 ajenti-panel/config.yml 是完整的可参考样例。核心配置块速览:
- auth 块:
provider(os或users)、allow_sudo、emails、users_file。旧参数user_config已弃用,用户存储位置与 provider 绑定,避免重复条目。 - bind 块:
host(默认0.0.0.0)、mode(tcp或unix)、port(默认 8000)。 - ssl 块:
enable(强烈建议 true)、certificate(全局默认证书,PEM 需包含证书与私钥)、fqdn_certificate(FQDN 专用证书)、force(在 80 端口起一个监听器将 HTTP 重定向到 HTTPS,实现见 ajenti-core/aj/https_redirect.py)、client_auth(enable/force/certificates,certificates 由界面自动填充,每条含 digest、name、serial、user 四个字段)。 - email 块:
enable开启密码重置邮件功能,templates.reset_email指定重置邮件模板(仓库内置模板见 ajenti-core/aj/static/emails/reset_email.html,其中的{{ RESET_LINK }}、{{ BASE64_LOGO }}等变量由 Jinja2 自动填充)。 - 全局参数:
color(可选 default、bluegrey、red、deeporange、orange、green、teal、blue、purple)、language、logo、max_sessions(达到上限时最久未活动的会话会被停用)、name、restricted_user(受限环境操作统一使用该用户权限执行,默认 nobody)、session_max_time(自动登出前的最大有效时长)、trusted_domains与trusted_proxies(Ajenti ≥ 2.2.1,前者用于校验 HTTP Origin 并作为密码重置链接的基准域名,后者用于获取客户端真实 IP)。
smtp.yml 结构为smtp: {server, user, password, port},其中port取starttls(587)或ssl(465)。从源码看,ajenti-core/aj/config.py 的SmtpConfig会在以 root 运行时将文件权限收紧为 0o600,并在内存中清空密码防止泄露。
users.yml 的结构示例:
users: arnaud: email: arnaud@mydomain.com fs_root: /home/arnaud password: 73637279707..... permissions: packages:install: false sidebar:view:/view/cron: false uid: 1002其中password为 scrypt 派生密钥的十六进制编码,生成方式如下(官方文档给出的方法):
import scrypt, os bytes = scrypt.encrypt(os.urandom(256), "password", maxtime=1) hex = bytes.hex() print(hex)安全加固(Security)
详见 安全指南。登录失败记录会写入/var/log/ajenti/ajenti.log,配合仓库提供的 Fail2ban 过滤器 scripts/ajenti.conf 可自动封禁攻击者 IP。典型 jail 配置示例:
[ajenti] enabled = true port = 8000 bantime = 120 maxretry = 3 findtime = 60 logpath = /var/log/ajenti/ajenti.log filter = ajenti即 60 秒内 3 次登录失败(findtime+maxretry)即封禁该 IP 120 秒(bantime)。此外建议:启用 SSL(ssl.enable: true)、按需启用客户端证书认证、将restricted_user保持为低权限账户,并谨慎使用--autologin。
文档体系导航:从入口到各模块
作为官方文档的入口页,docs/source/index.rst 通过七组 toctree 将整个知识体系组织为分层导航,这也是开发者查阅资料的地图:
Users 手册
面向普通使用者,位于 docs/source/man/:
- 安装指南(含自动/虚拟环境/手动三种方式与完整卸载流程)
- 运行指南(服务管理、命令行选项、调试方法)
- 配置指南(config.yml、smtp.yml、users.yml 全参数说明与密码哈希生成)
- 安全指南(Fail2ban 加固)
- 贡献指南
Plugins 手册
逐一介绍库存插件,位于 docs/source/plugins/,包括:check_certificates、core、cron、dashboard、datetime、docker、filemanager、fstab、network、notepad、packages、plugins、power、services、session_list、settings、terminal、users。对应实现均可在 plugins/ 目录找到同名模块。
Plugin Developers
插件开发指南,位于 docs/source/dev/:
- about.rst(插件体系概览)
- intro.rst(快速上手:环境搭建、
ajenti-dev-multitool --new-plugin创建插件、--run-dev调试运行) - multitool.rst(开发工具链)
- ui.rst、resources.rst、http.rst、dash-widgets.rst(分别讲解 UI 组件、静态资源、HTTP 端点与仪表盘 Widget)
Core Developers
核心开发入口文档为 docs/source/dev/intro-core.rst,面向平台本身的二次开发。
Python API Reference
Python 侧 API 参考,位于 docs/source/ref/:jadi(依赖注入框架)、aj、aj.api.http、aj.api.endpoint、aj.config、aj.core、aj.entry、aj.http、aj.plugins。
Stock Angular components
前端 Angular 组件参考,位于 docs/source/refjs/:core、ace、augeas、filesystem、passwd、services、terminal。
Plugin API Reference
各插件公开 API 参考,位于 docs/source/ref/:aj.plugins.core.api.push(服务端推送)、aj.plugins.core.api.sidebar(侧边栏)、aj.plugins.core.api.tasks(后台任务)、aj.plugins.augeas.api、aj.plugins.auth-users.api、aj.plugins.dashboard.api、aj.plugins.check_certificates.api、aj.plugins.datetime.api、aj.plugins.network.api、aj.plugins.packages.api、aj.plugins.power.api、aj.plugins.services.api。
小结
Ajenti 是一个以 "Ajenti Core(平台核心)+ Ajenti Panel(启动脚本与库存插件)" 为骨架的模块化服务器管理面板:底层由 gevent 事件循环驱动高性能 HTTP/WebSocket 服务,中层以 jadi 依赖注入框架组织可插拔的认证、路由与推送 API,上层由一组覆盖文件管理、网络、服务、软件包、终端等场景的库存插件构成完整可用的 Web 管理界面。官方文档入口 docs/source/index.rst 及其背后的 man/plugins/dev/ref/refjs 分层文档体系,是理解平台能力边界、进行日常运维与插件开发的权威起点;仓库中的 ajenti-core 与 plugins 源码则是深入验证每一处行为细节的最佳参照。
- 后端
- 运维
【免费下载链接】ajenti
Ajenti Core and stock plugins
相关推荐
Ajenti 架构解析:Ajenti Core 插件化框架与 Ajenti Panel 的工作机制
Ajenti 架构解析:Ajenti Core 插件化框架与 Ajenti Panel 的工作机制 Ajenti 是一套面向 Linux/BSD 服务器管理场景
后端运维Ajenti服务器管理面板安装与卸载指南
Ajenti服务器管理面板安装与卸载指南 前言 Ajenti是一款功能强大的服务器管理面板,它提供了一个直观的Web界面来管理Linux服务器。与传统的命令行管
后端运维DeepSeek4j社区贡献指南:如何参与这个开源Java AI SDK的开发
DeepSeek4j社区贡献指南:如何参与这个开源Java AI SDK的开发 想要为DeepSeek Java SDK项目贡献代码吗?这篇完整的贡献指南将带你
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考