有后端时如何通过 HTTP 路由对接
目标
完成本篇后,你可以明确区分并验证这 3 件事:
exec://...handler 会“启动进程 + 转发流量”,适合单容器后端快速起步。http://...handler 只负责转发,不会帮你启动进程;更适合接入已经存在的独立 service。- 你会理解默认鉴权、
application.public_path(哪些路径允许未登录访问)最小放开规则,以及后端数据应写入/lzcapp/var。
前置条件
- 你已完成 5 分钟完成 Hello World 并多端验证。
lzc-cli box default已指向目标微服。- 你本机可以执行
curl(用于可选验证)。
步骤
1. 创建一个带后端的模板项目
lzc-cli project create hello-api -t todolist-golang然后在应用 ID 提示里按回车使用默认值,或输入你自己的命名。进入项目目录:
cd hello-api2. 先部署并验证默认 exec handler
先部署:
lzc-cli project deploy
lzc-cli project info默认情况下,project 命令会优先使用 lzc-build.dev.yml,并打印实际的 Build config,也就是“当前实际命中的构建配置文件”。 如果你要操作发布配置,请显式加上 --release。
继续后续步骤前,请先确认 lzc-cli project info 输出里出现 Project app is running.。
如果还在启动中,等待几秒后再次执行 lzc-cli project info。
在浏览器打开 Target URL 并完成登录,然后在开发者工具 Console 执行:
fetch('/api/health').then((r) => r.json()).then(console.log);
fetch('/api/todos').then((r) => r.json()).then(console.log);期望结果:
/api/health返回{"status":"ok"}。/api/todos返回items列表(初次通常为空)。
说明:
- 模板默认路由是
/=exec://3000,/app/run.sh。这里的路由规则可以先理解成“某个请求该转给谁处理”。 - 这条规则会执行
/app/run.sh并把流量转发到127.0.0.1:3000。 - 这就是
exechandler 的核心:启动进程 + 转发请求。
3. 新增第三方 service,演示 http handler
编辑 lzc-manifest.yml,在保留默认 exec 路由的前提下,新增 /inspect/ 路由与 whoami service:
application:
image: embed:app-runtime
routes:
- /inspect/=http://whoami:80/
- /=exec://3000,/app/run.sh
services:
whoami:
image: registry.lazycat.cloud/traefik/whoami说明:
whoami是一个真实第三方服务,用来演示http路由转发目标。/inspect/走http://whoami:80/,不会触发/app/run.sh。"/=exec://..."保持不变,原本 Todo 功能仍可用。/inspect/规则要放在"/="之前,避免被更宽泛规则先匹配。
4. 部署并验证 http handler
lzc-cli project deploy
lzc-cli project info在已登录浏览器页面的 Console 执行:
fetch('/inspect/').then((r) => r.text()).then(console.log);期望结果:输出里可看到 whoami 返回的请求信息(例如 Hostname、RemoteAddr、Headers)。
通过这一步你可以确认:http handler 只做转发,目标响应来自 services.whoami。
5. (可选)配置 application.public_path 后用 curl 验证
默认情况下,微服应用 HTTPS 路径受登录态保护。未登录请求直接 curl 通常会被拦截,这是预期行为。
如果你希望放开健康检查,可在 lzc-manifest.yml 添加:
application:
public_path:
- /api/health重新部署后验证:
lzc-cli project deploy
lzc-cli project info
curl "<Target URL>/api/health"说明:public_path 应只放开必要路径,避免过度暴露接口。
6. 查看 Todolist 的数据目录(/lzcapp/var)
先回到应用页面,手动新增 1-2 条待办事项(Todo),让应用先产生数据文件。
先进入应用容器:
lzc-cli project exec -s app /bin/sh进入容器后执行:
ls -la /lzcapp/var这里对应的就是应用容器内的 /lzcapp/var。
对于 Todolist 这类有后端数据的应用,数据文件应放在这个路径下(例如 /lzcapp/var/todos.json)。
重要提示:仅 /lzcapp/var/ 目录下的内容会在重启应用后保留。
验证
满足以下条件即通过:
project info显示Current version deployed: yes。/api/health返回status: "ok"。/inspect/返回 whoami 的请求信息。- 你能通过
project exec在容器内确认 Todolist 的持久化目录/lzcapp/var(例如看到todos.json)。
常见错误与排查
1. /inspect/ 返回 404 或 502
排查顺序:
- 检查路由是否为
/inspect/=http://whoami:80/。 - 检查该路由是否位于
"/="规则之前。 - 检查
services.whoami.image是否为registry.lazycat.cloud/traefik/whoami。 - 执行
lzc-cli project log -s whoami -f查看 whoami 容器日志。
2. curl <Target URL>/api/health 被拦截或跳转登录
原因:默认鉴权开启,未登录请求会被拦截。
处理:
- 用已登录浏览器执行
fetch('/api/health')验证。 - 或按需配置
application.public_path后重新project deploy。
3. 不确定 Todolist 数据该放哪里
处理:统一放在 /lzcapp/var 下;仅该目录内容会在重启应用后保留。
4. 部署后结果没变化
处理:
lzc-cli project deploy
lzc-cli project info确认 Current version deployed: yes。
下一步
继续阅读:LPK 如何工作:精简机制与最小规范