Nextcloud AIO 通知容器(Notifications Community Container):实现社区容器向 Nextcloud 用户发送管理员通知
云原生运维后端容器编排【免费下载链接】all-in-one The official Nextcloud installation method. Provides easy deployment and maintenance with most features included in this one Nextcloud instance.项目地址https://gitcode.com/GitHub_Trending/al/all-in-one点击查看免费下载导读本篇文章围绕 Nextcloud All-in-OneAIO仓库中 community-containers/notifications 社区容器展开讲解如何让其他 AIO 社区容器例如 Scrutiny 磁盘健康监控在检测到异常时自动向 Nextcloud 管理员发送站内通知。读完本文你将掌握该容器的作用、部署配置notifications.json的每一项参数含义、其与 Scrutiny 的联动方式以及 AIO 社区容器的添加、测试与移除流程。一、Notifications 容器的定位社区容器间的“通知桥梁”Nextcloud AIO 官方镜像提供了 notify.sh 与 notify-all.sh 两个脚本负责在容器内部向 Nextcloud 的管理员或全部用户推送站内通知。而 Notifications 社区容器则把这一能力开放给其他社区容器任何需要向用户告警的 AIO 社区容器都可以通过它把消息写入 Nextcloud 的通知系统。根据 community-containers/notifications/readme.md 的说明该容器允许其他 AIO 社区容器向 Nextcloud 用户发送管理员通知admin notifications。典型场景是 Scrutiny 容器磁盘 SMART 健康状态前端当 smartctl 检测到磁盘故障时Scrutiny 会借助 Notifications 容器把告警推送给 Nextcloud 管理员。其他社区容器如 Scrutiny │ 发现异常smartctl failure ▼ nextcloud-aio-notifications 容器 │ 通过 Docker socket 访问 Nextcloud 容器 ▼ Nextcloud 站内通知管理员用户二、部署配置逐项解读notifications.json 全参数说明该容器在 AIO 社区容器体系中的定义位于 notifications.json遵循aio_services_v1结构。完整内容如下{ aio_services_v1: [ { container_name: nextcloud-aio-notifications, display_name: Notifications, documentation: https://github.com/nextcloud/all-in-one/tree/main/community-containers/notifications, image: ghcr.io/szaimen/aio-notifications, image_tag: v1, internal_port: 10000, restart: unless-stopped, volumes: [ { source: %WATCHTOWER_DOCKER_SOCKET_PATH%, destination: /var/run/docker.sock, writeable: false } ], environment: [ TZ%TIMEZONE% ] } ] }各字段含义如下字段校验规则可对照 php/containers-schema.jsoncontainer_name容器名称必须以nextcloud-aio-前缀开头schema 要求^nextcloud-aio-[a-z0-9-]$此处为nextcloud-aio-notifications。display_name在 AIO 管理界面中显示的名称即 “Notifications”。documentation指向该容器文档的链接schema 要求以https://开头。image镜像地址ghcr.io/szaimen/aio-notificationsschema 要求形如^(ghcr.io/)?[a-z0-9/-]$即必须托管在 ghcr.io 且仅含小写字母、数字、斜杠与连字符。image_tag镜像标签v1。internal_port容器内部服务端口10000schema 允许([0-9]{1,5})|host|(%[A-Z_]%)。该端口仅在 AIO 内部网络nextcloud-aio中暴露不会映射到宿主机因此对外不可见。restart重启策略schema 仅允许unless-stopped。volumes将%WATCHTOWER_DOCKER_SOCKET_PATH%由 AIO 注入的 Docker socket 路径变量只读挂载到容器内/var/run/docker.sockwriteable: false保证只读访问避免社区容器篡改 Docker 守护进程。environment仅注入TZ%TIMEZONE%即沿用 AIO 管理界面中设置的系统时区。注意该容器没有声明ports、cap_add、backup_volumes等字段意味着它不对外提供端口、不请求额外内核能力、也不参与 AIO 的备份卷机制对比 scrutiny.json 中声明的nextcloud_aio_scrutiny与nextcloud_aio_scrutiny_db备份卷即可看到差异。三、通知是怎么发出去的底层调用链与源码佐证Notifications 容器并非在 Nextcloud 之外另起一套消息系统而是通过 Docker socket 进入 Nextcloud 容器、调用occ notification:generate命令完成推送。仓库中现成的两个脚本可以帮你理解这条链路Containers/nextcloud/notify.sh向管理员发送通知。脚本先检查通知应用是否启用config:app:get notifications enabled再通过occ group:list admin一次性列出管理员组成员最后逐个调用occ notification:generate $admin $NC_DOMAIN: $SUBJECT -l $MESSAGE --object-typeupdate --object-id$OBJECT_ID。其中OBJECT_ID是对主题做 SHA-256 哈希后截取前 64 字符生成的稳定标识Nextcloud 对 object-id 长度限制为 64 字符保证同一主题的通知可被去重/关联。Containers/nextcloud/notify-all.sh向全部用户发送通知通过occ user:list --limit0关闭默认 500 用户的限制来枚举所有用户。在 PHP 侧php/src/Docker/DockerActionManager.php 的sendNotification(Container $container, string $subject, string $message, string $file /notify.sh)方法通过execCommandInContainer在目标容器内执行bash /notify.sh $subject $message其底层走 Docker Engine API 的containers/{name}/exec接口创建并启动 exec 实例见同文件 execCommandInContainer。AIO 官方容器自身的更新成功/失败、应用更新、Onlyoffice/EuroOffice/ClamAV 启动超时等场景见 Containers/nextcloud/entrypoint.sh均复用bash /notify.sh推送管理员通知Notifications 社区容器实质上就是把这条成熟链路开放给第三方社区容器复用。从源码结构可以推断Notifications 容器的核心职责是代理式地完成“容器事件 → Docker socket → Nextcloud 容器内 occ 命令 → 站内通知”的调用因此它需要%WATCHTOWER_DOCKER_SOCKET_PATH%的只读挂载。四、典型联动场景Scrutiny 磁盘告警通知文档明确给出的应用案例是 Scrutiny 容器Scrutiny 是一个 SMART 统计信息的 Web 前端镜像ghcr.io/szaimen/aio-scrutinyimage_tag: v2自动配置后通过http://internal.ip.of.server:8001提供磁盘仪表盘该容器仅建议在家庭网络运行且会以只读方式挂载宿主机全部/dev与/run/udev以获得 smartctl 数据这存在安全风险见 scrutiny.json 中的cap_add: SYS_RAWIO, SYS_ADMIN与卷声明启用 Notifications 容器后Scrutiny 在发现 smartctl 故障时会发送管理员通知——这正是 community-containers/notifications/readme.md 中“It needs to be enabled for the scrutiny container for example to make use of admin notifications that are sent if a smartctl failure was found”所描述的场景。换言之Notifications 容器自身不产生告警它扮演的是告警“投递管道”由上游容器如 Scrutiny检测异常由它把消息送达 Nextcloud 管理员。五、如何把 Notifications 容器加入 AIO 堆栈从 AIO v11 开始社区容器的管理完全通过 AIO Web 界面完成界面末尾的 “Community Containers” 区块需向下滚动才能看到详见 community-containers/readme.md。操作要点在 AIO 管理界面中滚动到社区容器区域找到 “Notifications”勾选启用并启动容器AIO 会依据notifications.json自动完成拉取镜像、创建容器、挂载 Docker socket 与注入时区变量等步骤务必先阅读各容器文档再启用——部分容器之间存在兼容性限制未加甄别可能导致 AIO 容器启动失败若要从堆栈中移除在 Web 界面移除后可依次执行sudo docker rm nextcloud-aio-notifications、sudo docker image prune -a清理不再使用的镜像并用sudo docker volume ls检查残留卷该容器未声明数据卷通常无残留此步骤为通用清理流程。没有服务器 CLI 访问权限时也可借助 container-management 社区容器通过 Web 会话执行 Docker 命令。六、进阶在自己的安装中测试新社区容器如果你希望仿照 Notifications 的模式编写自己的社区容器可参考 community-containers/readme.md 的本地测试流程先用标准校验器以及仓库内的 JSON Schema php/containers-schema.json 校验你的 JSON 文件在服务器某处例如/root创建容器目录如new-container复制到主控容器内docker cp /root/new-container nextcloud-aio-mastercontainer:/var/www/docker-aio/community-containers/重启主控容器docker restart nextcloud-aio-mastercontainer打开 AIO 界面即可看到新社区容器。完整的 JSON 字段示例可参考 php/containers.jsonCaddy、Fail2ban、Local AI、Plex 等子目录也是不错的参照模板。七、维护信息与使用前提维护者该容器由社区维护维护者为 szaimen同时维护 Scrutiny 等容器。按 community-containers/readme.md 的声明所有社区容器均为社区维护安全性与更新及时性由社区负责无长期保证生产环境启用前应自行评估。镜像来源镜像托管于 ghcr.ioGitHub Container Registry仓库内通过 php/src/Docker/GitHubContainerRegistryManager.php 等管理器负责拉取与凭据处理。使用前提需要 Nextcloud 实例已启用通知应用notifications app否则notify.sh会以 “Cannot send notification as notification app is not enabled.” 退出通知仅发送给管理员用户notify.sh或全部用户notify-all.sh具体取决于调用方使用哪个入口。结语Notifications 社区容器是 AIO 生态中一个轻量而关键的“通知管道”它以只读挂载 Docker socket 的方式把社区容器尤其是 Scrutiny 磁盘监控的异常事件转化为 Nextcloud 管理员站内通知。通过 notifications.json 的逐字段解析、notify.sh 的底层实现以及 DockerActionManager.php 的调用链你可以清晰地理解它的工作原理并据此规划自己的社区容器告警方案。赞分享云原生运维后端容器编排【免费下载链接】all-in-one The official Nextcloud installation method. Provides easy deployment and maintenance with most features included in this one Nextcloud instance.项目地址https://gitcode.com/GitHub_Trending/al/all-in-one点击查看免费下载相关推荐Synapse Server Notices 管理 API 实战指南管理员向用户发送服务器通知Synapse Server Notices 管理 API 实战指南管理员向用户发送服务器通知 Server Notices服务器通知是 Synapse后端即时通讯推送通知神器 - Push Notifications推送通知神器 Push Notifications 在移动应用开发中推送通知是与用户保持连接的关键工具。有了这个开源项目你将拥有一款跨平台的测试利器——Pu告别延迟Nextcloud AIO通知推送打造无缝移动办公体验告别延迟Nextcloud AIO通知推送打造无缝移动办公体验 你是否遇到过团队协作时文件更新未及时察觉重要会议提醒被工作流淹没Nextcloud AIO云原生运维后端容器编排上一篇3个步骤如何用Ahk2Exe高效编译AutoHotkey脚本为独立EXE下一篇高性能编译工具架构设计Ahk2Exe解决脚本依赖问题的完整解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考