我用 Codex 和 Cloudflare,手搓了一个零成本照片站

非码农用 Codex + Cloudflare 零成本搭建个人摄影作品集网站的完整实践,日常只需拖文件进文件夹。

gallery.qidi.jp
gallery.qidi.jp
我家的 NAS 里存着几万张照片,真到想用的时候,一张都找不到。

朋友圈发过一些,Instagram 发过一些,NAS 里还躺着一堆 RAW。三个地方,三套记忆,互不打通。写博客想找张配图,翻遍所有地方,就是找不到那张「明明记得拍过」的。

干脆搭一个自己的照片站吧。

1天时间,gallery.qidi.jp,上线了~


问了一圈,发现想要的方案不存在

我先去问 ChatGPT:有没有轻量、便宜、能自定义域名的摄影作品集方案?

它给我列了一排——Squarespace、Pixpa、Ghost,还有几个 GitHub 上的开源项目。

Squarespace 和 Pixpa 都是专业摄影师用的,模板好看,但订阅费每月十几美金起步。功能做得太多,我只想展示照片,不想经营一个「摄影商业网站」。Ghost 可以自己搭,但需要服务器,维护麻烦。GitHub 上的开源项目要么太简陋,要么需要写代码配置。

最后停在一个叫 Afilmory 的开源项目上。界面干净,支持 EXIF,自动生成缩略图,还能按文件夹分类。基本就是我想要的。

可惜官方 SaaS 免费套餐限制照片数量、不能绑自己的域名。我不想为了展示照片每个月交钱,也不想用别人的二级域名。

那还是自己部署吧。


让 Codex 先看一遍仓库

我不是软件工程师,不会从头写代码,看代码都费劲。但我有个习惯——遇到技术项目,先把仓库和文档丢给 Codex,让它帮我读一遍,告诉我需要准备什么。

十分钟后它回我:你机器上 Node.js、pnpm、wrangler、gh CLI 都有了。这个项目用 Cloudflare R2 存照片,Cloudflare Pages 托管网站,GitHub Actions 自动构建。你需要的工具基本齐了。

也就是说,我不用写代码,只需要做决策和配置。

这里插一句。

很多人以为 AI coding 工具是替你写代码,其实对我这种非工程师来说,它更大的价值是帮你读文档、梳理步骤、验证可行性。我不需要懂每一行代码什么意思,只需要知道「这一步我要做什么」「下一步该点什么按钮」。


最后用的这套方案

折腾完,架构是这样的:

  • Codex链接好Cloudflare和Github账号,
  • Cloudflare R2 存照片(云上的硬盘,前 10GB 免费),
  • Afilmory Builder 自动扫描照片、读 EXIF、生成缩略图,
  • GitHub Actions 每 3 小时触发一次构建,
  • Cloudflare Pages 把网站发布到全球 CDN,
  • 最后绑上我自己的域名 gallery.qidi.jp

用大白话解释:

  • 在Cloudflare的后台网页,我把照片拖进 R2 的文件夹,
  • 3 小时后打开我的域名,照片已经在上面了。
  • 缩略图、EXIF、相机型号、镜头信息,全部自动生成。

你需要做什么,Codex 能做什么

整个搭建过程,我只需要做几件事:

  • 注册 Cloudflare 和 GitHub 账号(我本来就有),然后链接到Codex
  • 在 Cloudflare 上创建一个 R2 存储桶,
  • 把 R2 的只读密钥填到 Pages 的项目设置里,绑定域名。

听起来多,其实就是点按钮、填表单,没有代码。

Codex 帮我做了剩下的事:

  • 读仓库文档、
  • 生成 builder.config.ts 配置文件、
  • 写 GitHub Actions 定时构建脚本、
  • 排查构建错误。

有一次直方图加载不出来,它提醒我检查 R2 的 CORS 配置,果然是没加域名。

日常维护更简单。我只需要做一件事:登录 Cloudflare,打开 R2,把照片拖进文件夹,关上页面。

等不及 3 小时?点一下 GitHub Actions 的「Run workflow」按钮,或者让 Codex 帮我执行一行命令,立刻构建。


成本

我算了笔账。

R2 前 10GB 每月免费,Pages 免费,GitHub Actions 免费额度够用,域名我本来就有。对于 JPG 照片,10GB 可以存几千张。即使以后超了,R2 的超出部分价格也极低。

对比 Squarespace 每月 12 美金以上,Pixpa 每月 8 美金以上,这个方案的优势不是省了多少钱,主要是省掉了为不需要的功能付费的麻烦。


上线时我检查了一遍

R2 里能看到原图,Pages 构建日志显示扫描到了照片,域名能打开,新照片可见,缩略图和原图都能加载,EXIF 和直方图正常,自动构建定时任务运行正常。

全部一次通过。


上线后还顺手加了点东西

网站跑起来之后,我又想加几个小功能。

多语言切换按钮(日语/中文/英语),自定义 favicon,还有分享到社交媒体时的预览卡片。

这些怎么做?还是老办法。我问 Codex:我想加一个多语言按钮,怎么实现最简单?

它看了代码之后告诉我,Afilmory 的 Vue 前端可以改,有几种方案。我选了最轻的那个——静态 JSON 做语言包,按钮放在导航栏,切换时刷新页面。然后直接让它帮我改代码、推送到 GitHub、触发 Pages 重新构建。

favicon 和分享卡片也一样。我告诉它我想要的效果,它帮我生成代码、配置 meta 标签、生成 OG 图片。我只需要确认预览效果,不满意就让它再调。

上线之后的小定制,核心逻辑和搭建过程一样。你告诉 Codex 你想要什么,它告诉你哪种方案最轻量,然后直接帮你改和部署。你还是不用写代码,只需要准确的表达,想要什么,不想要什么,然后选择方案。


给想动手的人

如果你也遇到跟我一样的问题——照片分散在各处,没有一个统一展示的地方——这个方案值得试试。

核心思路不是学一堆技术。而是学会交代需求,把尽可能多的工作,都交给AI。

让 Codex 帮你读文档,你不需要懂代码,只需要知道下一步该点什么。用 Cloudflare 的免费层,R2 加 Pages 对中小型作品集完全够用。日常维护极简,拖文件进文件夹,剩下的交给自动化。

照片管理真正的痛点不是存储。NAS 已经存了。

痛点是策展——把值得展示的那一部分挑出来,统一存放,让它可检索、可展示。

备份是底线,策展才是让照片产生价值的方式。

你的照片存在哪里?你真的能随时找到那张想用的吗?