ImageFlow 是一个为现代网站和应用程序设计的高效图像服务系统。它能根据设备类型自动提供最合适的图像,并支持 WebP 和 AVIF 等现代图像格式,显著提升网站性能和用户体验。
libwebp-tools)libavif-apps)git clone https://github.com/Yuri-NagaSaki/ImageFlow.git
cd ImageFlow
cd frontend
bash build.sh
cd ..
go mod tidy go build -o imageflow
cp .env.example .env
# 编辑 .env 文件进行配置
[Unit]
Description=ImageFlow Service
After=network.target
[Service]
ExecStart=/path/to/imageflow
WorkingDirectory=/path/to/imageflow/directory
Restart=always
User=youruser
EnvironmentFile=/path/to/imageflow/.env
[Install]
WantedBy=multi-user.target
sudo systemctl enable imageflow
sudo systemctl start imageflow
# 1. 克隆仓库
git clone https://github.com/Yuri-NagaSaki/ImageFlow.git
cd ImageFlow
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件
# 3. 启动服务
docker compose up -d
# 1. 克隆仓库
git clone https://github.com/Yuri-NagaSaki/ImageFlow.git
cd ImageFlow
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件
# 3. 构建并启动
docker compose -f docker-compose-build.yml up --build -d
通过创建和编辑 .env 文件配置系统。以下是主要配置项说明:
# API 密钥配置
API_KEY=your_api_key_here # 设置您的 API 密钥
# 存储配置
STORAGE_TYPE=local # 存储类型:local(本地存储)或 s3(S3 兼容存储)
LOCAL_STORAGE_PATH=static/images # 本地存储路径
# S3 存储配置(当 STORAGE_TYPE=s3 时需要)
S3_ENDPOINT= # S3 端点地址
S3_REGION= # S3 区域
S3_ACCESS_KEY= # 访问密钥
S3_SECRET_KEY= # 访问密钥密文
S3_BUCKET= # 存储桶名称
CUSTOM_DOMAIN= # 自定义域名
# 图像处理配置
MAX_UPLOAD_COUNT=20 # 单次最大上传数量
IMAGE_QUALITY=80 # 图像质量(1-100)
WORKER_THREADS=4 # 并行处理线程数
COMPRESSION_EFFORT=6 # 压缩级别(1-10)
FORCE_LOSSLESS=false # 是否强制无损压缩
图片上传功能需要 API 密钥认证。您可以:
.env 文件中设置 API 密钥访问 http://localhost:8686/ 的上传界面。您可以:
访问 http://localhost:8686/manage.html 的管理界面。您可以:
通过 API 获取随机图片(无需 API 密钥):
GET http://localhost:8686/api/random GET http://localhost:8686/api/random?tag=nature
系统会根据请求头中的设备类型和浏览器支持返回最合适的图片。您还可以通过标签筛选随机图片。
| 接口 | 方法 | 描述 | 参数 | 认证 |
|---|---|---|---|---|
/api/random | GET | 获取随机图片 | tag:可选,按标签筛选 | 不需要 |
/api/upload | POST | 上传新图片 | Form 数据,字段名 "images[]" 可选参数: expiryMinutes(过期时间,分钟)可选参数: tags(标签数组) | 需要 API 密钥 |
/api/delete-image | POST | 删除图片及其所有格式 | JSON 数据,包含 id 和 storageType | 需要 API 密钥 |
/api/validate-api-key | POST | 验证 API 密钥 | 请求头中的 API 密钥 | 不需要 |
/api/images | GET | 列出所有已上传的图片 | 可选:tag(按标签筛选) | 需要 API 密钥 |
/api/config | GET | 获取系统配置 | 无 | 需要 API 密钥 |
/api/trigger-cleanup | POST | 手动触发清理过期图片 | 无 | 需要 API 密钥 |
/api/tags | GET | 获取所有可用标签 | 无 | 需要 API 密钥 |
ImageFlow/ ├── .github/ # GitHub 相关配置 ├── config/ # 配置相关代码 ├── docs/ # 文档和图片 ├── favicon/ # 网站图标资源 ├── frontend/ # Next.js 前端应用 │ ├── app/ # Next.js 应用目录 │ ├── public/ # 公共资源 │ ├── .next/ # Next.js 构建输出 │ ├── out/ # 静态导出输出 │ ├── build.sh # Unix 构建脚本 │ └── build.bat # Windows 构建脚本 ├── handlers/ # HTTP 请求处理器 ├── scripts/ # 实用脚本 ├── static/ # 静态文件和图片存储 │ └── images/ # 图片存储目录 │ ├── landscape/ # 横向图片 │ │ ├── avif/ # AVIF 格式 │ │ └── webp/ # WebP 格式 │ ├── portrait/ # 纵向图片 │ │ ├── avif/ # AVIF 格式 │ │ └── webp/ # WebP 格式 │ ├── original/ # 原始图片 │ │ ├── landscape/ # 原始横向图片 │ │ └── portrait/ # 原始纵向图片 │ ├── gif/ # GIF 格式图片 │ └── metadata/ # 图片元数据(包含过期时间信息) ├── utils/ # 实用函数 ├── .env # 环境变量 ├── .env.example # 环境配置示例 ├── Dockerfile # Docker 配置 ├── docker-compose.yaml # Docker Compose 配置 ├── docker-compose-build.yml # Docker Compose 构建配置 ├── go.mod # Go 模块文件 ├── go.sum # Go 模块校验和 ├── main.go # 主程序入口 └── README.md # 项目文档
欢迎贡献!随时提交代码、报告问题或提出改进建议!
本项目基于 MIT 许可证 - 详见 LICENSE 文件。
Blog - 猫猫博客
项目链接:https://github.com/Yuri-NagaSaki/ImageFlow
YXVM赞助了本项目
NodeSupport赞助了本项目
⭐ 如果您喜欢这个项目,请给它一个星标!⭐
由 Yuri NagaSaki 用 ❤️ 制作
容器显示 unhealthy:
docker logs <container_id>docker exec <container_id> netstat -tulpndocker exec <container_id> ps aux外网无法访问:
sudo ufw status 或 sudo iptables -Ldocker port <container_id># 在 docker-compose.yaml 中添加
network_mode: "host"
静态资源访问问题:
docker inspect <container_id>ls -la ./static/imagesdocker exec <container_id> ls -la /app/static性能优化建议: