Post

CLOUDFLARE000: Cloudflare 网站部署与全栈应用总地图

CLOUDFLARE000: Cloudflare 网站部署与全栈应用总地图

这是一个新的工程学习系列:

1
PENGYI_CLOUDFLARE_MAP

这一篇是:

1
CLOUDFLARE000 -> Cloudflare 网站部署与全栈应用总地图

先统一拼写:

1
Cloudflare

我们以后可以把它作为“面向用户的网站和交互型产品”的默认部署平台候选。

一句话定义

我现在对 Cloudflare 的理解是:

1
Cloudflare = global edge network + frontend hosting + serverless backend + storage/database + domain/security tooling.

中文:

1
2
Cloudflare 不只是 CDN。
它可以承接前端网站、后端 API、边缘函数、数据库、对象存储、域名、缓存、安全和部署流水线。

对我们最关键的是这条建站链路:

1
2
3
4
5
6
GitHub repo
  -> Cloudflare Pages 部署前端
  -> Pages Functions / Workers 提供后端 API
  -> D1 / KV / R2 提供数据和文件存储
  -> custom domain
  -> 面向用户的网站或小产品

这就是我们以后做:

1
2
3
4
5
6
7
个人网站
项目展示页
AI / Quant demo site
互动网站
前后端网站
交互型商用网站
用户服务器网站

时要优先考虑的基础设施。

官方组件地图

先把核心组件压成一张表。

组件作用我们怎么用
Cloudflare Pages部署前端和全栈应用个人主页、项目 landing page、React/Vite/Next/Astro 网站
Pages Functions给 Pages 项目加服务端代码表单、登录回调、轻量 API、交互逻辑
Cloudflare Workers独立 serverless 后端平台API 服务、webhook、AI/Quant demo backend、任务接口
D1Cloudflare serverless SQL database用户、项目记录、实验 metadata、轻量业务数据
Workers KVglobal key-value storage配置、偏好、缓存、feature flags
R2object storage图片、PDF、报告、数据文件、模型/实验 artifacts
Custom Domains / DNS域名接入把项目接到自己的域名
Observability / Logs监控和调试看部署、请求、错误、性能

核心判断:

1
2
3
4
Pages 负责网站入口。
Functions / Workers 负责后端逻辑。
D1 / KV / R2 负责不同类型的数据。
DNS / domain / security 负责生产化。

为什么不是只用 GitHub Pages

GitHub Pages 很适合:

1
2
3
4
5
静态博客
学习日志
个人展示页
Jekyll / Markdown 输出
不需要后端 API 的 public site

我们现在的 pengpengyi92.github.io 用 GitHub Pages 是合理的。

但一旦进入:

1
2
3
4
5
6
7
8
9
用户登录
表单提交
数据库
文件上传
后台管理
实时交互
AI API 调用
付费/商用产品
自定义 API

GitHub Pages 就不够了。

这时要用:

1
Cloudflare Pages + Workers / Pages Functions + D1 / KV / R2

这就是从“个人静态展示”走向“用户型网站 / 产品型网站”的分界线。

Cloudflare Pages

Cloudflare Pages 是前端和全栈应用部署入口。

官方定位是:

1
Create full-stack applications that are instantly deployed to the Cloudflare global network.

它支持几种部署方式:

1
2
3
connect Git provider
direct upload
C3 command line

对我们最自然的是:

1
GitHub repo -> Cloudflare Pages

每次 push 后自动 build/deploy。

适合:

1
2
3
4
5
6
7
8
9
personal academic homepage
portfolio
project landing page
docs site
React / Vite app
Astro site
Next.js static site
AI demo frontend
Quant dashboard frontend

Pages Functions

Pages Functions 是 Pages 项目里的服务端代码。

官方文档说,它可以在 Cloudflare network 上执行代码,并让 Pages 应用获得动态能力,不需要运行 dedicated server。

适合:

1
2
3
4
5
6
7
form submission
API route
auth callback
middleware
A/B testing
contact form
simple backend logic

典型结构:

1
2
3
4
5
6
7
my-site/
  src/
  public/
  functions/
    api/
      hello.ts
      contact.ts

直觉:

1
2
前端页面由 Pages 托管。
后端 endpoint 由 functions/ 目录下的代码处理。

这很适合我们做交互型网站的第一步。

Workers

Cloudflare Workers 是更独立、更通用的 serverless backend。

官方定位是:

1
A serverless platform for building, deploying, and scaling apps across Cloudflare's global network.

它适合:

1
2
3
4
5
6
7
8
standalone API
backend service
webhook receiver
auth gateway
AI inference proxy
scheduled jobs
data processing endpoint
serverless product backend

Pages Functions 更像:

1
跟 Pages 项目绑定的轻量后端。

Workers 更像:

1
独立后端服务。

我们的默认判断:

1
2
3
一个网站内部的简单 API -> Pages Functions
多个项目复用的后端能力 -> Workers
复杂 API / webhook / scheduled job -> Workers

D1

D1 是 Cloudflare 的 serverless SQL database。

官方文档说明它是 managed, serverless database,使用 SQLite 的 SQL 语义,可以从 Workers 和 Pages 项目查询。

适合:

1
2
3
4
5
6
7
8
users
projects
posts metadata
submissions
feedback
orders lite
experiment records
dashboard tables

我们可以把 D1 理解成:

1
Cloudflare 里的轻量 SQL 数据库。

适合小产品、个人网站、AI demo、Quant demo 的结构化数据。

不适合一开始就承担非常复杂的企业级数据库需求。 但对我们的起步阶段非常实用。

Workers KV

Workers KV 是 global, low-latency key-value storage。

官方文档给出的例子包括:

1
2
3
caching API responses
storing user configurations / preferences
storing user authentication details

适合:

1
2
3
4
5
6
7
feature flags
site config
cache
user preference
temporary lookup
public metadata
rate-limit counters, with caution

KV 的直觉:

1
key -> value

例如:

1
2
3
theme:user_123 -> dark
latest_report -> cloudflare000
project_config:quant_demo -> {...}

如果你需要关系查询、join、事务,更应该考虑 D1。 如果你只是要快速读写简单 key-value,KV 更自然。

R2

R2 是 Cloudflare 的 object storage。

官方文档说它用于存储大量 unstructured data,并且适合 web content、data lakes、large batch outputs、ML model artifacts or datasets 等场景。

适合:

1
2
3
4
5
6
7
8
9
images
PDF reports
CV files
research notes exports
CSV / parquet / json artifacts
AI generated assets
Quant backtest reports
demo screenshots
model outputs

R2 的直觉:

1
bucket + object key -> file

它不是数据库。 它是文件和对象存储。

我们以后做 AI / Quant 项目展示时,R2 很适合放:

1
2
3
4
5
report PDFs
experiment artifacts
dataset samples
screenshots
demo assets

三种数据层怎么选

1
2
3
4
5
6
7
8
9
10
11
12
13
D1
  结构化数据
  SQL 查询
  users / projects / submissions / experiments

KV
  key-value
  配置 / 偏好 / 缓存 / flags
  高频读取

R2
  文件 / 图片 / PDF / 大对象
  artifacts / datasets / reports

一句话:

1
2
3
表格数据用 D1。
配置缓存用 KV。
文件对象用 R2。

不要混用。 一开始就把数据类型分清楚,后面系统会稳很多。

我们未来网站的几种形态

1. 个人网站

目标:

1
展示身份、研究方向、项目、文章、CV、联系方式。

架构:

1
2
3
Cloudflare Pages
  + static site generator
  + custom domain

是否需要后端:

1
通常不需要。

除非要加:

1
2
3
4
contact form
newsletter
private dashboard
analytics API

这时再加 Pages Functions。

2. 项目展示页

目标:

1
给某个 AI / Quant / Harness 项目一个 polished landing page。

架构:

1
2
3
4
5
6
Cloudflare Pages
  + project demo
  + docs
  + screenshots
  + GitHub links
  + optional API routes

适合:

1
2
3
4
Pengyi Quant Research OS
DeepSeek Coding Agent Harness proposal
X2Strategy / QuantMind study integration
AI Scientist demo

3. 交互型网站

目标:

1
用户可以点击、提交、查询、生成、保存。

架构:

1
2
3
4
5
6
7
8
9
10
Frontend:
  Cloudflare Pages

Backend:
  Pages Functions or Workers

Data:
  D1 for structured records
  KV for config/cache
  R2 for uploaded/generated files

例子:

1
用户提交因子想法 -> API 保存到 D1 -> 后台生成 report -> report 文件放到 R2 -> 页面展示结果

4. 商用小产品

目标:

1
真实用户、真实交互、稳定域名、可监控、可迭代。

架构:

1
2
3
4
5
6
7
8
Cloudflare Pages
  + Workers APIs
  + D1
  + R2
  + KV
  + custom domain
  + observability
  + auth / access layer

需要额外注意:

1
2
3
4
5
6
7
8
9
auth
permission
data backup
rate limiting
error logging
privacy
billing
terms
monitoring

Cloudflare 能承担很多基础设施,但产品纪律仍然要自己建立。

前端后端怎么分工

一个最小 full-stack Cloudflare 项目可以这样拆:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Frontend
  React / Vite / Astro / Next / plain HTML
  页面、按钮、表单、交互、展示

Backend
  Pages Functions / Workers
  API route、业务逻辑、鉴权、读写数据库

Database
  D1
  用户、提交记录、项目 metadata

KV
  配置、缓存、开关

R2
  文件、图片、报告、导出结果

前端不要直接操作数据库。 标准链路应该是:

1
2
3
4
5
6
browser
  -> fetch('/api/...')
  -> Pages Function / Worker
  -> D1 / KV / R2
  -> response
  -> UI update

这就是正常的前后端分层。

最小项目结构

可以先记这个结构:

1
2
3
4
5
6
7
8
9
10
11
my-cloudflare-app/
  src/
    App.tsx
    main.tsx
  public/
  functions/
    api/
      hello.ts
      submit.ts
  package.json
  wrangler.toml

前端:

1
src/

静态资源:

1
public/

后端 API:

1
functions/api/

配置:

1
wrangler.toml

真实项目里结构会根据框架变化,但心智模型不变。

一个最小 API 例子

Pages Functions 的 API 可以这样想:

1
2
3
4
5
6
export async function onRequestGet() {
  return Response.json({
    ok: true,
    message: "hello from Cloudflare Pages Functions",
  });
}

如果文件是:

1
functions/api/hello.ts

那么访问路径就是:

1
/api/hello

这就是最小后端。

一个交互流程例子

假设我们做一个:

1
AI Quant Idea Collector

用户提交一个策略想法。

前端:

1
2
3
textarea
submit button
result card

API:

1
POST /api/ideas

后端逻辑:

1
2
3
4
1. 校验输入长度
2. 写入 D1
3. 返回 idea_id
4. 可选:触发分析任务

数据:

1
2
3
4
5
6
D1 table: ideas
  id
  user_id
  content
  created_at
  status

文件:

1
R2: generated_reports/idea_id.pdf

缓存:

1
KV: feature flag / prompt version / public config

这就是一个完整 full-stack 小产品。

部署流程

标准流程:

1
2
3
4
5
6
7
8
9
10
1. GitHub 建 repo
2. 本地开发前端
3. 加 functions/api
4. 加 wrangler.toml
5. Cloudflare Pages 连接 GitHub repo
6. 配 build command 和 output directory
7. 设置 environment variables / bindings
8. push 到 main
9. Cloudflare 自动 build/deploy
10. 绑定 custom domain

本地开发可以用:

1
Wrangler

Wrangler 是 Cloudflare 的 CLI。 它负责:

1
2
3
4
5
create
dev
deploy
manage bindings
manage D1 / KV / R2 resources

环境变量和 secrets

真实项目一定会有 secrets:

1
2
3
4
API keys
database bindings
auth secret
third-party service token

原则:

1
2
3
不要把 secret 写进 GitHub repo。
不要写进前端代码。
通过 Cloudflare dashboard / wrangler secrets 管理。

前端可以拿到的是 public config。 后端才能拿 secret。

典型:

1
2
3
4
5
PUBLIC_SITE_NAME
  前端可见

OPENAI_API_KEY
  只能后端 Worker / Function 使用

域名和生产化

Cloudflare 的强项之一是域名和网络层。

我们以后要做项目站时,应该考虑:

1
2
3
4
5
6
7
8
9
custom domain
HTTPS
redirect www / apex
preview deployment
rollback
analytics
logs
security headers
rate limiting

个人学习站可以简单。 用户型网站不能太随意。

什么时候用 Cloudflare Pages

用 Pages:

1
2
3
4
5
6
静态站
个人主页
项目展示页
前端 SPA
文档站
轻量全栈站

原因:

1
2
3
4
5
GitHub 集成简单
部署快
适合前端
支持 Functions
支持 preview deployments / rollback

什么时候用 Workers

用 Workers:

1
2
3
4
5
6
7
独立 API
多个前端共用的 backend
webhook
scheduled job
AI inference proxy
边缘服务
需要更强后端控制的项目

原因:

1
它是更通用的 serverless application platform。

什么时候不用 Cloudflare

Cloudflare 很强,但不是所有东西都要上它。

如果项目需要:

1
2
3
4
5
6
7
复杂长连接状态
传统后端框架强依赖
大型关系数据库
复杂事务
GPU training
heavy backend compute
特殊企业内网部署

那就要评估:

1
2
3
4
5
VPS
traditional cloud
container platform
managed database
specialized AI infrastructure

我们的原则不是迷信平台。 原则是:

1
选择最小可行、可部署、可维护、可增长的架构。

我们自己的默认规则

以后按这个判断:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
简单 public learning log
  -> GitHub Pages

polished personal / academic homepage
  -> Cloudflare Pages

项目 landing page
  -> Cloudflare Pages

交互型前端网站
  -> Cloudflare Pages + Pages Functions

用户型 full-stack 小产品
  -> Cloudflare Pages + Workers + D1 / KV / R2

AI / Quant demo site
  -> Pages frontend + Workers API + D1 metadata + R2 artifacts

复杂商业系统
  -> 先评估 Cloudflare-first,再决定是否需要传统云架构

一句话:

1
从现在开始,用户型网站默认 Cloudflare-first。

对 Pengyi Credit OS 的意义

Cloudflare 对我们不是单纯部署工具。 它会进入我们的 credit system。

因为它让我们能把:

1
2
3
4
5
6
repo
demo
technical report
project landing page
interactive product
custom domain

连成一套可验证输出。

比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GitHub repo:
  source code

Cloudflare site:
  live demo

Website article:
  technical explanation

Private OS:
  roadmap and strategy

Public README:
  setup and architecture

这就是从“我做过”变成:

1
别人可以打开、理解、试用、验证。

对 AI / Quant 项目的意义

以后我们可以做这些站:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Pengyi Quant Research OS Demo
  idea -> factor -> backtest report -> diagnosis

AI Harness Demo
  task -> agent run -> logs -> score

Research OS Demo
  paper -> hypothesis -> experiment plan -> report

NeetCode Agent Benchmark Demo
  problem -> agent solution -> tests -> analysis

Credit OS Public Showcase
  projects -> reports -> GitHub links -> timeline

这些都不是纯静态展示。 它们需要交互。

所以 Cloudflare-first 很合理。

学习路线

后续可以这样拆:

1
2
3
4
5
6
7
8
CLOUDFLARE000: 总地图
CLOUDFLARE001: Cloudflare Pages 部署个人网站
CLOUDFLARE002: Pages Functions 做 API routes
CLOUDFLARE003: Workers 独立后端服务
CLOUDFLARE004: D1 / KV / R2 数据层
CLOUDFLARE005: Custom Domain / DNS / HTTPS / Redirects
CLOUDFLARE006: AI / Quant Demo Site 实战
CLOUDFLARE007: 商用小产品部署 checklist

000 的任务是先建立地图。 后面每篇都可以配一个真正 demo。

最小实战计划

第一期实战不要贪大。 做一个:

1
Cloudflare Hello Full-stack Site

功能:

1
2
3
4
5
6
7
1. 一个首页
2. 一个 /api/hello
3. 一个表单
4. 表单提交到 /api/submit
5. 数据写入 D1
6. 生成一个结果页面
7. 部署到 Cloudflare Pages

这个 demo 打通后,我们就有了:

1
2
3
4
5
6
frontend
backend
database
deployment
domain
logs

这比空学文档有用。

当前结论

CLOUDFLARE000 的核心结论:

1
Cloudflare = 我们未来用户型网站和交互型产品的默认部署平台候选。

具体拆法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Cloudflare Pages
  -> frontend / site deploy

Pages Functions
  -> Pages 内部轻量 API

Workers
  -> 独立 serverless backend

D1
  -> structured SQL data

KV
  -> key-value config / cache

R2
  -> files / reports / artifacts

我们现在的规则:

1
2
静态学习日志继续 GitHub Pages。
以后有前端后端、用户交互、商用可能、AI/Quant demo 的网站,默认 Cloudflare-first。

Sources

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Cloudflare Pages:
https://developers.cloudflare.com/pages/

Cloudflare Pages Functions:
https://developers.cloudflare.com/pages/functions/

Cloudflare Workers:
https://developers.cloudflare.com/workers/

Cloudflare D1:
https://developers.cloudflare.com/d1/

Cloudflare Workers KV:
https://developers.cloudflare.com/kv/

Cloudflare R2:
https://developers.cloudflare.com/r2/
This post is licensed under CC BY 4.0 by the author.