Skip to content

如何免费部署一个 AI 个人博客

近期我使用新的技术栈重写了个人博客,并且**「不花一分钱」**完成了部署,还加上了 AI 功能。

现在,跟着我一步一步做,你也可以一分钱不花就搭建起自己的 AI 个人博客。

准备工作

正式开始前,先做好以下准备:

  1. 访问 Google Cloud、Cloudflare 等平台的网络条件;
  2. 一张 Visa 或 Master 之类的外币信用卡(在注册 Google Cloud 账号时可能需要绑定)。

正式开始

Fork 模板仓库

首先,打开代码仓库,将代码 Fork 一份到自己名下。

image-20260719202027443

准备大模型

选择一家同时提供 LLM 与向量(Embedding)模型、且兼容 OpenAI API 的供应商。

我选择的是阿里云百炼平台,因为现在有新用户送额度的活动,送的额度足够个人博客使用。

按照以下步骤完成大模型的准备:

  1. 注册账号;
  2. API-Key 管理页面,创建并复制 API Key; image-20260719211123688

以下是默认的大模型相关环境变量:

变量含义默认示例
OPENAI_API_KEYAPI Key(必填)(空,需自行填写)
OPENAI_API_BASEOpenAI 兼容 Base URLhttps://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 量。

足够覆盖个人博客的使用。

按照以下步骤完成数据库的准备:

  1. Neon 注册并创建项目(需支持 pgvector)。

  2. 在控制台执行以下命令,启动向量数据库功能:

    sql
    CREATE EXTENSION IF NOT EXISTS vector;

    image-20260719202916234

  3. 复制连接串(形如 postgresql://user:pass@host/db?sslmode=require),去除前缀 postgresql://,作为后续 Google Cloud Run 中使用的环境变量 DB_DSN。例如 Neon 给出:

    text
    postgresql://user:pass@ep-xxx.aws.neon.tech/neondb?sslmode=require

    则最终写入的 DB_DSN 环境变量值为:

    bash
    user:pass@ep-xxx.aws.neon.tech/neondb?sslmode=require

    image-20260719202300709

部署 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 准备

  1. 打开 Google Cloud,完成账号注册;

  2. 新增一个项目,后续在该项目下新增服务。 image-20260719213434983

    image-20260719213422466

新增 Google Cloud Run 服务

  1. 打开 Google Cloud Run 控制台,选择「部署 Web 服务」中的「连接代码库」;
  2. 在「设置 Developer Connect」中选择之前 fork 的仓库(可能需要 GitHub 授权),「构建类型」的「Dockerfile」填写 /apps/ai-agent/Dockerfileimage-20260720201151281
  3. 填写「服务名称」;
  4. 「地区」选择「asia-east1 (台湾)」(该地区价格相对较低);
  5. 「身份验证」选择「需要进行身份验证」,并勾选「Identity and Access Management (IAM)」; image-20260720201239426
  6. 在「容器、网络、安全性」→「容器」→「变量和密钥」中添加以下环境变量(推荐先在 Secret Manager 页面添加密钥,然后以密钥的形式添加):
    1. DB_DSN:上文从 Neon 连接串提取出的值(不含 postgresql:// 前缀);
    2. OPENAI_API_KEY:配置的大模型 API Key。
    3. (可选)OPENAI_API_BASE:OpenAI 兼容 Base URL,默认百炼平台的 https://dashscope.aliyuncs.com/compatible-mode/v1
    4. (可选)LLM_MODEL:对话模型,默认 qwen3.7-max
    5. (可选)EMBEDDING_MODEL:向量模型,默认 qwen3.7-text-embedding
    6. (可选)EMBEDDING_DIMENSION:向量维度(须与模型一致),默认 768image-20260720201830554
  7. 确认并创建服务。

修改触发器

等待服务启动完成后,还需修改触发器配置。因为 AI Agent 位于仓库子目录,若不限制路径,修改其他文件也会触发重新部署。

  1. 在刚部署好的服务详情页面,点击「修改仓库设置」进入触发器修改页面; image-20260720202107267
  2. 在「来源」→「与分支 main 匹配」→「包含的文件过滤条件 (glob)」中填入 apps/ai-agent/**image-20260720202144534

本地测试(可选)

部署完成后,因服务启用了身份验证,可在本机安装 Google Cloud CLI,登录同一 Google 账号,将线上服务代理到本地做冒烟测试(把服务名与区域换成你的值):

bash
gcloud run services proxy <service> --region=<region>
# 例如:gcloud run services proxy personal-website-ai-agent --region=asia-east1

然后访问 http://localhost:8080/docs,或:

bash
curl http://localhost:8080/health
curl -sI http://localhost:8080/openapi.json

修改 Artifact Registry 配置

Cloud Run 构建的镜像会保存在 Artifact Registry。按 官方定价,存储 Always Free 额度为每个结算账号每月 0.5 GiB(该账号下所有项目合计);超出后按量计费。因此建议预先配置清理政策,避免旧镜像堆满免费额度。

  1. 打开 Artifact Registry,勾选对应仓库,点击「修改代码库」; image-20260720225748571

  2. 在「清理政策」中选择「删除多个软件制品」;

  3. 点击「添加清理政策」,添加以下两条:

    1. 名称:delete-old;政策类型:「按条件删除」 image-20260720233842838
    2. 名称:keep-recent-5;政策类型:「保留最新版本」,保留数量:5image-20260720233920099
  4. 点击底部「更新」,保存修改。

生成身份验证 JSON 文件

上一步创建 Agent 服务时选择了「需要进行身份验证」,因此外部调用时必须完成身份验证。

  1. 打开 Google Cloud IAM 服务账号管理页面
  2. 选择部署了服务的项目;
  3. 创建或选择一个服务账号,点击其电子邮件,进入账号详情页; image-20260720203034784
  4. 为该服务账号授予目标 Cloud Run 服务的 Cloud Run Invokerroles/run.invoker)权限; image-20260720202853858
  5. 在「密钥」→「添加键」中选择「创建新密钥」(JSON),下载密钥文件,供下一步写入 Cloudflare 环境变量 NUXT_GOOGLE_SERVICE_ACCOUNT_JSONimage-20260720203213242

部署网页应用(以 Cloudflare Workers 为例)

Cloudflare Workers 也可部署 Nuxt.js 应用,免费计划额度足够个人博客使用:

  • 每天 100,000 次请求;
  • 每月 3,000 分钟构建时间;

按照以下步骤完成部署:

  1. Cloudflare 创建 Workers 应用,选择「Continue with GitHub」,选择 fork 的仓库; image-20260720211356018image-20260720211425772
  2. 在「Create and deploy」阶段,展开「Advanced settings」,将「Path」填写为 /apps/webimage-20260720211507698
  3. 添加以下环境变量:
    • NUXT_AI_AGENT_API_BASE_URL:Cloud Run 上的 Agent 根地址
    • NUXT_GOOGLE_SERVICE_ACCOUNT_JSON:将前文下载的服务账号 JSON 压成单行后写入(可用 jq -c . key.jsonimage-20260720211608737
  4. 最后点击「Deploy」进行部署,部署完成后,打开 Domains 标签页,打开生产用的 URL 开关,即可通过该地址访问。 image-20260720211854913

后续开发和维护

本地开发可参考仓库 README 及相关文档(启动方式、架构说明等)。

仓库里也配好了 Cursor 可用的 Plugin、MCP 与各类 skill,便于 AI 协同开发。

而关于该项目的架构设计、项目思考与协同开发实践,后续还会有更多文章分享,欢迎关注。