用 Astro 搭建一个自己的博客:从第一篇文章到上线
Astro 很适合做内容型博客:默认在构建时把页面渲染成静态 HTML,浏览器拿到的是完整内容,上线后不需要常驻的服务器进程。下面从零开始,创建项目、写第一篇文章、加一个能点进文章的首页,最后把它部署到线上。
一、准备环境
需要 Node.js 22.12 及以上(用官方的偶数 LTS 版本最稳妥)、npm,以及一个顺手的编辑器。先确认版本:
node -v
npm -v
如果命令找不到,先安装 Node 并确保它已加入 PATH。
二、创建项目
用官方脚手架创建项目:
npm create astro@latest
脚手架会依次询问:项目目录填 ./my-blog;模板选择最精简的 minimal(空白起步)即可;提示是否安装依赖时选“是”。完成后进入目录并启动开发服务器:
cd my-blog
npm run dev
终端会打印一个本地地址,默认是 http://localhost:4321/;浏览器打开就能看到初始页面。改动文件会热更新,按 Ctrl + C 结束。
如果创建时选择不安装依赖,之后在项目目录执行 npm install 即可。npm ci 适合已经有匹配锁文件的项目,不是初次安装的必要步骤。
三、认识几个常用目录
先认识几个常用目录;精简模板没有生成的目录,可以按需新建:
src/pages/:页面与路由,一个文件对应一个地址;src/components/:可复用组件;src/layouts/:页面外壳;src/styles/:样式;public/:原样复制到产物的静态资源。
一个文件就是一个地址:src/pages/about.astro 对应 /about/。public/ 与 src/ 的区别,是前者不做任何处理、原样复制。先把“写页面 → 写文章 → 构建”的闭环跑通就够了。布局复用、内容集合、样式体系都可以之后按需再加,不必一开始就搭得很全。
四、写第一篇文章
Astro 可以直接把 Markdown 当作页面。新建 src/pages/posts/hello.md,它对应的地址是 /posts/hello/:
---
title: 我的第一篇文章
date: 2026-10-07
---
## 你好,世界
这是用 Markdown 写下的第一篇内容。标题和日期是我自己加的字段,
它们不会自动出现在页面上,需要时可以在布局里读取和展示。
几个要点:
- 文件放在
src/pages/下,路径就是网址,posts/hello.md会生成/posts/hello/; - 上面的
title、date属于自定义元数据,默认不会自动渲染;想让它们显示,就要在模板里读取; - 正文里的标题和段落会正常渲染成页面内容,所以页面本身是“自足”的。
最上面的 --- 包起来的是 frontmatter,用来放文章的元数据;它下面才是正文。普通 Markdown 页面也可以不写 frontmatter,需要保存标题、日期等信息时再添加。
五、让首页链接到文章
新建或替换 src/pages/index.astro,写一个最小的首页:
---
---
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>我的博客</title>
</head>
<body>
<h1>我的博客</h1>
<p>这里会记录我学到的东西。</p>
<a href="/posts/hello/">阅读第一篇文章</a>
</body>
</html>
这样一个最小的博客就成型了:首页可用、文章可访问,也不需要任何隐藏的列表机制。等熟悉之后再考虑抽取布局、做文章列表或样式主题。
六、放一张自己的图片

把图片放进 public/,并用根路径引用。例如文件 public/images/cover.jpg,在页面里就写成 /images/cover.jpg:
<img src="/images/cover.jpg" alt="封面" />
public/ 里的资源会原样复制到产物,引用路径从 / 开始。本地磁盘路径无法供线上读者访问;使用自己的图片时,要将文件一起部署。
七、构建与本地预览
开发服务器适合调试,真正上线的是构建产物:
npm run build
产物输出在 dist/。想在本地确认效果,运行:
npm run preview
终端同样会打印一个本地地址,按提示访问即可;不要直接双击 dist/index.html,因为页面资源使用根路径,必须经由服务器访问。Astro 默认输出静态站点,浏览器端不需要 Node 运行。
八、上线
静态站点有两种常见做法:
- 交给支持 Git 集成的静态托管平台:连接你的仓库,构建命令填
npm run build,输出目录填dist,之后推送代码就能自动构建部署; - 自己有一台已配置好的静态 Web 服务:把
dist/里的内容上传到站点根目录即可,不需要在服务器上跑 Node 构建。
绑定自定义域名与启用 HTTPS,按所用平台的提示完成域名解析。使用自有静态 Web 服务时,还需要确认文章路径和不存在的地址如何处理;仅上传文件不一定会自动配置自定义 404。
九、日常写作节奏
固定成一条简单流程:写 Markdown → npm run dev 预览 → npm run build 构建 → 用上面任一方式发布。源码用 Git 做版本管理与备份,不要只备份 dist/。
一般来说,只把源码纳入版本管理就够了,dist/ 由构建重新生成;需要离线核对时再单独保存一份即可。
十、常见问题
- 依赖没装上:在项目目录执行
npm install。 - 端口被占用或想换端口:按终端打印的地址访问,也可用
npm run dev -- --port 4322指定端口。 - 图片或样式 404:检查资源是否一同构建和上传;
public/中的文件用根路径引用,样式也可能来自src/并由构建工具处理。 - 本地能看但线上没有:
git push只把代码推到远端,托管平台还需要再构建一次,去平台查看构建状态即可。 - 想加文章列表:之后可以用 Astro 的内容集合读取 Markdown,或在页面里遍历文件;初学时手动链接就够用。
- 构建失败怎么看:终端会指出报错的文件与位置,按提示修正后重新
npm run build。 - 能用现成主题吗:可以,等熟悉了最小结构,再引入布局与样式会更容易排查问题。
- 一定要最新 Node 吗:按 Astro 当前文档要求的版本即可,用偶数 LTS 更稳,遇到语法或构建报错时先核对版本。
十一、写在最后
从零到一个能上线的博客,核心其实只有三步:写页面、写内容、构建发布,剩下的是逐步打磨。
搭建过程中遇到的取舍和解决办法都值得记下来;也欢迎把经验与改进分享出来,让更多人少走一点弯路。