
「EXIF Photo Blog」在Vercel上部署你的个人摄影相册
1. 前言
1.1 寻找合适的摄影相册
当你使用相机拍下了足够多的照片后,你不免产生新的念头,想要一个合适的相册来存放那些珍贵的瞬间,以便于随时随地分享和回味,不至于让它们在硬盘深处蒙上一层灰。我曾经会在微信朋友圈和500px上传我的摄影照片,前者更适合小范围的分享且和生活日常会混杂在一起,而后者的用户大多集中在摄影师之间,而且它们共同的缺点就是无法保存高质量的照片,你的照片会被第三方平台随意的压缩。
那么?我的需求逐渐明晰,我需要一个便于分享、能够保存高质量照片、最好还是能够自托管的相册。拥有这样需求的人不在少数,也有十分优秀的项目例如PicImpact或是exif-gallery-nuxt,那么在体验过一段时间后,我最终选择exif-photo-blog这个项目。
1.2 为什么选择它
选择EXIF Photo Blog这个项目的原因无外乎是它具有独特的内容呈现形式,能够显示Exif信息和富士胶片模拟信息,丰富的自定义选项,以及可以使用Vercel进行一键部署,不需要依赖服务器,1个域名,1个免费的Cloudflare R2对象存储,就能帮助你快速的部署属于你的摄影相册。
官方Demo:photos.sambecker.com
个人演示Demo:pic.liebesfreud.me
2. 在Vercel上部署
2.1 一键部署
项目主页提供了在Vercel上一键部署的按钮,你也可以fork项目后在Vercel手动部署,点此直达Vercel新建项目,部署时无需任何改动,在等待大约两分钟后即可部署完毕。
2.2 链接数据库
此时你已经可以通过Vercel提供的域名访问你的相册了,你大概会进入这样的界面,当你配置完Storage(数据库和对象存储)、Authentication后,会在对应的条件前打勾:
在项目界面中打开Storage选项卡,开始创建并链接你的数据库吧。我建议你使用Vercel提供的Neon或Supabase,它们都有一定的免费额度,对于一个个人使用的相册而言绰绰有余。
以Neon为例,选择合适的地区并创建,完成后,你可以很轻松的将其链接到项目:
在完成这一步后,记得回头检查相册网站中的检查项!
2.3 绑定你的域名
Vercel为你提供的域名难以记忆,且在中国大陆访问受限,建议绑定一个自己的域名,跟随步骤在你域名DNS中添加CNAME记录:
3. 配置对象存储 以R2为例
3.1 建立存储桶
在Cloudflare中创建一个R2存储桶,选项皆为默认,无需更改。
3.2 修改CORS策略
将R2的CORS策略修改为如下:
[{
"AllowedHeaders": ["*"],
"AllowedMethods": [
"GET",
"PUT"
],
"AllowedOrigins": [
"http://localhost:3000",
"vercel域名",
"你的域名"
]
}]
3.3 启用公共托管
可以通过以下两种方式之一设置公有存储桶:
将您的存储桶公开为受您控制的自定义域(在设置-自定义域中增加自己的域名)
使用 Cloudflare 托管的 https://r2.dev
子域为非生产使用案例公开您的存储桶。
3.4 创建API并配置环境变量
通过选择“Manage R2 API Tokens”并单击“Create API Token”来创建 API 令牌。
选择“对象读写”,选择“仅应用于特定存储桶”,然后选择创建的存储桶。
在Vercel中增加对象存储环境变量并重新部署。
AUTH_SECRET
:生成 auth secret
ADMIN_EMAIL
:用户邮箱
ADMIN_PASSWORD
:用户密码
CLOUDFLARE_R2_ACCESS_KEY
:API
CLOUDFLARE_R2_SECRET_ACCESS_KEY
:API密匙
NEXT_PUBLIC_CLOUDFLARE_R2_BUCKET
:存储桶名称
NEXT_PUBLIC_CLOUDFLARE_R2_ACCOUNT_ID
:账户 ID(位于 R2 概述页面上)
NEXT_PUBLIC_CLOUDFLARE_R2_PUBLIC_DOMAIN
: “your-custom-domain.com” 或 “pub-jf90908...s0d9f8s0s9df.r2.dev”
随后访问 Vercel 上的项目,导航到“部署”选项卡,单击最近部署旁边的 ••• 按钮,然后选择“重新部署”
4. 上传你的第一张照片
登录到相册后台,在your-domain.com/admin/configuration路径中看到如下,恭喜你!你成功部署了EXIF Photo Blog,上传你的第一张照片吧: