部署模式概览
三种输出模式
output: 'static'
纯静态生成。构建产物是一堆 HTML/CSS/JS 文件,可部署到任何静态文件服务器(GitHub Pages、S3、Nginx)。无需适配器。
output: 'server'
全站服务端渲染。每个请求都动态渲染,需要服务器运行时。需要安装对应平台的适配器。
output: 'hybrid'
混合模式。默认静态预渲染,个别页面/API 可设置 export const prerender = false 启用 SSR。
部署到 Vercel
# 安装 Vercel 适配器
npx astro add vercel
// astro.config.mjs
import { defineConfig } from 'astro/config';
import vercel from '@astrojs/vercel/serverless';
export default defineConfig({
output: 'server',
adapter: vercel({
// Edge Functions(更快,更便宜)
edgeMiddleware: true,
// 图片优化(自动使用 Vercel Image Optimization)
imageService: true,
// 增量静态再生(ISR)
isr: {
expiration: 60 * 60, // 1 小时重新生成
},
}),
});
# 通过 Vercel CLI 部署
npm install -g vercel
vercel
# 或者直接连接 GitHub 仓库,Vercel 自动部署
部署到 Netlify
npx astro add netlify
import netlify from '@astrojs/netlify';
export default defineConfig({
output: 'server',
adapter: netlify({
edgeMiddleware: true, // 使用 Netlify Edge Functions
}),
});
Astro <Image> 图片优化
---
import { Image } from 'astro:assets';
import heroImage from '../assets/hero.jpg';
---
<!-- 本地图片:自动优化为 WebP,生成 srcset -->
<Image
src={heroImage}
alt="英雄图"
width={800}
height={400}
format="webp"
quality={85}
/>
<!-- 远程图片:需要在 astro.config.mjs 中配置允许的域名 -->
<Image
src="https://example.com/image.jpg"
alt="远程图片"
width={400}
height={300}
inferSize <!-- Astro 5+ 自动推断尺寸 -->
/>
CI/CD 配置(GitHub Actions)
# .github/workflows/deploy.yml
name: Deploy to Vercel
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Type check
run: npx astro check
- name: Build
run: npm run build
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
- name: Deploy to Vercel
uses: vercel/action@v1
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
性能监控:Vercel Speed Insights
Vercel 提供免费的 Speed Insights,可以在 astro.config.mjs 中通过 speedInsights: true 一键启用。它会收集真实用户的 Core Web Vitals 数据(LCP、FID/INP、CLS),帮助发现性能问题。对于 Astro 网站,通常会看到接近完美的分数。
适配器选择指南
@astrojs/vercel — 首选
支持 Serverless 和 Edge Runtime;isr 配置实现增量静态再生(ISR),静态 + 动态两全其美;与 Vercel 图片优化、Analytics 深度集成;免费套餐适合个人项目。
@astrojs/netlify — 成熟稳定
支持 Netlify Functions 和 Edge Functions;netlify.toml 配置重定向规则;表单处理、Identity 服务与 Astro 集成良好;适合已有 Netlify 工作流的团队。
@astrojs/cloudflare — 边缘优先
在 Cloudflare Workers(Edge)上运行,全球节点延迟极低;可访问 Cloudflare KV、D1(SQLite)、R2(对象存储)等产品;注意 Workers 环境限制(无 Node.js 内置模块)。
@astrojs/node — 自托管
生成标准 Node.js HTTP 服务,用于自托管服务器(VPS、Docker);支持 standalone 模式(自带静态文件服务);适合需要完全控制服务器环境的场景。
部署到 Cloudflare Pages
// astro.config.mjs
import cloudflare from '@astrojs/cloudflare';
export default defineConfig({
output: 'server',
adapter: cloudflare({
mode: 'directory', // 'directory' 或 'advanced'
platformProxy: {
enabled: true, // 本地开发时模拟 Cloudflare 环境
},
}),
});
// 在 API 端点中访问 Cloudflare 绑定
export const GET: APIRoute = async ({ locals }) => {
// locals.runtime.env 是 Cloudflare 的环境绑定
const { env } = locals.runtime;
// 访问 KV 存储
const value = await env.MY_KV.get('key');
// 访问 D1 数据库
const result = await env.DB.prepare('SELECT * FROM posts').all();
return new Response(JSON.stringify(result.results));
};
本章小结
本章核心要点
- 三种输出模式:static(纯静态,无需适配器)、server(全站 SSR)、hybrid(默认静态 + 个别页面 SSR);大多数内容站点用 static 或 hybrid 即可,无需全站 SSR。
- 适配器的作用:将 Astro 的服务端功能(API Route/SSR)翻译为目标平台可运行的代码;不同平台使用不同适配器;静态模式不需要适配器。
- 图片优化最佳实践:用 astro:assets 的 <Image> 替代原生 <img>,自动生成 WebP 格式和 srcset;本地图片在构建时处理;远程图片需在配置中声明允许的域名。
- ISR(增量静态再生):Vercel 适配器的 isr 配置可让静态页面在一定时间后自动重新生成,兼顾静态性能和内容更新——无需完整重新构建整个站点。
- GitHub Actions 集成:CI 流水线中运行 astro check(类型检查)+ npm run build,再用平台 CLI/Action 部署;通过 secrets 安全传递 API Token 和环境变量。
- Cloudflare Pages 优势:Edge 节点遍布全球,延迟极低;免费套餐额度慷慨;可深度集成 KV/D1/R2 等 Cloudflare 产品构建完整后端;适合对全球访问速度要求高的站点。
完成!你已掌握 Astro 全貌
从 Islands 架构理念,到内容集合、多框架集成、SSR 模式,再到 SEO 优化与生产部署,你已经系统了解了 Astro 5 的核心特性。下一步,建议动手构建一个真实项目:博客、文档站或个人主页,将所学知识付诸实践。Astro 官方文档(docs.astro.build)也是极佳的参考资料。