我用 Codex 和 Cloudflare,手搓了一个零成本照片站
非码农用 Codex + Cloudflare 零成本搭建个人摄影作品集网站的完整实践,日常只需拖文件进文件夹。
我家的 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 已经存了。
痛点是策展——把值得展示的那一部分挑出来,统一存放,让它可检索、可展示。
备份是底线,策展才是让照片产生价值的方式。
你的照片存在哪里?你真的能随时找到那张想用的吗?