2988 字
15 分钟
全流程超详细教程从 0 搭建 Fuwari 博客

这篇文章是一份从零开始、不省略任何关键步骤的搭建记录,目标是:

在 Windows 上用 Fuwari 主题 创建一个博客项目,
Git 管理代码 + GitHub 远程仓库
再通过 GitHub Actions + SSH + rsync 自动部署到自己的 VPS + Nginx 上。

中间我也会穿插一些自己真实踩过的坑(npm 和 pnpm 混用、package.json 语法、没有 cd 到项目目录……)


0. 最终效果预览#

搭完之后,你会得到这样一个效果:

  • 本地写文章 / 改样式:
    • pnpm dev 本地预览
    • git add . && git commit -m "xxx" && git push
  • 远端:
    • GitHub Actions 自动:
      • 安装依赖(pnpm)
      • 构建 dist/
      • rsync 到 VPS /var/www/astro-blog-demo/dist/
  • 浏览器访问:
    • 打开博客地址就是最新版本的博客

1. 环境准备(Windows 本地)#

这里以 Windows 11 + PowerShell 为例。

1.1 安装 Git#

  1. 打开浏览器访问
    https://git-scm.com/downloads
  2. 下载 Windows 版本的安装包(一般会自动识别)。
  3. 双击安装,一路「Next」即可,遇到选项保持默认:
    • 编辑器选项可以保留默认的 Vim,后面我们自己用 VS Code。
    • PATH 配置选择默认那一项(推荐)。
  4. 安装完成后,按下 Win + S 搜索「PowerShell」,打开一个终端,输入:
Terminal window
git --version

看到类似 git version 2.x.x 就说明安装成功。

终端里 git --version 的输出。


1.2 安装 Node.js#

  1. 打开 https://nodejs.org/
  2. 下载推荐的 LTS 版本(绿色「LTS」按钮)。
  3. 安装过程:
    • 双击安装包,勾选「I accept the terms of the License Agreement」
    • 其它选项保持默认,直到完成。
  4. 安装完同样在 PowerShell 里检查:
node -v
npm -v

如果能同时看到 vXX.X.XX.X.X 两行,即 Node 和 npm 都 OK。

node -v、npm -v` 的输出。


1.3 安装 pnpm(全局)#

Fuwari 官方推荐用 pnpm 管理依赖,我们整套方案都用 pnpm。

管理员权限的 PowerShell 中执行:

npm install -g pnpm

安装完成后,验证:

pnpm -v

能看到一个版本号,比如 9.14.4,就说明 pnpm 安装成功。

pnpm -v

npm 和 pnpm 的关系

  • npm 是 Node 自带的包管理器
  • pnpm 是第三方的高性能包管理器(节省磁盘空间)
  • 我们用 npm 的唯一用途是:npm install -g pnpm,之后项目内部只用 pnpm

2. 新建博客项目(克隆 Fuwari + 安装依赖)#

2.1 选择一个存放项目的目录#

我习惯把所有代码放在用户目录下,比如:C:\Users\TX

打开 PowerShell:

cd C:\Users\TX

当前路径为 PS C:\Users\TX> 的终端


2.2 克隆 Fuwari 主题#

Fuwari 的 GitHub 仓库地址为:https://github.com/saicaca/fuwari

C:\Users\TX 下执行:

git clone https://github.com/saicaca/fuwari.git astro-blog-demo

这里我把目标文件夹命名为 astro-blog-demo,你也可以换成 blog 或任意喜欢的名字。

克隆完成后,终端会多出一段 Cloning into 'astro-blog-demo'... 的输出。

git clone 完成后的终端画面


2.3 进入项目目录#

很多新手(包括我自己第一次)都会在这里踩坑: 没有 cd 进入项目目录就直接运行 npm/pnpm 命令,导致各种「找不到 package.json」。

请一定确认:

cd .\astro-blog-demo

此时终端提示应该变成:

PS C:\Users\TX\astro-blog-demo>

你可以用 dir 看看目录里是否有 package.json

dir

package.json

  • 顶部是 PS C:\Users\TX\astro-blog-demo>
  • 下面 dir 输出中能看到 package.json 的那一行。

npm error enoent 如果你在 C:\Users\TX> 直接执行 npm install, npm 会报: Error: ENOENT: no such file or directory, open 'C:\Users\TX\package.json' 这就是没进到项目目录。


2.4 用 pnpm 安装项目依赖#

现在我们已经在项目根目录(有 package.json 的地方),执行:

pnpm install

这是一个关键步骤,会做这些事:

  • 读取 package.json 中的 dependencies / devDependencies
  • 在本地创建 node_modules,下载所有依赖
  • 生成 pnpm-lock.yaml 锁定版本

注意:Fuwari 的 package.json 里有这一行:

"preinstall": "npx only-allow pnpm"

这表示如果你用 npm installyarn,会直接报错并提示「请使用 pnpm」。 我们现在是 pnpm install,所以是正确的方式。

安装过程中可能会看到很多 WARN(弃用包、兼容性提示),只要最后没有红色的 ERROR,就说明成功。

pnpm install 进行中的终端画面


2.5 启动本地开发服务器#

依赖安装完毕后,运行:

pnpm dev

稍等片刻,终端会提示类似:

astro v5.x.x ...
Local http://localhost:4321
Network http://192.168.xx.xx:4321

打开浏览器,访问:

http://localhost:4321

就能看到 Fuwari 的默认首页。

Fuwari local

Fuwari 的默认首页

  1. 终端中 pnpm dev 输出 Local http://localhost:4321 的画面;
  2. 浏览器里显示 Fuwari 首页的截图(地址栏是 http://localhost:4321)。

要停止开发服务器,在终端里按下 Ctrl + C


3. 用 Git 管理自己的博客项目#

3.1 删除原仓库的 .git 目录#

确保当前路径还是项目根目录:

PS C:\Users\TX\astro-blog-demo>

执行:

Remove-Item -Recurse -Force .git

或简写:

rm -r -Force .git

删完可以用 dir -Force 看一下 .git 是否已经不在了。


3.2 初始化新的 Git 仓库#

git init
git add .
git commit -m "初始化 Astro + Fuwari 博客(使用 pnpm)"

git init + git commit 成功后的终端输出


4. 推送到 GitHub:创建远程仓库并绑定#

4.1 在 GitHub 上新建仓库#

  1. 登录 GitHub,点击右上角 +New repository
  2. Repository name 填写:astro-blog-demo(推荐与本地目录同名)
  3. 其它选项保持默认,点击 Create repository

成功后会看到一个页面,上面有类似:

…or push an existing repository from the command line
git remote add origin https://github.com/你的用户名/astro-blog-demo.git
git branch -M main
git push -u origin main

新建仓库成功后的 GitHub 页面


4.2 本地绑定远程并推送代码#

回到 PowerShell(项目目录):

cd C:\Users\TX\astro-blog-demo
git remote add origin https://github.com/你的用户名/astro-blog-demo.git
git branch -M main
git push -u origin main

⚠️ 一定要把 你的用户名 换成你真实的 GitHub 用户名

如果一切正常,终端会显示上传进度,最后类似:

To https://github.com/你的用户名/astro-blog-demo.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

git push 成功的终端输出

然后回到 GitHub 刷新仓库页面,就能看到所有项目文件。

GitHub 仓库的 Code 页面(文件列表)

远程地址写错 如果远程仓库没创建好,或者 URL 里还残留示例中的 你的用户名git push 会报:remote: Repository not found. 可以用 git remote -v 检查当前绑定的 URL 是否正确。


5. 配置 VPS:Nginx + 站点目录 + 域名#

这一节在你的 VPS 上执行,我的例子环境是 Debian / Ubuntu 系服务器

5.1 SSH 登录 VPS#

在本地终端执行:

ssh root@152.53.XXX.XX

(把 IP 换成你的)

成功后提示符会变成类似 root@your-server:~#

连接到 VPS 后的终端界面


5.2 安装 Nginx + rsync#

apt update
apt install -y nginx rsync

5.3 创建博客文件目录#

最终静态文件放在:

/var/www/astro-blog-demo/dist

执行:

mkdir -p /var/www/astro-blog-demo/dist
chown -R www-data:www-data /var/www/astro-blog-demo

5.4 配置 Nginx 虚拟主机#

新建 Nginx 配置:

nano /etc/nginx/sites-available/astro-blog-demo.conf

写入如下内容(根据自己的域名修改 server_name):

server {
listen 80;
server_name demo.example.com; # 换成你的域名
root /var/www/astro-blog-demo/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}

保存退出(nano:Ctrl + O → 回车 → Ctrl + X)。

启用站点并检查配置:

ln -s /etc/nginx/sites-available/astro-blog-demo.conf /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

nginx -t 如果输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

就说明没问题。

nginx -t 成功的画面


5.5 配置域名 DNS(Cloudflare 示例)#

在 Cloudflare 控制台中:

  1. 选择你的域名(如 xxx.top
  2. 打开「DNS → 记录」
  3. 新建一条 A 记录:
    • 类型:A
    • 名称:blog
    • IPv4:152.53.XXX.XX
    • 代理状态:建议先用「仅 DNS」(灰云)

保存后等待几分钟,在本地测试:

ping blog.xxx.xx

能解析到服务器 IP 就表示 DNS 生效了。

Cloudflare DNS 配置页


6. 为 GitHub Actions 准备 SSH 密钥#

我的部署方案是: GitHub Actions 通过 SSH 登录 VPS,用 rsync 把 dist/ 同步过去。

6.1 在 VPS 上生成密钥对#

在 VPS 终端执行:

ssh-keygen -t ed25519 -C "github-actions"

一路按回车即可(路径默认 ~/.ssh/id_ed25519,密码留空)。

6.2 允许这把密钥登录#

cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

6.3 获取私钥内容(复制到剪贴板)#

cat ~/.ssh/id_ed25519

完整复制 输出内容(从 -----BEGIN OPENSSH PRIVATE KEY----------END ...-----)。 千万不要泄露给别人,这就是 Actions 登录 VPS 的凭证。

ssh-keygen 生成密钥的过程


7. 在 GitHub 仓库配置 Secrets(供 Actions 使用)#

打开 GitHub 上的 astro-blog-demo 仓库:

  1. 点击 Settings
  2. 左侧选择 Secrets and variables → Actions
  3. 点击 New repository secret,创建三个:
  • SSH_HOST:你的 VPS IP 或域名(如 152.53.208.79
  • SSH_USER:登录用户名(如 root
  • SSH_KEY:刚才复制的私钥全文

Secrets 列表页面


8. 编写 GitHub Actions 自动部署流程#

8.1 创建 Workflow 文件#

在本地项目目录中:

cd C:\Users\TX\astro-blog-demo
mkdir .github
mkdir .github\workflows

新建文件 .github/workflows/deploy.yml,内容如下:

name: Deploy blog to VPS
on:
push:
branches:
- main # 每次 push 到 main,就触发部署
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install pnpm
run: npm install -g pnpm
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm run build
- name: Deploy via rsync over SSH
env:
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_USER: ${{ secrets.SSH_USER }}
SSH_KEY: ${{ secrets.SSH_KEY }}
run: |
mkdir -p ~/.ssh
echo "$SSH_KEY" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan $SSH_HOST >> ~/.ssh/known_hosts
rsync -avz --delete \
dist/ \
${SSH_USER}@${SSH_HOST}:/var/www/astro-blog-demo/dist/

这里每一步的作用是:

  1. checkout 代码
  2. 安装 Node 22
  3. 全局安装 pnpm
  4. 用 pnpm 安装项目依赖
  5. 用 pnpm 构建静态网站到 dist/
  6. 用 rsync + SSH 把 dist 同步到 VPS

VS Code 中打开 deploy.yml 的画面


8.2 提交并推送 Workflow#

在 PowerShell:

git add .github/workflows/deploy.yml
git commit -m "添加 GitHub Actions 自动部署(pnpm + rsync)"
git push

这一次 push 会自动触发刚才创建的 Deploy blog to VPS 工作流。

打开 GitHub 仓库的 Actions 页面,可以看到一个新的 run 在执行。

Actions 页面

如果工作流失败,可以点击进去看具体是哪个步骤报错。 常见问题:

  • pnpm 没装好(忘记 Install pnpm 步骤)
  • SSH_KEY 配错(复制不完整)
  • Nginx 目录路径不一致(rsync 同步到的路径和 Nginx root 不一致)

9. 写一篇测试文章:验证整条链路#

现在我们做一次完整的「写文章 → push → 自动部署 → 浏览器访问」的闭环测试。

9.1 新建一篇文章#

以 Fuwari 的内容目录结构为准(例如 src/content/posts), 新建一个文件 src/content/posts/hello-fuwari.md

---
title: Hello Fuwari
published: 2025-12-08
description: ''
image: ''
tags: []
category: ''
draft: false
lang: ''
---
这是我用 Fuwari + pnpm 重建博客后的第一篇测试文章。

VS Code 中编辑这篇 hello-fuwari.md 的画面


9.2 本地预览确认文章正常#

在项目目录中运行:

pnpm dev

然后打开 http://localhost:4321,看首页是否已经出现新文章。 确认没问题后,按 Ctrl + C 停掉 dev。


9.3 提交并推送#

git add src/content/posts/hello-fuwari.md
git commit -m "发布第一篇文章:Hello Fuwari"
git push

GitHub Actions 会自动运行一次 Deploy blog to VPS 工作流。

等待所有步骤变成绿色对勾。

Actions 的详细页面


9.4 访问正式域名#

浏览器访问:

http://blog.XXX.XXX

或(配置好 HTTPS 之后):

https://blog.XXX.XXX

能看到首页已经更新,并且可以点击进入《Hello Fuwari》这篇文章,就说明博客已顺利部署完成 ✅。

网页


10. 命令速查表#

最后附上一份整个过程用到的命令速查,方便以后回顾:

# 本地准备
node -v
npm -v
npm install -g pnpm
pnpm -v
# 克隆主题 + 安装依赖 + 本地预览
cd C:\Users\你的用户名
git clone https://github.com/saicaca/fuwari.git astro-blog-demo
cd .\astro-blog-demo
pnpm install
pnpm dev
# 清理原仓库,初始化自己的 Git
rm -r -Force .git
git init
git add .
git commit -m "初始化 Astro + Fuwari 博客(使用 pnpm)"
# 绑定 GitHub 仓库
git remote add origin https://github.com/你的用户名/astro-blog-demo.git
git branch -M main
git push -u origin main
# VPS 端
ssh root@你的IP
apt update
apt install -y nginx rsync
mkdir -p /var/www/astro-blog-demo/dist
chown -R www-data:www-data /var/www/astro-blog-demo
# 编辑 /etc/nginx/sites-available/astro-blog-demo.conf
ln -s /etc/nginx/sites-available/astro-blog-demo.conf /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
# 生成部署用 SSH 密钥
ssh-keygen -t ed25519 -C "github-actions"
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/id_ed25519 # 复制到 GitHub Secret
# GitHub Actions 编写 workflow:.github/workflows/deploy.yml
# ...(见上文)
# 写文章
pnpm dev
# 编辑 src/content/posts/*.md
git add .
git commit -m "更新文章"
git push
# 等 Actions 自动部署

到这里,一个基于 Astro 的 Fuwari 主题 的博客就完整搭建好了。

这篇文章既是我的个人搭建笔记,也希望能成为你在搭建Fuwari博客时的一份参考。

全流程超详细教程从 0 搭建 Fuwari 博客
https://blog.azucat.eu/posts/fuwari/
作者
江鸟博客
发布于
2025-12-08
许可协议
CC BY-NC-SA 4.0