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 -dChronoFrame建议生产环境使用反向代理,如果您必须使用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前台的效果参考项目页面,我这里放两张后台的效果图:
