前言
其实很早之前就已经了解到了这个项目,也试用过一段时间,当时这个项目还不够完善,最后还是选择了exif-photo-blog这个项目来作为个人相册。但是现在PicImpact已经迭代的非常出色了,且我在使用exif-photo-blog项目的过程中遇到一些棘手的问题让我决定将个人相册迁移到PicImpact。
Exif-Photo-Blog带来的一些问题:
没有提供docker部署方式,这就让迁移变得困难
目前只提供了Vercel一键部署方式,但Vercel免费计划提供的额度不足以支撑相册的高频访问
Vercel部署强烈依赖在线数据库,我想要完全私有
Vercel部署的Exif-Photo-Blog在中国访问体验较差
迫于这些问题我在很长一段时间内没有更新个人相册,趁着这段时间较为空闲,加上我购置了新的服务器。于是一不做二不休,干脆把个人相册迁移到PicImpact,以下是我的折腾过程。
准备工作
虽然PicImpact同样支持Vercel一键部署,但我更推荐你使用Docker Compose。你需要提前准备的有:
一台服务器(该项目占用较少,1C1G足以)
已经安装了Docker Compose
已经安装了PostgresSQL
对象存储(AWS S3,CF R2等)
现在开始
创建配置文件
创建一个新的文件夹来存放项目,例如 picimpact
在该文件夹中,创建一个名为 docker-compose.yml 的文件
docker-compose.yml 的内容如下:services: picimpact: container_name: picimpact ports: - 3000:3000 environment: - DATABASE_URL=postgresql://[用户名]:[密码]@[地址和端口]/[数据库] - DIRECT_URL=postgresql://[用户名]:[密码]@[地址和端口]/[数据库] - BETTER_AUTH_SECRET=自己运行npx auth secret或一串随机的字符串都行 image: besscroft/picimpact:latest networks: {}
配置环境变量
将 [用户名] 替换为您的数据库用户名。
将 [密码] 替换为您的数据库密码。
将 [地址和端口] 替换为数据库服务器的 IP 地址或域名及端口号(例如 192.168.1.10:5432 或 db.example.com:5432)。
将 [数据库] 替换为您要使用的数据库名称。
在您的终端中运行 openssl rand -base64 32 生成一个随机字符串,并填入BETTER_AUTH_SECRET
启动服务
使用 cd 命令进入您创建 docker-compose.yml 文件的文件夹
运行以下命令来启动服务:
docker-compose up -d
打开浏览器,访问http://<您的服务器IP>:3000
注册并登录
配置对象存储
我选择使用c作为对象存储,如果你有其他选择,请参考官方文档。
r2_accesskey_id:Cloudflare AccessKey_ID
r2_accesskey_secret:Cloudflare AccessKey_Secret
r2_account_id:Cloudflare ACCOUNT_ID,也就是 https://<ACCOUNT_ID>.r2.cloudflarestorage.com
r2_bucket:Cloudflare Bucket 存储桶名称,如:picimpact
r2_storage_folder:存储文件夹(Cloudflare R2),严格格式,如:picimpact 或 picimpact/images ,填 / 或者不填表示根路径
r2_public_domain:Cloudflare R2 自定义域(公开访问)
修改Cloudflare R2跨域配置
[
{
"AllowedOrigins": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST",
"DELETE"
],
"AllowedHeaders": [
"*"
],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]
压缩图片并上传
为了减轻存储压力,并优化访问速度,我们需要对上传的照片进行压缩处理,我这里使用的是开源图片压缩工具PicSharp,配合TinyPNG的API将图片压缩为WebP进行上传。
