ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用 Claude Code 从零构建商业级全栈网站:鉴权、数据库与CI/CD落地实践

用 Claude Code 从零构建商业级全栈网站:鉴权、数据库与CI/CD落地实践 这次我们来看一个偏工程落地的话题用 Claude Code 从零构建一个包含后端鉴权、数据库、多媒体处理与自动化部署的“商业级网站”。注意这里说的不是两三页的前端 Demo而是能承载真实用户、能上线、能迭代的全栈工程。先说结论Claude Code 这类终端里的 AI 编码代理主要价值在于“把大量重复编码工作变成可对话的任务流”。它能在项目目录里读取代码、生成文件、跑命令、看报错再根据报错自己改代码适合搭建项目骨架、补充业务接口、写迁移脚本、补测试用例、被动的检查安全遗漏。但它不是“一个人输入描述商业网站就自动出来的魔法”。真正决定项目质量的是你怎么拆任务、怎么验收、怎么把 CI/CD 和人审放进流程里。下面这篇文章我会按一套可复制的流程来写从终端安装 Claude Code、建立项目规划约定到设计后端鉴权、接入数据库和对象存储、处理多媒体上传再到引入自动化部署。最后还会给出常见的模型配置报错、Token 消耗控制思路和工程化建议。材料有限具体的版本号、显存、接口参数我不会硬编凡是拿不准的地方会明确告诉你需要在本机验证。1. Claude Code 核心能力速览先把关键信息列出来方便你判断这个工具值不值得进你的技术栈。能力项说明项目类型终端内的 AI 编码代理由 Anthropic 开发安装方式Node.js 环境 npm 全局安装命令行启动核心能力读取项目上下文生成/修改多文件代码执行命令根据报错迭代修复交互方式终端对话式支持长任务拆解与多文件并行编辑适合场景全栈项目起步、后端接口开发、数据库迁移、测试补齐、代码重构、CI/CD 脚本编写是否支持 API本身不是 Web API 服务但可以做 headless/脚本化调用具体参数以官方 CLI 版本为准是否支持批量任务可以批量生成页面或批量修改文件需要写循环脚本或使用 CLI 的自动化模式显存要求不依赖本地 GPU 推理需要能连通 Anthropic API资源占用本地只有 Node 进程和文件监听开销实际计费成本主要取决于上下文长度和请求次数安全边界默认有能力读写文件、执行命令需要开发者配置命令执行策略并审阅 diff从这张表能看出Claude Code 和本地跑 Stable Diffusion、ComfyUI 这类工具不是一回事。它的门槛不在显卡而在工程习惯你会不会把“大需求”拆成“小任务”会不会在让它执行命令之前设置安全边界能不能在生成代码后做代码审查和测试。2. 这个实战适合谁接入前先划清边界先说适合的人。第一种是用 Claude Code 做 Web 全栈项目但又不想从登录注册开始手写的人第二种是已经在写后端但想快速生成数据库模型、补齐接口测试的开发者第三种是负责项目自动化部署希望让 AI 协助编写 Dockerfile、GitHub Actions 或 Jenkins 流水线的人。如果你符合其中任意一类这篇文章的流程可以直接参考。如果你现在只是需要一个“看起来完整”的静态站点Claude Code 也可以做但那是大材小用。它更适合的状态是你已经想清楚要做一个需要用户注册、上传文件、处理视频图片、有后台管理的商业级系统只是在编码效率上想提速。这里也要把边界讲清楚。不要把生产环境密钥、客户隐私数据、公司内部系统代码一股脑粘贴给 AI。商业级系统对敏感信息处理有要求你可以让 Claude Code 生成加密和脱敏逻辑但不要为了“让它更懂业务”就把真实账号密码写进对话。对于包含人脸、声音、版权素材的多媒体功能必须在项目开始就明确授权链路不能等上线后再补救。还有一点容易被忽略Claude Code 的定位是提升开发效率而不是替代你签字的责任。发布到生产环境的代码必须是经过你自己或团队代码评审的代码尤其是鉴权、支付、权限相关模块更应该人工核对后再合并。3. 环境准备一次性把 Claude Code 跑通Claude Code 的本地依赖并不重主要前置条件是 Node.js 和 npm。安装前建议先检查好三样Node 版本、npm 全局目录是否在 PATH 中、终端能否正常访问 Anthropic API。node -v npm -v如果还没有安装 Node.js去 Node.js 官网下载 LTS 版本这是最稳妥的选择。某些 Linux 环境会用包管理器安装旧版 Node建议通过官方源或 nvm 管理避免因为版本过旧导致 CLI 无法运行。准备好 Node.js 之后全局安装 Claude Codenpm install -g anthropic-ai/claude-code安装完成后在终端里输入claude --version能输出版本号就说明安装成功。如果提示command not found一般是 npm 全局 bin 目录没有加入 PATH。可以用下面的命令查看 npm 全局目录npm config get prefix找到 bin 目录后把它加入 shell 的 PATH 配置之后再重新打开终端验证。这个报错在 Windows 上也比较常见尤其是通过 PowerShell 使用 npm 时。首次运行通常需要登录账户或配置 API Key。按照官方提示完成登录即可。登录前要确认你的网络环境能正常访问 Anthropic API如果公司内网有防火墙限制先解决网络策略再继续否则后续所有请求都会超时。登录以后建议先在一个临时测试目录里跑一次claude让它创建一个最小示例文件确认读文件、写文件、执行命令这三条链路是通的。不要直接在正式项目里做首次测试因为第一次会话往往需要摸索权限和交互方式容易留下多余文件。4. 从空目录开始让 Claude Code 先给方案而不是先写代码很多人用 Claude Code 犯的第一个错误是上来就要求“做一个完整系统”。结果 AI 生成了一堆文件目录混乱、重复代码多、安全问题明显最后还得推倒重来。更高效的做法是先让它做架构设计再进入编码。比如你准备做一个全栈站点可以在项目根目录放一个CLAUDE.md文件把技术栈、目录结构、编码规范、禁止事项写清楚。这个文件会成为 Claude Code 读取项目上下文时的“导航说明”能显著减少它猜错方向的概率。# CLAUDE.md ## 项目定位 一个包含用户注册登录、内容管理、图片/视频上传与转码的商业级网站。 ## 技术栈 - 前端React TypeScript Vite - 后端Node.js Express/Fastify TypeScript - 数据库PostgreSQL Prisma ORM - 对象存储MinIO 兼容 S3 接口 - 部署Docker GitHub Actions ## 高优先级要求 - 所有接口必须带鉴权校验默认拒绝未授权访问 - 密码必须使用 argon2 或 bcrypt 哈希禁止明文存储 - 上传文件前校验类型、大小文件名不能使用用户原始文件名 - 不要生成任何真实密钥或写死生产配置 ## 工作流要求 - 修改文件前先列出改动计划 - 每次改动后运行对应的测试 - 生成代码后给出简短的改动说明这里的技术栈只是一个例子。如果你团队已经用了 FastAPI、MySQL、Redis 等把CLAUDE.md里对应内容替换掉就行。关键是让 AI 从一开始就知道你在什么约束下工作。准备好之后在终端里运行claude然后输入第一轮规划指令。比较好的说法是请先阅读项目根目录的 CLAUDE.md然后按目录规划输出 1. monorepo 结构建议 2. 数据库表设计草案 3. API 路由清单 4. 鉴权方案选型 5. 需要我确认的问题 不要写代码先给我评审。这一步的核心是“先设计后编码”。让 AI 把表结构、接口列表、依赖关系列出来你再人工判断是否合理。比如它会建议把用户表和会话表分开把媒体文件的信息和对象存储的 object key 关联起来这些设计在项目初期就敲定比后期重构成本低很多。5. 后端鉴权模块登录、注册、会话与权限后端鉴权是最不能全盘交给 AI 的部分因为它直接决定系统安全基线。建议让 Claude Code 先写“最小可用版本”你审完后它再继续补全。先明确鉴权方案设计要点密码哈希处理、会话令牌策略、权限模型、登录失败限流、审计日志。如果你在 Node.js 技术栈里做可以通过 Claude Code 生成类似下面的中间件骨架。下面代码示意了“校验 Bearer Token”的流程具体实现请结合你项目的实际用户表和加密方案调整。// src/middleware/auth.ts —— 示例结构具体代码需按项目版本调整 import type { Request, Response, NextFunction } from express; interface AuthPayload { userId: string; role: string; } declare global { namespace Express { interface Request { user?: AuthPayload; } } } export function requireAuth(req: Request, res: Response, next: NextFunction) { const header req.headers.authorization; if (!header || !header.startsWith(Bearer )) { res.status(401).json({ code: UNAUTHORIZED, message: 缺少访问令牌 }); return; } const token header.slice(Bearer .length); // 这里的 verifyToken 需要根据实际 JWT 或 Session 方案实现 const payload verifyToken(token); if (!payload) { res.status(401).json({ code: TOKEN_INVALID, message: 访问令牌无效或已过期 }); return; } req.user payload; next(); }如果你用的是 Python FastAPI可以让它生成对应的Depends(get_current_user)版本如果你用 Java Spring Boot可以让它生成HandlerInterceptor或 Spring Security Filter。Claude Code 的多语言能力不差但你要在CLAUDE.md里明确语言和框架否则它可能生成与你现有代码风格完全不一致的内容。鉴权模块完成后必须做的验证项目包括注册成功返回什么密码错误返回什么缺少 Token 访问受保护路由是否返回 401刷新 Token 的过期时间怎么处理不同角色访问同一接口是否有不同权限。其中权限模型是 AI 最需要被引导的地方千万不要只给一句“加用户角色”而是要把管理员、普通用户、审核员这些角色和对应可访问资源直接列清楚。6. 数据库接入迁移脚本比手写 SQL 更可控数据库是商业级网站的“地基”但也是 AI 最容易踩坑的地方。它很容易生成一张结构上看起来合理、实际执行时会锁表或丢数据的迁移脚本。因此我建议在项目里引入迁移机制在工程里把数据库变更变成可通过 CI 执行的版本化脚本。以 Prisma 为例你可以让 Claude Code 根据第 4 节的表设计草案生成schema.prisma。它的核心思路不是让你记住命令而是让 AI 围绕模型文件工作这样数据库结构、类型提示和迁移逻辑能保持一致。// prisma/schema.prisma —— 示例模型实际字段需按业务设计 model User { id String id default(cuid()) email String unique password String nickname String? role String default(USER) status String default(ACTIVE) createdAt DateTime default(now()) updatedAt DateTime updatedAt } model MediaAsset { id String id default(cuid()) userId String objectKey String mimeType String size Int status String default(PENDING) createdAt DateTime default(now()) user User relation(fields: [userId], references: [id]) }如果你团队选了 MySQL、Oracle 或者其他数据库底层关系模型可能略有差异。比如 PostgreSQL 的枚举类型和 JSONB 字段很有用MySQL 则要用 JSON 或单独的关联表。你可以在规划阶段就让 Claude Code 比较不同数据库方案的差异再根据项目的查询模式做选择。实际编码时需要注意一点不要让 AI 每次修改都自动执行破坏性迁移。建议只在开发环境允许自动迁移在测试和生产环境必须走 CI 里的迁移任务。CI 中可以先执行迁移再跑测试这样数据库结构变更不会只在本地生效。7. 多媒体处理上传、转码、入库与合规边界多媒体处理是“看起来简单、落地很重”的模块。用户传一张头像图和传一段 4K 视频处理逻辑完全不同。若在请求里同步转码长视频接口会瞬间超时如果所有文件都放本地磁盘扩容和备份也会很难受。主流的做法是API 负责接收和校验上传文件把文件写入对象存储然后把异步转码任务丢给队列。对于本地实测项目可以先让 Claude Code 生成一个最小上传接口限制文件类型和大小。下面的代码是 Node.js 技术栈下的示例实际使用前替换成项目里的上传中间件import multer from multer; const upload multer({ storage: multer.memoryStorage(), limits: { fileSize: 200 * 1024 * 1024, // 200MB具体值按业务调整 }, fileFilter: (_req, file, cb) { const allowed new Set([ image/jpeg, image/png, video/mp4, ]); if (allowed.has(file.mimetype)) { cb(null, true); } else { cb(new Error(不支持的文件类型)); } }, }); export { upload };真正的转码环节建议交给异步 worker。比如视频上传后API 先把原始文件写入 MinIO再往 Redis 队列投递任务然后立即返回“文件处理中”。worker 从队列取到任务后调用 ffmpeg 生成预览图、压缩版本和多种分辨率最后把结果写回对象存储并更新数据库记录。这里必须提醒多媒体数据不能默认公开访问。头像、课程视频、用户上传的审核资料等都属于隐私数据应通过签名 URL 或服务端鉴权给到指定用户而不是直接生成一个永久公网链接。让 Claude Code 写代码时只允许它把 objectKey 存进数据库不要直接把完整 URL 写进记录。图片、视频内容的版权和合规问题也需要在业务层面处理。即使 AI 帮你写好了上传接口项目上线前仍要有人工审核机制和用户协议明确平台对用户上传内容的使用边界。涉及人脸、声音等敏感内容更要先确认是否有相关授权不能因为代码“能跑”就直接上线。8. 自动化部署让 CI/CD 也参与审查构建商业级网站自动化部署不是可选项。最简单的闭环应当包含推送代码到主分支 → 安装依赖 → lint / typecheck → 自动化测试 → 构建镜像 → 执行数据库迁移 → 发布到服务器。这一步也可以用 Claude Code 辅助生成但 YAML 语法和权限配置需要人工检查。下面是一个 GitHub Actions 的最小示例用于主分支推送后执行检查与构建。实际项目中的包管理器命令、Node 版本、测试命令可能不同请按项目替换。name: ci on: push: branches: [ main ] jobs: check-and-build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkoutv4 - name: Setup Node uses: actions/setup-nodev4 with: node-version: 20 - name: Install dependencies run: npm ci - name: Lint run: npm run lint - name: Typecheck run: npm run typecheck - name: Test run: npm test - name: Build run: npm run build部署阶段通常需要 ssh 到服务器或推送 Docker 镜像到镜像仓库后再让生产服务器拉取。这里涉及服务器密钥、Docker Registry 凭证绝对不能用明文写进仓库。你可以使用 GitHub Actions 的 Secrets 或 Jenkins Credentials 来管理。Claude Code 可以生成 Dockerfile但从安全角度看你仍要检查docker run是否以最小权限执行、镜像是否使用非 root 用户、端口是否只暴露必要范围。部署上线后第一个要验证的不只是“页面打开没有”而是完整链路用户能否注册、登录后能否看到自己的数据、旧 Token 失效后接口是否拒绝访问、上传后的视频能否在对象存储中被正确读取。如果 CI 里有数据库迁移步骤还要在跑号前备份数据库否则一次错误迁移可能让整个站点进入不可用状态。9. 资源占用与 Token 消耗观察虽然 Claude Code 不依赖显卡但它有另一类需要观察的资源Token 消耗和会话上下文长度。一次很长的开发会话如果一直往里面堆文件内容和报错日志上下文会被不断压缩和重读响应质量和成本都会受到影响。从实际使用体验看建议把观察点放在三处一是每次会话结束后的 Token 使用统计二是 Claude 是否在对话中途出现“上下文变短但丢细节”的情况三是你是否把大文件整段粘贴进去。与其让它重新读 1000 行日志不如直接把错误关键词和上下文给它或者引导它执行grep和tail定位问题。这样既省 Token也更容易得到准确回复。如果你希望通过脚本批量调用 Claude Code需要确认你用的 CLI 版本支持 headless 参数再依据帮助文档调整。终端里执行claude --help查看当前版本的可用选项。一般思路是用命令传入一个自动任务文件和执行策略让它在持续集成环境中也能运行。不要根据旧教程在本地写死命令因为 CLI 参数可能会随版本调整。本地资源占用方面最简单的观测方式是打开系统任务管理器或top命令看claude对应的 Node 进程是否持续占用高 CPU。通常它在等待请求时处于空闲状态只有在读取代码、搜索文件或执行命令时才有明显 CPU 消耗。如果你发现它频繁读项目里的node_modules等大目录建议在.gitignore和文件搜索忽略规则里把无关目录排除掉否则项目一大每次扫描都会变慢。10. Claude Code 常见问题与排查这里把使用过程中比较容易遇到的坑整理成表格。不同版本可能有菜单或命令差异排错时优先以官方文档和当前版本的--help输出为准。问题现象可能原因排查方式解决思路claude命令找不到npm 全局 bin 目录不在 PATH执行npm config get prefix将 npm 全局 bin 加入 PATH 并重开终端登录失败或请求超时网络无法访问 API / Key 配置错误查看 CLI 日志确认网络连通检查 API Key 是否有效按照你的网络策略解决访问问题输入第三方模型名后报not a model this version ...Claude Code 当前版本无法识别所配置模型查看会话配置里的 model 参数把模型名改成 API 服务实际支持的名称或升级/调整配置改变了密钥但服务仍用旧配置环境变量没生效或进程未重启打印运行时配置检查重启终端和服务进程确认环境变量正确带入CLI 修改了不想让它改的文件权限策略过于宽松查看会话操作记录和 git diff收紧命令执行权限重要目录加入 ignore 配置生成的代码在 CI 里能过本地跑失败依赖版本或 Node 版本不一致对比 lockfile 和 CI 镜像 Node 版本统一 Node 版本使用npm ci而不是npm install数据库迁移后表结构不对schema 文件没有同步或迁移冲突查看迁移状态和数据库表结构让 Claude Code 分析差异新增修正迁移而不是手动删库API 调用后数据库新增了数据但列表查不到事务未提交或查询条件错误检查接口日志和数据库查询补测用例用真实请求验证接口返回“模型不识别”这个问题在社区讨论中相对常见尤其是在尝试把 Claude Code 接不同模型源的时候。很多人会配置一个模型名启动时报类似deepseek-v4-flash is not a model this version of Claude Code recognizes的错误。遇到这类问题先不要盲目改参数先确认两件事当前版本支持哪些模型名以及你配置的模型是否真的具备 API 工具调用能力。如果模型服务不支持 Claude Code 需要的协议即使配置界面看起来正确也会出现识别失败的情况。11. 商业级工程最佳实践把 AI 接入到商业级开发流程不是输入一个需求就开始自动化生产而是在原有工程规范上增加一个“高产的结对程序员”。下面几条经验是从实际项目出发能直接用好 Claude Code 的方法。第一设置最小可运行配置。让项目从启动到联调只需要一个配置文件和一条命令。Claude Code 需要稳定的上下文如果每次运行都要手工配一堆环境变量它很容易出错。把数据库、对象存储、Redis 等依赖用 Docker Compose 组织起来开发环境保持一条命令拉起。第二批量任务要带日志和重试。让 Claude Code 帮忙写批量处理脚本时必须明确输出日志规范。比如一次处理 1000 个文件处理的记录应该写入 log 或数据库任务失败要有重试机制避免中途停止后无法恢复。AI 生成的代码往往能处理“正常路径”你需要引导它考虑异常路径。第三接口服务要限制访问范围。如果 Claude Code 写了一个后端 API部署时必须确认监听地址不是0.0.0.0的粗放配置至少只暴露到内网或加网关鉴权。对外接口统一走 HTTPS并通过反向代理限制请求体大小和连接超时。第四发布前做效果复核。尤其是涉及自动生成文案、图片描述或身份验证的模块生成内容看起来没问题不代表真实场景没问题。你需要人工复核一个小样本集再让 Claude Code 根据回流问题修复代码而不是一次合并后就不管。第五遵守隐私和版权边界。不要拿真实用户媒体数据做无授权测试。开发环境尽量使用脱敏数据或自行构造的测试图片/视频生产环境的日志中不要记录完整密钥、Cookie 或用户文件内容。12. 总结先跑通最小闭环再铺规模如果只让我留一句建议那就是先让 Claude Code 帮你跑通一个最小闭环再考虑铺更多功能。最小闭环可以很简单用户注册 → 登录 → 上传一张图片 → 后端鉴权通过 → 图片进入对象存储 → 数据库记录状态 → 用户刷新页面能看到自己的文件列表 → CI 里自动执行测试 → 自动化部署到测试环境。这条链路全部走通之后你已经能用它验证模型、权限、数据库迁移、CI/CD 和对象存储之间的协作逻辑再往后加视频转码、角色权限、后台审核、监控告警都会顺畅很多。最容易踩的坑其实就是开头跳过架构设计直接让 AI 生成大而全但没人能维护的代码库。下一步建议你做的事很具体找一个空仓库写入CLAUDE.md把后端鉴权设计成第一个任务然后开始第一次真正意义上的 Claude Code 全栈实战。跑通最小闭环后再回到你的真实业务那时候你会更清楚哪些功能可以交给 AI哪些必须自己兜底。
返回列表