5月27日 21:08

如何部署 Astro 应用到不同的平台(Vercel、Netlify、Node.js)?有哪些部署最佳实践?

核心答案

Astro 部署分两条路线:静态站点(SSG)直接丢到 Vercel/Netlify 就行,零配置;SSR 应用则必须装对应平台的适配器(@astrojs/vercel@astrojs/netlify@astrojs/node),在 astro.config.mjs 里设 output: 'server' 并注册适配器。

选平台的关键判断:纯内容站选哪个都差不多,Vercel 对 SSR 支持更成熟(支持 ISR 缓存),Netlify 的 Edge Functions 延迟更低,自建服务器用 Node.js 适配器跑 node ./dist/server/entry.mjs

静态部署:三行命令搞定

Vercel 和 Netlify 对 SSG 项目开箱即用——连仓库、自动构建、自动部署,不需要任何适配器。GitHub Pages 也没问题,在 astro.config.mjs 里配好 sitebase 就行。

SSR 部署的关键区别

三个平台的适配器装法一样(npx astro add vercel/netlify/node),但运行时差异很大:

  • Vercel:支持 ISR(增量静态再生),设 isr: true 可对动态页面做缓存,适合内容偶尔更新的场景
  • Netlify:Edge Functions 跑在 Deno runtime 上,冷启动极快,但有些 Node API 用不了
  • Node.js:分 standalonemiddleware 两种模式——前者直接跑,后者可以嵌入 Express/Fastify

Docker 和 CI/CD

Docker 部署本质还是 Node.js 适配器:多阶段构建,builder 阶段装依赖+构建,runner 阶段只拷贝产物。CI/CD 就是标准的 checkout → install → build → deploy 流水线,各平台都有现成 Action。

追问:这些你大概率会被接着问

Q:SSG 和 SSR 能混用吗? 能。设 output: 'hybrid',默认静态,需要动态的页面加 export const prerender = false

Q:环境变量怎么区分公开和私有? PUBLIC_ 前缀的变量客户端可见,其他的只在服务端。别把密钥暴露到前端代码里。

Q:部署后首屏慢怎么排查? 先看是不是 SSR 模式下冷启动问题(Edge Functions 可缓解),再查有没有大量未优化图片,最后用 Lighthouse 跑一遍确认瓶颈在渲染还是网络。

标签:Astro