- 🚀 Telegram 云存储 - 利用 Telegram 无限存储空间
- ⚡ Cloudflare CDN - 全球加速,智能路由优化
- 🎨 现代化前端 - 基于 Nuxt 3 + Vue 3 + Nuxt UI
- 📱 响应式设计 - 完美适配桌面端和移动端
- 🌙 深色模式 - 内置深色主题支持
- 🔄 智能路由 - 自动选择最优 CDN 节点
- 🔥 缓存预热 - 多地域主动预热 CDN 缓存
- 📊 CDN 监控 - 实时监控缓存状态
- 👥 群组上传 - 支持 Telegram 群组/频道上传
- 🔐 管理后台 - 完整的管理员功能
- 📈 数据统计 - 实时统计和监控
- 🖼️ 图片画廊 - 优雅的图片浏览体验
- 📚 API 文档 - 完整的 RESTful API
- 🗄️ 多存储支持 - Telegram / S3 / 本地 / Rclone 四种存储驱动
- 🎫 Token 系统 - 游客 Token 上传,支持配额和有效期管理
- Docker & Docker Compose(推荐)
- 或 Python 3.8+ & Node.js 18+
- Telegram Bot Token
- Cloudflare 账号(可选,用于 CDN 加速)
wget https://raw.githubusercontent.com/xiyan520/tg-telegram-imagebed/main/.env.example -O .env
wget https://raw.githubusercontent.com/xiyan520/tg-telegram-imagebed/main/docker-compose.ymlnano .env填入必要配置(详见配置说明):
BOT_TOKEN=你的_Bot_Token
STORAGE_CHAT_ID=你的_频道_ID
CLOUDFLARE_CDN_DOMAIN=你的域名
CLOUDFLARE_API_TOKEN=你的_API_Token
CLOUDFLARE_ZONE_ID=你的_Zone_IDdocker-compose up -d- 前端界面:
http://你的服务器IP:18793 - 管理后台:
http://你的服务器IP:18793/admin - 默认账号:
admin/ 密码通过环境变量ADMIN_PASSWORD设置,或首次启动时随机生成(查看日志获取)
services:
telegram-imagebed:
image: xiyan520/tg-telegram-imagebed:latest
container_name: telegram-imagebed
ports:
- "18793:18793"
env_file: .env
volumes:
- ./data:/app/data
restart: unless-stoppeddocker-compose up -ddocker run -d \
--name telegram-imagebed \
-p 18793:18793 \
--env-file .env \
-v ./data:/app/data \
--restart unless-stopped \
xiyan520/tg-telegram-imagebed:latest# 1. 克隆项目
git clone https://github.com/xiyan520/tg-telegram-imagebed.git
cd tg-telegram-imagebed
# 2. 安装依赖
pip install -r requirements.txt
# 3. 配置环境变量
cp .env.example .env
nano .env
# 4. 启动后端
python main.py# 1. 进入前端目录
cd frontend
# 2. 安装依赖
npm install
# 3. 配置环境变量
cp .env.example .env
nano .env
# 4. 构建生产版本
npm run build
# 5. 启动服务
npm run preview- 在 Telegram 中与 @BotFather 对话
- 发送
/newbot创建新机器人 - 按提示设置名称和用户名
- 获取
BOT_TOKEN
- 创建一个 Telegram 频道(Channel)
- 将 Bot 添加为频道管理员
- 通过 @VersaToolsBot 或 @GetTheirIDBot 获取频道 ID
- 登录 Cloudflare Dashboard
- 进入 My Profile → API Tokens
- 点击 Create Token
- 选择 Edit zone DNS 模板或自定义权限:
- Zone - Cache Purge - Purge
- Zone - Zone - Read
- 复制生成的 Token
- 在 Cloudflare Dashboard 选择你的域名
- 在右侧找到 Zone ID
- 复制 Zone ID
为了让 CDN 正常工作,需要在 Cloudflare 中设置缓存规则:
- 进入域名管理页面
- 点击 Rules → Page Rules
- 创建新规则,URL 模式:
你的域名/image/* - 添加以下设置:
- Cache Level: Cache Everything
- Edge Cache TTL: 1 month
- Browser Cache TTL: 4 hours
- 保存规则
- 进入域名管理页面
- 点击 Caching → Cache Rules
- 创建新规则:
When incoming requests match: - URI Path contains "/image/" Then: - Cache eligibility: Eligible for cache - Edge TTL: 30 days - Browser TTL: 4 hours
如果需要自定义缓存头,可以添加 Transform Rules:
- 进入 Rules → Transform Rules → Modify Response Header
- 创建规则:
When incoming requests match: - URI Path contains "/image/" Then: - Set static: Cache-Control = public, max-age=2592000
- 添加 A 记录指向你的服务器 IP
- 确保 Proxy status 为橙色云朵(已代理)
- 等待 DNS 生效
| 变量名 | 必需 | 说明 | 示例值 |
|---|---|---|---|
BOT_TOKEN |
✅ | Bot Token | 123456:ABCdefGHIjkl |
STORAGE_CHAT_ID |
✅ | 频道/群组 ID | -1001234567890 |
| 变量名 | 必需 | 默认值 | 说明 |
|---|---|---|---|
CLOUDFLARE_CDN_DOMAIN |
⭐ | - | CDN 域名(不含 https://) |
CLOUDFLARE_API_TOKEN |
⭐ | - | API Token |
CLOUDFLARE_ZONE_ID |
⭐ | - | Zone ID |
CDN_ENABLED |
❌ | true |
是否启用 CDN |
CLOUDFLARE_CACHE_LEVEL |
❌ | aggressive |
缓存级别 |
CLOUDFLARE_BROWSER_TTL |
❌ | 14400 |
浏览器缓存时间(秒) |
CLOUDFLARE_EDGE_TTL |
❌ | 2592000 |
边缘缓存时间(秒) |
ENABLE_SMART_ROUTING |
❌ | true |
智能路由 |
ENABLE_CACHE_WARMING |
❌ | true |
缓存预热 |
CACHE_WARMING_DELAY |
❌ | 5 |
预热延迟(秒) |
| 变量名 | 默认值 | 说明 |
|---|---|---|
ENABLE_GROUP_UPLOAD |
true |
是否启用群组上传 |
GROUP_UPLOAD_ADMIN_ONLY |
false |
是否仅管理员可上传 |
GROUP_ADMIN_IDS |
- | 管理员 ID 列表(逗号分隔) |
GROUP_UPLOAD_REPLY |
true |
是否自动回复 CDN 链接 |
GROUP_UPLOAD_DELETE_DELAY |
0 |
回复消息删除延迟(秒),0 表示不删除 |
系统支持四种存储驱动,可通过环境变量或管理后台配置:
| 变量名 | 说明 |
|---|---|
STORAGE_CONFIG_JSON |
JSON 格式的存储配置(优先级最高,设置后无法通过界面修改) |
存储配置示例:
{
"telegram": {
"driver": "telegram",
"bot_token": "123456:ABC...",
"chat_id": "-1001234567890"
},
"my-s3": {
"driver": "s3",
"endpoint": "https://s3.amazonaws.com",
"bucket": "my-bucket",
"access_key": "AKIAXXXXXXXX",
"secret_key": "xxxxxxxx",
"region": "us-east-1",
"public_url_prefix": "https://cdn.example.com"
},
"local": {
"driver": "local",
"root_dir": "/data/uploads"
},
"rclone-remote": {
"driver": "rclone",
"remote": "myremote",
"base_path": "/images"
}
}支持的存储驱动:
| 驱动 | 说明 | 必需参数 |
|---|---|---|
telegram |
Telegram 频道存储 | bot_token, chat_id(可从环境变量继承) |
s3 |
S3 兼容存储 | endpoint, bucket, access_key, secret_key |
local |
本地文件系统 | root_dir |
rclone |
Rclone 远程存储 | remote |
| 变量名 | 默认值 | 说明 |
|---|---|---|
GUEST_TOKEN_GENERATION_ENABLED |
true |
是否允许游客创建 Token |
GUEST_TOKEN_MAX_UPLOAD_LIMIT |
1000 |
Token 最大上传次数上限 |
GUEST_TOKEN_MAX_EXPIRES_DAYS |
365 |
Token 最大有效天数 |
| 变量名 | 默认值 | 说明 |
|---|---|---|
GUEST_UPLOAD_POLICY |
open |
游客上传策略:open / token_only / admin_only |
MAX_FILE_SIZE_MB |
20 |
单文件最大大小(MB) |
DAILY_UPLOAD_LIMIT |
0 |
每日上传限制(0 表示不限制) |
| 变量名 | 默认值 | 说明 |
|---|---|---|
SECRET_KEY |
- | 加密密钥(请使用强密码) |
PORT |
18793 |
Web 服务端口 |
DATABASE_PATH |
./telegram_imagebed.db |
数据库路径 |
LOG_LEVEL |
INFO |
日志级别 |
DEFAULT_ADMIN_USERNAME |
admin |
默认管理员用户名 |
DEFAULT_ADMIN_PASSWORD |
admin123 |
默认管理员密码 |
- 框架: Flask
- 存储: Telegram Bot API + SQLite
- CDN: Cloudflare API
- 语言: Python 3.8+
- 框架: Nuxt.js 3
- UI 库: Nuxt UI (Tailwind CSS)
- 状态管理: Pinia
- 工具库: VueUse
- 语言: TypeScript
完整的交互式 API 文档请访问:http://your-domain/docs
POST /api/upload
Content-Type: multipart/form-data
file: <图片文件>POST /api/auth/upload
Authorization: Bearer <token>
Content-Type: multipart/form-data
file: <图片文件>POST /api/auth/token/generate
Content-Type: application/json
{
"upload_limit": 100,
"expires_days": 30,
"description": "my client"
}POST /api/auth/token/verify
Authorization: Bearer <token>GET /image/<encrypted_id>GET /api/statsGET /api/recent?page=1&limit=12响应示例:
{
"success": true,
"data": {
"url": "https://your-domain.com/image/xxx",
"filename": "image.jpg",
"size": "1.2 MB",
"upload_time": "2025-01-01 12:00:00"
}
}A: 检查 Telegram Bot 是否有频道管理员权限,确保 STORAGE_CHAT_ID 配置正确。
A:
- 确认 Cloudflare 缓存规则已正确配置
- 检查
CLOUDFLARE_CDN_DOMAIN是否正确(不含 https://) - 验证 API Token 权限是否足够
- 查看后端日志确认 CDN 状态
A: 登录管理后台后,在设置页面修改密码。
A:
- 检查
.env文件配置是否正确 - 确保端口 18793 未被占用
- 查看容器日志:
docker logs telegram-imagebed
A:
- 确保 Bot 已添加到群组并有管理员权限
- 检查
ENABLE_GROUP_UPLOAD是否为true - 如果设置了
GROUP_UPLOAD_ADMIN_ONLY,确认用户 ID 在GROUP_ADMIN_IDS中
- ✅ 支持 Telegram / S3 / 本地 / Rclone 四种存储驱动
- ✅ 管理后台可视化配置存储
- ✅ 支持上传场景路由(游客/Token/群组/管理员)
- ✅ 存储健康状态监控
- ✅ 游客可创建上传 Token
- ✅ Token 配额和有效期管理
- ✅ Token 上传记录查询
- ✅ 管理后台 Token 管理
- ✅ 数据驱动的组件化文档页面
- ✅ 多语言代码示例(cURL/JavaScript/Python/PHP)
- ✅ 侧边栏导航与滚动定位
- ✅ 响应式移动端适配
- ✅ 支持 Telegram 群组/频道直接上传
- ✅ 可配置仅管理员上传
- ✅ 自动回复 CDN 链接
- ✅ 可设置回复消息自动删除
欢迎提交 Issue 和 Pull Request!
MIT License
如有问题,请提交 Issue