- 后端
- 网络
- 运维
- 数据可视化
【免费下载链接】NetAlertX
Centralized network visibility and continuous asset discovery. Monitor devices, detect change, and stay aware across distributed networks.
本文是 NetAlertX 项目.devcontainer开发环境的使用与维护手册。开发容器(Dev Container)在最大程度上复刻生产容器的运行环境,同时为开发者提供调试器、代码检查工具与测试运行器等一整套开发工具链。读完本文,你将掌握如何一键启动 NetAlertX 开发容器、如何对 Python 后端与 PHP 前端进行 F5 级联调、如何利用 VS Code Task 完成常用操作,以及如何通过修改资源 Dockerfile 与启动脚本正确维护这套开发环境。
一、开发容器的定位:为什么需要它
NetAlertX 是一个由 Python 后端(Flask/GraphQL)、Nginx + PHP 前端、以及大量扫描插件组成的网络设备监控项目。若在宿主机直接搭建开发环境,极易出现"本地能跑、容器跑不了"的环境漂移问题。
devcontainer 的设计目标正是解决这一问题:
- 环境一致性:复用项目根目录
Dockerfile的runner阶段作为基础镜像,与生产环境保持同一套 Alpine 依赖与运行时; - 开发友好性:额外注入调试器(debugpy、Xdebug)、测试工具(pytest、chromium)、代码规范工具(ruff、shellcheck、hadolint、shfmt)与容器编排工具(docker-cli、buildx、compose);
- 低成本试错:容器内权限刻意放开("brutalist" 风格,即尽量宽泛的读写权限),避免开发过程中的权限问题。
从 .devcontainer/devcontainer.json 可以看出,它复用了仓库根目录的构建上下文,并以netalertx-devcontainer作为构建目标(target),同时挂载了/var/run/docker.sock,供容器内测试各种 Docker 相关场景使用。
二、快速开始:前置条件与一键启动
2.1 前置条件
- 一个可由当前用户直接管理的Docker 安装(Docker Desktop,或通过官方 get-docker 脚本安装的 Docker Engine);
- 安装Visual Studio Code;
- 安装 VS Code 的Dev Containers 扩展(
ms-vscode-remote.remote-containers)。
2.2 启动步骤
- 克隆 NetAlertX 仓库;
- 用 VS Code 打开仓库根目录;
- 等待右下角弹出"Reopen in Container"通知并点击它;
- VS Code 会开始构建镜像并连接编辑器到容器内,此后你的终端、调试器与所有工具都将运行在这个隔离环境中。
启动后,devcontainer.json中的postCreateCommand会自动执行pip3 install pytest docker debugpy selenium,postStartCommand会调用 .devcontainer/scripts/setup.sh 完成运行环境初始化,并在后台预先构建名为netalertx-test的单元测试镜像以加速后续测试。
三、关键工作流与特性
3.1 服务(前端与后端)
开发容器内的服务管理界面
进入容器后,一切已就绪:postStartCommand触发的启动脚本会自动拉起 Nginx/PHP 前端与 Python 后端。你随时可以通过内置 Task 重启它们。
从源码角度看,.devcontainer/scripts/setup.sh 承担了所有运行期初始化:
- 挂载 tmpfs 内存盘到
/tmp/log(100m)、/tmp/api、/tmp/run、/tmp/nginx(各 50m),把易失数据放在内存中,加速开发并避免污染磁盘; - 删除容器内的
/entrypoint.d、/services与/app,改为软链接指向工作区install/production-filesystem/下的真实源码,实现"改源码即生效"; - 创建全部日志文件(
LOG_APP、LOG_APP_FRONT、LOG_STDERR等),并写入0到LOG_DB_IS_LOCKED; - 通过
setsid bash /entrypoint.sh &启动完整入口脚本,最后写入当前 Git 短哈希到.VERSION。
该脚本刻意保持幂等:每次运行都无条件重建文件夹、软链接与文件,保证环境始终处于可预期的全新状态。
3.2 集成调试:一键 F5
开发容器中的调试配置界面
前后端调试均已预先配置完毕:
- Python 后端(debugpy):后端以附加了调试器的模式启动,监听5678端口。打开任意 Python 文件(例如 server/main.py),设置断点后按F5(或选择 "Python Backend Debug: Attach")即可连接调试器。
- PHP 前端(Xdebug):Xdebug 监听9003端口。在 VS Code 中开始监听 Xdebug 连接后,配合浏览器扩展(如 "Xdebug helper")即可对 Web UI 发起调试会话。
对应配置可在 .devcontainer/devcontainer.json 的forwardPorts与portsAttributes中看到:20211(前端 Nginx+PHP)、20212(后端 GraphQL)、5678(Python 调试)、9003(PHP 调试)均被端口转发并标注了用途。需要注意,文件中的注释明确提醒:若改用--network=host运行,必须注释掉forwardPorts,否则 Web UI 将无法访问。
3.3 常见任务:F1 → Run Task
开发容器中的常用任务列表
项目预置了多个 VS Code Task,通过F1输入 "Tasks: Run Task" 即可访问:
- Generate Dockerfile:务必使用。实际的 .devcontainer/Dockerfile 是自动生成的。需要修改容器环境时,应先编辑
.devcontainer/resources/devcontainer-Dockerfile,再运行该 Task 重新生成。 - Re-Run Startup Script:手动重跑 .devcontainer/scripts/setup.sh,重新建立软链接并重启服务。
- Start Backend (Python)/Start Frontend (nginx and PHP-FPM):按需手动重启前后端服务。
3.4 运行测试
开发容器中的测试运行界面
环境已内置pytest,既可以在 VS Code Test Explorer 中直接运行,也可以在集成终端执行pytest -q。PYTHONPATH已预先配置好,保证测试能正确导入server模块。
这一点的实现细节在 .devcontainer/resources/devcontainer-Dockerfile 中:它扩展了PYTHONPATH,追加了/workspaces/NetAlertX/test、/workspaces/NetAlertX/server与/usr/lib/python3.12/site-packages;同时devcontainer.json中开启了python.testing.pytestEnabled,并将 pytest 参数指向test目录,python.analysis.extraPaths也覆盖了工作区与/app的 server 路径,确保智能感知与测试发现一致。
四、如何维护这套 Devcontainer
4.1 不要直接编辑 Dockerfile
主 .devcontainer/Dockerfile 由 .devcontainer/scripts/generate-configs.sh 自动拼接生成:它读取仓库根目录Dockerfile与.devcontainer/resources/devcontainer-Dockerfile中的开发专属 stage,合并后输出。因此:
- 需要新增工具或依赖时,编辑
.devcontainer/resources/devcontainer-Dockerfile; - 随后运行Generate DockerfileTask(等效于手动执行
generate-configs.sh)。
该脚本还会顺带做一件开发便利之事:从/data/config/app.conf读取 API_TOKEN,自动生成 VS Code 与 Gemini 的 MCP(Model Context Protocol)配置,指向http://127.0.0.1:20212/mcp/sse,让 AI 助手能直接与运行中的后端交互。
4.2 构建期 vs 运行期的区分
维护原则清晰简单:
- 构建期(bake into image):像
apk add安装新软件包这类改动,写入资源 Dockerfile; - 运行期(container start):创建软链接、设置权限、启动服务这类依赖运行时路径的操作,使用
.devcontainer/scripts/setup.sh。
从 .devcontainer/Dockerfile 的构建内容可以看到开发 stage 做了哪些加固与扩展:安装php83-pecl-xdebug、pytest、pytest-cov、zsh、chromium(含 chromedriver,用于前端 UI 测试)、docker-cli系列,以及通过 curl 下载的 hadolint(Dockerfile 静态检查);同时把netalertx用户加入 sudoers(免密 sudo)、把/etc/passwd中的/app:替换为/workspaces:,并让netalertx成为容器的默认用户。注意开发 stage 的最后以ENTRYPOINT ["/bin/sh","-c","sleep infinity"]结束,这与生产镜像的入口脚本完全不同——开发容器不需要启动应用,只负责常驻等待开发者连接。
4.3 多文件夹工作区
devcontainer 构建完成后,建议按 .devcontainer/WORKSPACE.md 的说明,通过File → Open Workspace from File打开NetAlertX.code-workspace,即可在一个窗口内同时浏览主源码与运行期目录:
- NetAlertX:主源码;
- /tmp:运行期临时文件;
- /tmp/api:API 响应缓存(JSON);
- /tmp/log:应用与插件日志。
工作区还专门配置了 pytest 仅扫描test/目录,避免误把/tmp下的运行时文件当作测试发现对象。
4.4 项目约定
.github/copilot-instructions.md 是帮助 AI 与人类理解项目架构、编码规范的重要资源,其中强调了如何复用现有 helper 函数而非硬编码值(例如端口、密钥)。在开发容器内编码时遵循这些约定,可以保持代码库的一致性与可维护性。
五、开发容器与生产镜像的关系
理解 devcontainer 与生产镜像的关系,有助于正确使用它:
- 根目录 Dockerfile 采用三阶段构建:builder(编译 venv)→runner(最小运行环境,也是 devcontainer 的基础)→hardened(只读加固,生产使用)。
- devcontainer 直接取材于
runner阶段,因此保留了ENTRYPOINT、/entrypoint.d检查脚本、/services服务脚本等生产结构;但通过覆盖 entrypoint 为sleep infinity并注入开发工具,实现了"生产同构 + 开发便利"。 - 容器内所有目录权限刻意设置为宽泛的
777,与生产镜像的004/005只读加固形成鲜明对比,这正是 .devcontainer/README.md 所强调的"brutalist permissions"——开发期追求最大灵活性,生产期追求最小权限。
六、常见开发场景速查
| 场景 | 操作 |
|---|---|
| 启动/重启前后端服务 | F1 → Tasks: Run Task → Start Backend / Start Frontend |
| 调试 Python 后端 | 打开server/__main__.py设断点,按 F5(Attach 5678) |
| 调试 PHP 前端 | VS Code 监听 9003 + 浏览器 Xdebug helper 扩展 |
| 修改容器依赖 | 编辑resources/devcontainer-Dockerfile→ 运行 Generate Dockerfile |
| 重置运行期状态 | F1 → Tasks: Re-Run Startup Script(重跑 setup.sh) |
| 运行全部测试 | 集成终端pytest -q或 Test Explorer |
| 打开多文件夹工作区 | File → Open Workspace from File →NetAlertX.code-workspace |
七、总结
NetAlertX 的 devcontainer 以"尽量贴近生产、同时提供丰富开发工具"为设计目标:它复用生产runner镜像保证环境一致,通过自动生成的 Dockerfile 与幂等启动脚本实现可维护的构建/运行期分离,并内置了前后端双调试器、测试框架、代码质量工具与多文件夹工作区,为所有现有及未来的贡献者提供了强大而一致的开发基础。掌握本文介绍的启动、调试、测试与维护流程后,你就能在这个容器内高效地参与 NetAlertX 的开发与调试工作。
相关文件速览:devcontainer.json · Dockerfile(自动生成) · 资源 Dockerfile(需手改) · 启动脚本 setup.sh · 生成脚本 generate-configs.sh · 工作区说明 WORKSPACE.md · 维护笔记 README.md
- 后端
- 网络
- 运维
- 数据可视化
【免费下载链接】NetAlertX
Centralized network visibility and continuous asset discovery. Monitor devices, detect change, and stay aware across distributed networks.
相关推荐
NetAlertX DevContainer 开发环境完全指南:容器化构建、F5 调试与生产级验证
NetAlertX DevContainer 开发环境完全指南:容器化构建、F5 调试与生产级验证 本指南以 NetAlertX 仓库自带的 DevContai
后端网络运维数据可视化OpenShift Origin 开发容器(Devcontainer)搭建实战:基于 Podman 的 openshift-tests 开发环境完整指南
OpenShift Origin 开发容器(Devcontainer)搭建实战:基于 Podman 的 openshift tests 开发环境完整指南 导读
测试云原生质量保障Norm高级用法:使用selection/2轻松实现数据字段的可选与必选控制
Norm高级用法:使用selection/2轻松实现数据字段的可选与必选控制 Norm是一个强大的数据规范与生成工具,而 selection/2 函数则是其核心
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考