devops/deploy-netlify · v1.0.0 · 2026-10-27 · sha256 e7f0eaf40488149e
devops/deploy-netlify v1.0.0A
Immutable. This exact content never changes and is served at /api/v1/blob/e7f0eaf40488149e.
---
name: devops/deploy-netlify
description: Netlify 部署方法论,使用 netlify CLI 部署前端应用、静态站点和 Serverless Functions
version: 1.0.0
agent: devops
type: methodology
user-invocable: false
agent-invocable: true
dependencies:
- shared/tech-stack-detection
triggers:
- 需要部署到 Netlify 时
- 项目是静态站点或前端 SPA 时
- 需要 Serverless Functions 时
metadata:
internal: true
---
# Netlify 部署
## 适用场景
- 前端应用(React、Vue、Svelte、Next.js)
- 静态站点(Hugo、Astro、Gatsby、Eleventy)
- Serverless Functions(Netlify Functions)
- 表单处理、身份认证(Netlify Identity)
- 边缘函数(Netlify Edge Functions)
## 前置条件
1. 安装 Netlify CLI:`npm i -g netlify-cli`
2. 登录 Netlify:`netlify login`(需要用户交互完成授权)
3. 验证登录:`netlify status`
4. 项目根目录有 `package.json`(Node.js 项目)
## 部署流程
### 1. 构建项目
```bash
npm run build
# 产物目录通常为 dist/、build/ 或 .next/
```
### 2. 初始化 Netlify 项目
```bash
# 在项目根目录初始化(交互式)
netlify init
# 或链接到已有项目
netlify link
```
`netlify init` 会创建 `netlify.toml` 配置文件。
### 3. netlify.toml 配置
```toml
[build]
command = "npm run build"
publish = "dist"
functions = "netlify/functions"
[build.environment]
NODE_VERSION = "20"
NPM_FLAGS = "--no-audit --no-fund"
# SPA 路由重写
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
# 自定义响应头
[[headers]]
for = "/*"
[headers.values]
X-Frame-Options = "DENY"
X-XSS-Protection = "1; mode=block"
Referrer-Policy = "strict-origin-when-cross-origin"
# 边缘函数
[[edge_functions]]
function = "auth"
path = "/api/*"
```
### 4. 部署
```bash
# 预览部署(staging)
netlify deploy
# 生产部署
netlify deploy --prod
# 指定产物目录部署
netlify deploy --dir=dist --prod
```
**部署输出示例**:
```
Deploy path: /path/to/project/dist
Configuration: /path/to/project/netlify.toml
Deploying to main site URL...
✔ Finished hashing 32 files
✔ CDN requesting 12 files
✔ Finished uploading 12 assets
✔ Deploy is live!
Logs: https://app.netlify.com/sites/my-site/deploys/xxx
Website URL: https://my-site.netlify.app
Unique Deploy URL: https://xxx--my-site.netlify.app
```
### 5. 环境变量管理
```bash
# 设置环境变量
netlify env:set DATABASE_URL "postgres://..."
# 导入 .env 文件
netlify env:import .env
# 列出环境变量
netlify env:list
# 删除环境变量
netlify env:unset DATABASE_URL
# 拉取环境变量到本地
netlify env:pull .env
```
### 6. 域名绑定
```bash
# 添加自定义域名
netlify domains:add example.com
# 列出域名
netlify domains:list
```
## Netlify Functions
### 创建 Serverless Function
在 `netlify/functions/` 目录下创建函数:
```javascript
// netlify/functions/hello.js
exports.handler = async (event) => {
return {
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message: 'Hello from Netlify Functions!' }),
};
};
```
```typescript
// netlify/functions/api.ts
import type { Handler } from '@netlify/functions';
const handler: Handler = async (event) => {
return {
statusCode: 200,
body: JSON.stringify({ path: event.path }),
};
};
export { handler };
```
### 本地测试 Functions
```bash
# 启动本地开发服务器(含 Functions)
netlify dev
```
## CI/CD 集成
### Git 自动部署
Netlify 原生支持 Git 集成,连接仓库后:
- push 到 `main` 分支 → 自动生产部署
- push 到其他分支或 PR → 自动预览部署
### GitHub Actions 手动触发
```yaml
name: Deploy to Netlify
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm test
- run: npm run build
- name: Deploy to Netlify
uses: nwtgck/actions-netlify@v3
with:
publish-dir: dist
production-deploy: true
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
```
**需要的 Secrets**:
- `NETLIFY_AUTH_TOKEN`:Netlify Personal Access Token(User Settings → Applications → Personal access tokens)
- `NETLIFY_SITE_ID`:站点 ID(Site Settings → General → Site ID)
## 项目类型适配
| 项目类型 | publish 目录 | build 命令 | 说明 |
| ---------------- | ------------ | --------------------------- | ----------------------------------- |
| Vite (React/Vue) | dist | `npm run build` | 需配置 SPA redirect |
| Next.js 静态导出 | out | `next build && next export` | next.config 配置 `output: 'export'` |
| Create React App | build | `npm run build` | 需配置 SPA redirect |
| Gatsby | public | `npm run build` | - |
| Hugo | public | `hugo` | 需设置 HUGO_VERSION 环境变量 |
| Astro | dist | `npm run build` | - |
## 检查清单
- [ ] `netlify.toml` 配置正确(build command、publish dir)
- [ ] 环境变量已配置(`netlify env:set`)
- [ ] 构建命令本地验证通过(`npm run build`)
- [ ] SPA 路由重写已配置(如需要)
- [ ] 生产部署 URL 可访问
- [ ] 自定义域名已绑定(如需要)
- [ ] Functions 测试通过(`netlify dev`)
- [ ] CI/CD Secrets 已配置