用途
该技能用于在将源代码部署到 Zeabur 时,分析项目并生成正确、可部署的 Dockerfile。适用于用户需要为 Node.js、Python、Go、Rust、PHP、Ruby、Java、.NET、Elixir 等项目编写 Dockerfile 的场景。
主要能力
- 根据项目文件判断编程语言与版本、框架、包管理器、构建命令、启动命令、应用监听端口,以及是静态站点还是服务端应用。
- 按语言与框架生成对应的 Dockerfile,并添加 Zeabur 专用标签(language、framework)。
- 处理已有 Dockerfile:先分析,若正确则沿用,若有问题(端口错误、缺少依赖等)则建议改进,并补充缺失的 Zeabur 标签。
- 生成后可通过 CLI 部署,并支持在构建或运行失败时排查常见问题。
使用方式
调用 Zeabur CLI 时必须使用 npx zeabur@latest,不要直接使用 zeabur 或其他安装方式;若 npx 不可用,先安装 Node.js。
生成 Dockerfile 前需读取关键项目文件:
- Node.js:package.json、锁文件(package-lock.json / yarn.lock / pnpm-lock.yaml)
- Python:requirements.txt、Pipfile、pyproject.toml
- Go:go.mod
- Rust:Cargo.toml
- PHP:composer.json
- Ruby:Gemfile
- Java:pom.xml、build.gradle
- .NET:.csproj、.sln
- Elixir:mix.exs
同时检查是否存在:已有 Dockerfile 或 docker-compose.yml、构建配置(vite.config.js、webpack.config.js、next.config.js 等)、.env.example 中的必需环境变量。
为节省 token,应跳过:HTML 文件、锁文件内容(只检查存在哪种锁文件以确定包管理器,不解析内容)、Markdown 文件。
生成 Dockerfile 的通用规则:不加注释;不加 ENV 或 ARG(除非框架要求);添加 LABEL "language"="<lang>",可选值包括 nodejs、python、go、static、ruby、java、php、rust、dotnet、elixir、swift、bun;仅对真正的 Web 框架添加 LABEL "framework"="<framework>";始终在安装/构建命令前执行 COPY . .;除非用户另有指定,设置 WORKDIR /src;为应用监听端口添加 EXPOSE;除非构建镜像与运行镜像不同,否则不使用多阶段构建。
框架标签仅限:vite、create-react-app、next.js、remix、nuxt.js、umi、nest.js、hexo、vitepress、astro、sli.dev、docusaurus、nitropack、hono、medusa、svelte、flask、django、fastapi、spring-boot、laravel、thinkphp、rails、aspnet、blazorwasm、elysia、baojs。包/库不得标记为框架,例如 Python 的 gradio、pandas、numpy 等,Node.js 的 express、koa、hapi、fastify 等,以及 bootstrap、jquery、chart.js、three.js、d3.js。不确定时不要添加框架标签。
静态站点使用 zeabur/caddy-static:将构建输出复制到 /usr/share/caddy,不要添加 CMD 或 ENTRYPOINT,它监听 8080 端口,仅用于真正的静态站点,不用于 SSR 框架(Next.js、Nuxt.js、SvelteKit 等)。若用 Node.js 构建后作为静态服务,设置 LABEL "language"="nodejs"(而非 static)。
Node.js 默认基础镜像为 node:22-slim。根据锁文件确定包管理器:package-lock.json 用 npm 执行 npm install;yarn.lock 用 yarn 执行 yarn install;pnpm-lock.yaml 用 pnpm 执行 RUN npm install -g pnpm && pnpm install。使用 npm 时用 npm install,不要用 npm ci 或 --only=production、--omit=dev、--frozen-lockfile 等标志。Vite 静态站点用 zeabur/caddy-static 服务;Vite 配合 SSR 框架(SvelteKit)用 Node.js 运行时。Next.js 由 Zeabur 注入 PORT=8080,生产模式默认监听 8080,无需额外配置。Svelte / SvelteKit 使用 node:22(不用 alpine、不用 slim),设置 ENV PORT=8080,单阶段构建,不用 zeabur/caddy-static,不用 cross-env ADAPTER=static 或适配器专用构建命令。
Python 默认基础镜像为 python:3.10。Flask 先找 WSGI 入口,例如 main.py 中 app = Flask(__name__) 则入口为 main:app,使用 gunicorn 绑定 0.0.0.0:8080。FastAPI 根据情况选择启动方式:requirements.txt 中有 fastapi-cli 则用 fastapi run;某 .py 文件中有 if __name__ == "__main__": 则用 python <file>.py;否则用 uvicorn main:app --host 0.0.0.0 --port 8080(缺少 uvicorn 则安装)。通用 Python 若可能适用 WSGI 则用 gunicorn,不确定则用 python <file>.py。
Go 使用多阶段构建:构建阶段 golang:1.23,运行阶段 debian:bookworm-slim,复制构建产物,EXPOSE 8080。
PHP(Laravel / Symfony / 通用)使用 NGINX + PHP-FPM,可调整 PHP 版本与扩展。Laravel 在 composer install 后添加优化命令:php artisan config:cache && php artisan route:cache && php artisan view:cache。
处理已有 Dockerfile 时:先分析,若看起来正确则原样使用;仅在有问题时建议改进;始终补充缺失的 Zeabur 专用标签。
生成 Dockerfile 后部署:npx zeabur@latest deploy --project-id <project-id> --json。重新部署时必须传服务 ID 以避免创建重复服务:npx zeabur@latest deploy --project-id <project-id> --service-id <service-id> --json。完整部署流程使用 zeabur-deploy 技能。
适用场景
- 为多种语言与框架的项目生成可部署到 Zeabur 的 Dockerfile。
- 判断静态站点与服务端应用,并选择正确的服务方式(zeabur/caddy-static 或 Node.js 运行时)。
- 审查并改进已有 Dockerfile,补充 Zeabur 标签。
- 部署后排查构建或运行错误。
限制
- 调用 CLI 必须使用
npx zeabur@latest,不得直接使用zeabur或其他安装方式。 - 不解析锁文件内容,仅检查存在哪种锁文件。
- 不读取 HTML、Markdown 文件。
- 框架标签仅限指定列表,包/库不得标记为框架,不确定时不添加。
- 静态站点镜像仅用于真正的静态站点,不用于 SSR 框架。
- 错误处理时需借助 zeabur-deployment-logs、zeabur-port-mismatch 等技能排查常见问题。