ChronoFrame非常适合喜欢玩摄影、拍照的用户食用。我觉得这程序的UI设计的是真好看,无论是前台还是后台都好看,非常符合我的审美,没需求的我都想怼几张图片上去挂着了= =
ChronoFrame特性(摘自项目页面)
在线管理照片 – 通过 Web 界面轻松管理和浏览照片
探索地图 – 在地图上浏览照片拍摄位置
智能 EXIF 解析 – 自动提取拍摄时间、地理位置、相机参数等元数据
地理位置识别 – 自动识别(Reverse Geocoding)照片拍摄地点
多格式支持 – 支持 JPEG、PNG、HEIC/HEIF 等主流图片格式
智能缩略图 – 基于 ThumbHash 技术的高效缩略图生成现代技术栈
Nuxt 4 – 基于最新的 Nuxt 框架,提供 SSR/SSG 支持
TypeScript – 完整的类型安全保障
TailwindCSS – 现代化的 CSS 框架
Drizzle ORM – 类型安全的数据库 ORM灵活的存储方案
多存储后端 – 支持 S3 兼容存储、本地文件系统
CDN 加速 – 可配置 CDN 地址加速图片访问
安装Docker:
apt -y update apt -y install curl curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
创建目录新建compose文件:
mkdir /opt/chronoframe && cd /opt/chronoframe && nano docker-compose.yml
写入如下内容:
services:
chronoframe:
image: ghcr.io/hoshinosuzumi/chronoframe:latest
container_name: chronoframe
restart: unless-stopped
ports:
- '127.0.0.1:3000:3000'
volumes:
- ./data:/app/data
env_file:
- .env
创建.env文件:
nano .env
写入如下内容,自行按注释内容修改:
# 管理员邮箱(必须) CFRAME_ADMIN_EMAIL=imlala@example.com # 管理员用户名(可选,默认ChronoFrame) CFRAME_ADMIN_NAME=imlala # 管理员密码(可选,默认 CF1234@!) CFRAME_ADMIN_PASSWORD=passwd # 站点信息(全部可选) NUXT_PUBLIC_APP_TITLE= NUXT_PUBLIC_APP_SLOGAN= NUXT_PUBLIC_APP_AUTHOR= NUXT_PUBLIC_APP_AVATAR_URL= # 地图提供器 (maplibre/mapbox) NUXT_PUBLIC_MAP_PROVIDER=maplibre # 使用MapLibre需要MapTiler的访问令牌 NUXT_PUBLIC_MAP_MAPLIBRE_TOKEN= # 使用Mapbox需要Mapbox的访问令牌 NUXT_PUBLIC_MAPBOX_ACCESS_TOKEN= # 存储提供者(支持local/s3/openlist) NUXT_STORAGE_PROVIDER=local NUXT_PROVIDER_LOCAL_PATH=/app/data/storage # 会话密码(必须,32位随机字符串,使用命令生成:openssl rand -base64 32) NUXT_SESSION_PASSWORD=
若选择使用s3,则将存储部分替换为:
NUXT_STORAGE_PROVIDER=s3 NUXT_PROVIDER_S3_ENDPOINT= NUXT_PROVIDER_S3_BUCKET=chronoframe NUXT_PROVIDER_S3_REGION=auto NUXT_PROVIDER_S3_ACCESS_KEY_ID= NUXT_PROVIDER_S3_SECRET_ACCESS_KEY= NUXT_PROVIDER_S3_PREFIX=photos/ NUXT_PROVIDER_S3_CDN_URL=
启动:
docker compose up -d
ChronoFrame建议生产环境使用反向代理,如果您必须使用IP+端口来访问,请在.env文件内添加如下内容:
NUXT_ALLOW_INSECURE_COOKIE=true
以解决类似问题:https://github.com/HoshinoSuzumi/chronoframe/issues/14#issuecomment-3333256569
我这里配置Ferron反向代理:
nano /etc/ferron.kdl
写入如下内容:
chronoframe.example.com {
proxy "http://127.0.0.1:3000/"
}
重载Ferron:
systemctl reload ferron
前台的效果参考项目页面,我这里放两张后台的效果图:
荒岛


















还是觉得之前的 Slink 瀑布墙好看,毕竟作者更新挺勤快的。