「PicImpact」更易用的自托管个人相册&画廊
前言
其实很早之前就已经了解到了这个项目,也试用过一段时间,当时这个项目还不够完善,最后还是选择了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: picimpactports:- 3000:3000environment:- DATABASE_URL=postgresql://[用户名]:[密码]@[地址和端口]/[数据库]- DIRECT_URL=postgresql://[用户名]:[密码]@[地址和端口]/[数据库]- BETTER_AUTH_SECRET=自己运行npx auth secret或一串随机的字符串都行image: besscroft/picimpact:latestnetworks: {} -
配置环境变量
-
将 [用户名] 替换为您的数据库用户名。
-
将 [密码] 替换为您的数据库密码。
-
将 [地址和端口] 替换为数据库服务器的 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进行上传。

赞助支持
如果这篇文章对你有帮助,欢迎赞助支持!
部分内容可能已过时