如何免费部署一个 AI 个人博客
近期我使用新的技术栈重写了个人博客,并且**「不花一分钱」**完成了部署,还加上了 AI 功能。
现在,跟着我一步一步做,你也可以一分钱不花就搭建起自己的 AI 个人博客。
准备工作
正式开始前,先做好以下准备:
- 访问 Google Cloud、Cloudflare 等平台的网络条件;
- 一张 Visa 或 Master 之类的外币信用卡(在注册 Google Cloud 账号时可能需要绑定)。
正式开始
Fork 模板仓库
首先,打开代码仓库,将代码 Fork 一份到自己名下。

准备大模型
选择一家同时提供 LLM 与向量(Embedding)模型、且兼容 OpenAI API 的供应商。
我选择的是阿里云百炼平台,因为现在有新用户送额度的活动,送的额度足够个人博客使用。
按照以下步骤完成大模型的准备:
- 注册账号;
- 在 API-Key 管理页面,创建并复制 API Key;

以下是默认的大模型相关环境变量:
| 变量 | 含义 | 默认示例 |
|---|---|---|
OPENAI_API_KEY | API Key(必填) | (空,需自行填写) |
OPENAI_API_BASE | OpenAI 兼容 Base URL | https://dashscope.aliyuncs.com/compatible-mode/v1 |
LLM_MODEL | 对话模型 | qwen3.7-max |
EMBEDDING_MODEL | 向量模型 | qwen3.7-text-embedding |
EMBEDDING_DIMENSION | 向量维度(须与模型一致) | 768 |
之后可按所选供应商与账号剩余的免费额度,在部署环节再调整。
准备数据库
因为本项目的 AI 功能支持连续对话和文章内容向量索引,所以需要准备一个 PostgreSQL 数据库。
我的选择是 Neon,因为其免费账号提供了:
- 每个项目 0.5 GB 存储空间;
- 每月 5 GB 的网络传输量;
- 每月每项目的 100 CU-hours 量。
足够覆盖个人博客的使用。
按照以下步骤完成数据库的准备:
在控制台执行以下命令,启动向量数据库功能:
sqlCREATE EXTENSION IF NOT EXISTS vector;
复制连接串(形如
postgresql://user:pass@host/db?sslmode=require),去除前缀postgresql://,作为后续 Google Cloud Run 中使用的环境变量DB_DSN。例如 Neon 给出:textpostgresql://user:pass@ep-xxx.aws.neon.tech/neondb?sslmode=require则最终写入的
DB_DSN环境变量值为:bashuser:pass@ep-xxx.aws.neon.tech/neondb?sslmode=require
部署 Agent 服务(Google Cloud Run)
本项目的 Agent 服务需要一个支持 Python 的部署平台。同样,Google Cloud(按请求计费时)的免费额度也足够覆盖个人博客使用:
- 每月 200 万次请求;
- 每月 180,000 vCPU-seconds;
- 每月 360,000 GiB-seconds;
- 每月 2,500 build-minutes 构建时间;
- 每月 0.5 GB 的镜像存储额度(通过设置镜像存储上限来避免这部分费用)。
Google Cloud 准备
打开 Google Cloud,完成账号注册;
新增一个项目,后续在该项目下新增服务。


新增 Google Cloud Run 服务
- 打开 Google Cloud Run 控制台,选择「部署 Web 服务」中的「连接代码库」;
- 在「设置 Developer Connect」中选择之前 fork 的仓库(可能需要 GitHub 授权),「构建类型」的「Dockerfile」填写
/apps/ai-agent/Dockerfile;
- 填写「服务名称」;
- 「地区」选择「asia-east1 (台湾)」(该地区价格相对较低);
- 「身份验证」选择「需要进行身份验证」,并勾选「Identity and Access Management (IAM)」;

- 在「容器、网络、安全性」→「容器」→「变量和密钥」中添加以下环境变量(推荐先在 Secret Manager 页面添加密钥,然后以密钥的形式添加):
DB_DSN:上文从 Neon 连接串提取出的值(不含postgresql://前缀);OPENAI_API_KEY:配置的大模型 API Key。- (可选)
OPENAI_API_BASE:OpenAI 兼容 Base URL,默认百炼平台的https://dashscope.aliyuncs.com/compatible-mode/v1; - (可选)
LLM_MODEL:对话模型,默认qwen3.7-max; - (可选)
EMBEDDING_MODEL:向量模型,默认qwen3.7-text-embedding; - (可选)
EMBEDDING_DIMENSION:向量维度(须与模型一致),默认768。
- 确认并创建服务。
修改触发器
等待服务启动完成后,还需修改触发器配置。因为 AI Agent 位于仓库子目录,若不限制路径,修改其他文件也会触发重新部署。
- 在刚部署好的服务详情页面,点击「修改仓库设置」进入触发器修改页面;

- 在「来源」→「与分支
main匹配」→「包含的文件过滤条件 (glob)」中填入apps/ai-agent/**。
本地测试(可选)
部署完成后,因服务启用了身份验证,可在本机安装 Google Cloud CLI,登录同一 Google 账号,将线上服务代理到本地做冒烟测试(把服务名与区域换成你的值):
gcloud run services proxy <service> --region=<region>
# 例如:gcloud run services proxy personal-website-ai-agent --region=asia-east1然后访问 http://localhost:8080/docs,或:
curl http://localhost:8080/health
curl -sI http://localhost:8080/openapi.json修改 Artifact Registry 配置
Cloud Run 构建的镜像会保存在 Artifact Registry。按 官方定价,存储 Always Free 额度为每个结算账号每月 0.5 GiB(该账号下所有项目合计);超出后按量计费。因此建议预先配置清理政策,避免旧镜像堆满免费额度。
打开 Artifact Registry,勾选对应仓库,点击「修改代码库」;

在「清理政策」中选择「删除多个软件制品」;
点击「添加清理政策」,添加以下两条:
- 名称:
delete-old;政策类型:「按条件删除」
- 名称:
keep-recent-5;政策类型:「保留最新版本」,保留数量:5
- 名称:
点击底部「更新」,保存修改。
生成身份验证 JSON 文件
上一步创建 Agent 服务时选择了「需要进行身份验证」,因此外部调用时必须完成身份验证。
- 打开 Google Cloud IAM 服务账号管理页面;
- 选择部署了服务的项目;
- 创建或选择一个服务账号,点击其电子邮件,进入账号详情页;

- 为该服务账号授予目标 Cloud Run 服务的 Cloud Run Invoker(
roles/run.invoker)权限;
- 在「密钥」→「添加键」中选择「创建新密钥」(JSON),下载密钥文件,供下一步写入 Cloudflare 环境变量
NUXT_GOOGLE_SERVICE_ACCOUNT_JSON。
部署网页应用(以 Cloudflare Workers 为例)
Cloudflare Workers 也可部署 Nuxt.js 应用,免费计划额度足够个人博客使用:
- 每天 100,000 次请求;
- 每月 3,000 分钟构建时间;
按照以下步骤完成部署:
- 在 Cloudflare 创建 Workers 应用,选择「Continue with GitHub」,选择 fork 的仓库;


- 在「Create and deploy」阶段,展开「Advanced settings」,将「Path」填写为
/apps/web;
- 添加以下环境变量:
NUXT_AI_AGENT_API_BASE_URL:Cloud Run 上的 Agent 根地址NUXT_GOOGLE_SERVICE_ACCOUNT_JSON:将前文下载的服务账号 JSON 压成单行后写入(可用jq -c . key.json)
- 最后点击「Deploy」进行部署,部署完成后,打开 Domains 标签页,打开生产用的 URL 开关,即可通过该地址访问。

后续开发和维护
本地开发可参考仓库 README 及相关文档(启动方式、架构说明等)。
仓库里也配好了 Cursor 可用的 Plugin、MCP 与各类 skill,便于 AI 协同开发。
而关于该项目的架构设计、项目思考与协同开发实践,后续还会有更多文章分享,欢迎关注。