服务器:2C4G 轻量服务器
系统:Linux容器:Docker Docker Compose
项目:Node API Postgres Redis测试:unit test lint 少量 E2E
```一开始我以为只是把代码拉下来就行,实际遇到几个问题:```textnpm test
# Node 版本不一致docker compose up -d# postgres 还没 ready,api 已经开始连
npx playwright test
# 浏览器依赖缺失```
这些问题对人来说能手动绕,但 AI 编程助手不应该靠猜。
我先把运行时写到 `.devcontainer/devcontainer.json`:
```json
{"name": "ai-ready-dev",
"image": "docker.1ms.run/node:22-alpine","forwardPorts": [3000],
"postCreateCommand": "npm ci"}
```这样至少不用在服务器上反复切 Node 版本。后续如果需要 native module,再把系统依赖放进 Dockerfile。## 3. 固定依赖服务开发依赖用 `compose.dev.yaml` 管:```yamlservices:
app:image: docker.1ms.run/node:22-alpine
working_dir: /workspacevolumes:
- .:/workspacecommand: sh -c "npm ci && npm run dev"
ports:- "3000:3000"
env_file:- .env.example
depends_on:postgres:
condition: service_healthyredis:
condition: service_healthypostgres:image: docker.1ms.run/postgres:16
environment:POSTGRES_USER: app
POSTGRES_PASSWORD: appPOSTGRES_DB: app
healthcheck:test: ["CMD-SHELL", "pg_isready -U app"]
interval: 5stimeout: 3s
retries: 20redis:image: docker.1ms.run/redis:7
healthcheck:test: ["CMD", "redis-cli", "ping"]
interval: 5stimeout: 3s
retries: 20```
这里最有用的是 healthcheck。`compose up -d` 成功不代表数据库和缓存已经可用,AI 如果马上跑测试,很容易拿到假失败。
我把下面几条作为 AI 接任务前的预检:
```bash
docker compose -f compose.dev.yaml pulldocker compose -f compose.dev.yaml up -d
docker compose -f compose.dev.yaml psnpm ci
npm run lintnpm test
```如果只想先排镜像问题,可以单独跑:```bashdocker pull docker.1ms.run/node:22-alpine
docker pull docker.1ms.run/postgres:16docker pull docker.1ms.run/redis:7
```## 5. 复现结果整理后,AI 编程助手执行任务时,失败原因清楚了很多:- `pull` 失败:先看镜像入口和网络。- `up` 失败:看 Compose 服务和 healthcheck。
- `lint` 失败:看代码格式或规则。- `test` 失败:再看业务逻辑或测试本身。
这次最大的体会是:AI 接代码任务之前,先要让环境能被机器复现。README 可以解释背景,但真正执行的步骤要落到容器、Compose、脚本和健康检查里。","createTime":1782874735,"ext":{"closeTextLink":0,"comment_ban":0,"description":"","focusRead":0},"favNum":0,"html":"","isOriginal":0,"likeNum":0,