Skip to content

huoshen80/Lsky_random_img

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

兰空图床随机图片API

一个基于Rust为兰空图床提供的高性能、安全的随机图片API服务,通过直接查询数据库来获取图片链接,支持多CDN、缓存机制和Unix Socket连接。

安全特性

凭据安全: 使用环境变量,不硬编码密码
错误脱敏: 对外统一错误信息,详细错误仅记日志
Unix Socket: 优先使用Unix Socket连接,避免网络暴露
缓存机制: 可配置内存缓存,减少数据库压力
最小权限: 建议使用只读数据库账户
参数化查询: 防止SQL注入
CORS配置: 支持跨域但需配合限流使用
灵活配置: 所有关键参数均可通过环境变量配置

快速开始

1. 环境配置

# 复制配置文件
cp .env.example .env

# 编辑配置文件,设置数据库密码和CDN域名
# 优先配置Unix Socket路径:DB_SOCKET=/tmp/mysql.sock

2. 配置说明

环境变量 描述 默认值
ALBUM_ID 相册ID 3
CACHE_DURATION_SECS 缓存时间(秒) 300
CDN_CF CloudFlare CDN域名 https://cf.example.com/i
CDN_EO EdgeOne CDN域名 https://eo.example.com/i
CDN_DEFAULT 默认CDN域名 https://example.com/i
CDN_RANDOM_URL /random_url接口CDN域名 https://xxx.example.com/i

3. 数据库准备

确保数据库账户具有最小权限:

-- 创建只读用户(推荐)
CREATE USER 'img_readonly'@'localhost' IDENTIFIED BY 'secure_password';
GRANT SELECT ON img.albums TO 'img_readonly'@'localhost';
GRANT SELECT ON img.images TO 'img_readonly'@'localhost';
FLUSH PRIVILEGES;

4. 运行服务

# 开发模式
cargo run

# 构建生产版本
cargo build --release

API接口

  • GET /random - 默认随机图片重定向
  • GET /random_cf - CloudFlare CDN随机图片重定向
  • GET /random_eo - EdgeOne CDN随机图片重定向
  • GET /random_url - 返回随机图片URL (JSON)
  • GET /num - 返回图片总数

需要开放端口3030,推荐反代

配置优势

环境变量配置

  • 相册ID: 可以轻松切换不同相册,无需重新编译
  • 缓存时间: 根据业务需求调整缓存策略
  • 多CDN支持: 灵活配置不同CDN域名,支持故障切换
  • 统一管理: 所有配置集中在.env文件中

Unix Socket配置

Linux/MySQL:

# 查找MySQL socket路径
mysql_config --socket

# 常见路径:
# /var/run/mysqld/mysqld.sock
# /tmp/mysql.sock
# /var/lib/mysql/mysql.sock

Windows不支持Unix Socket,自动使用TCP连接。

性能优化

  • 可配置缓存: 图片URL缓存可调整时间,显著减少数据库查询
  • Unix Socket: 比TCP回环性能更好,减少网络开销
  • 连接池: sqlx自动管理数据库连接池
  • 随机优化: 从缓存中直接随机选择,避免OFFSET查询开销

故障排除

常见错误

  1. "DB_PASSWORD environment variable must be set"

    • 确保.env文件存在且配置正确
    • 检查环境变量是否正确设置
  2. Unix Socket连接失败

    • 检查socket文件路径是否正确
    • 确保应用有读写socket文件的权限
    • 回退使用TCP连接(注释掉DB_SOCKET)
  3. "服务暂时不可用"

    • 检查数据库连接是否正常
    • 确认数据库账户权限足够
    • 查看日志获取详细错误信息

配置示例

开发环境:

ALBUM_ID=3
CACHE_DURATION_SECS=60
CDN_DEFAULT=http://localhost:8080/images

生产环境:

ALBUM_ID=1
CACHE_DURATION_SECS=600
CDN_CF=https://cdn.example.com/images
CDN_EO=https://backup-cdn.example.com/images

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages