/EasyPic

基于PHP和Vue3开发的前后端分离式图床应用,支持S3挂载

Primary LanguagePHPMIT LicenseMIT

企业级图片托管系统

一个功能完整的企业级图片托管和管理系统,支持图片上传、处理、存储、CDN集成和完整的管理后台。

功能特性

核心功能

  • 🖼️ 图片上传与管理 - 支持多种格式图片上传,自动生成缩略图
  • 👥 用户管理系统 - 完整的用户注册、登录、权限管理
  • 📁 相册管理 - 创建和管理图片相册,支持公开/私有设置
  • 🔐 API密钥管理 - 为开发者提供API访问密钥
  • 📊 管理后台 - 完整的管理界面,包含数据统计和系统监控

图片处理

  • 自动图片压缩和优化
  • 多种格式转换支持 (JPEG, PNG, WebP, GIF)
  • 智能缩略图生成
  • 图片元数据提取
  • 重复图片检测

存储与CDN

  • 本地存储支持
  • CDN集成 (阿里云OSS, 腾讯云COS, 七牛云)
  • 图片过期管理
  • 存储空间优化

安全特性

  • JWT身份验证
  • 角色权限控制
  • 文件类型验证
  • 上传限制和防护
  • 系统日志记录

技术栈

  • 后端: PHP 8.0+, Slim Framework 4
  • 数据库: MySQL 8.0+
  • 前端: HTML5, CSS3, JavaScript (ES6+)
  • 图片处理: GD/ImageMagick
  • 认证: JWT (JSON Web Tokens)
  • ORM: Eloquent ORM

系统要求

  • PHP 8.0 或更高版本
  • MySQL 8.0 或更高版本
  • Composer
  • Web服务器 (Apache/Nginx)
  • GD 或 ImageMagick 扩展

PHP扩展要求

- pdo_mysql
- gd 或 imagick
- fileinfo
- json
- mbstring
- openssl

安装指南

1. 克隆项目

git clone <repository-url>
cd image-hosting-system

2. 安装依赖

composer install

3. 环境配置

复制环境配置文件并编辑:

cp .env.example .env

编辑 .env 文件,配置数据库和其他设置:

# 数据库配置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=image_hosting
DB_USERNAME=root
DB_PASSWORD=

# JWT配置
JWT_SECRET=your-secret-key-here
JWT_ALGORITHM=HS256
JWT_EXPIRATION=3600

# 文件上传配置
UPLOAD_MAX_SIZE=10485760
UPLOAD_ALLOWED_TYPES=jpg,jpeg,png,gif,webp,svg
UPLOAD_PATH=uploads

# CDN配置 (可选)
CDN_ENABLED=false
CDN_PROVIDER=local
CDN_DOMAIN=

# 阿里云OSS配置
ALIYUN_OSS_ACCESS_KEY_ID=
ALIYUN_OSS_ACCESS_KEY_SECRET=
ALIYUN_OSS_BUCKET=
ALIYUN_OSS_ENDPOINT=

# 腾讯云COS配置
TENCENT_COS_SECRET_ID=
TENCENT_COS_SECRET_KEY=
TENCENT_COS_REGION=
TENCENT_COS_BUCKET=

# 七牛云配置
QINIU_ACCESS_KEY=
QINIU_SECRET_KEY=
QINIU_BUCKET=
QINIU_DOMAIN=

4. 创建数据库

创建MySQL数据库:

CREATE DATABASE image_hosting CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

5. 初始化数据库

运行项目时会自动创建表结构和默认数据。

6. 设置目录权限

确保上传目录有写入权限:

chmod -R 755 public/uploads
chmod -R 755 storage/logs

7. 启动服务

开发环境

php -S localhost:8000 -t public

生产环境

配置Apache或Nginx指向 public 目录。

Apache配置示例 (.htaccess):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

Nginx配置示例:

server {
    listen 80;
    server_name your-domain.com;
    root /path/to/project/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

使用说明

默认管理员账户

  • 用户名: admin
  • 密码: admin123
  • 邮箱: admin@example.com

访问地址

  • 主页: http://localhost:8000
  • 管理后台: http://localhost:8000/admin.html
  • API文档: http://localhost:8000/api

API使用

认证

所有API请求需要在Header中包含JWT Token:

Authorization: Bearer <your-jwt-token>

主要API端点

用户认证

  • POST /api/auth/login - 用户登录
  • POST /api/auth/register - 用户注册
  • POST /api/auth/logout - 用户登出

图片管理

  • POST /api/images/upload - 上传图片
  • GET /api/images - 获取图片列表
  • GET /api/images/{uuid} - 获取图片详情
  • DELETE /api/images/{uuid} - 删除图片

相册管理

  • GET /api/albums - 获取相册列表
  • POST /api/albums - 创建相册
  • PUT /api/albums/{id} - 更新相册
  • DELETE /api/albums/{id} - 删除相册

管理员API

  • GET /api/admin/dashboard - 仪表板数据
  • GET /api/admin/users - 用户管理
  • GET /api/admin/images - 图片管理
  • GET /api/admin/logs - 系统日志
  • GET /api/admin/analytics - 数据分析

目录结构

├── public/                 # Web根目录
│   ├── index.html         # 主页
│   ├── admin.html         # 管理后台
│   ├── assets/            # 静态资源
│   └── uploads/           # 上传文件目录
├── src/                   # 源代码
│   ├── Controllers/       # 控制器
│   ├── Models/           # 数据模型
│   ├── Services/         # 业务服务
│   ├── Middleware/       # 中间件
│   ├── Routes/           # 路由定义
│   └── Database/         # 数据库管理
├── storage/              # 存储目录
│   └── logs/            # 日志文件
├── composer.json         # Composer配置
├── .env.example         # 环境配置示例
└── README.md            # 项目说明

开发指南

添加新功能

  1. src/Controllers/ 中创建控制器
  2. src/Models/ 中定义数据模型
  3. src/Routes/ 中添加路由
  4. src/Services/ 中实现业务逻辑

数据库迁移

数据库结构定义在 src/Database/DatabaseManager.php 中,系统启动时会自动创建表结构。

日志系统

使用 LogService 记录系统日志:

$logService = new LogService();
$logService->info('操作成功', ['user_id' => 1]);
$logService->error('操作失败', ['error' => $exception->getMessage()]);

部署建议

生产环境配置

  1. 使用HTTPS协议
  2. 配置适当的PHP内存限制和执行时间
  3. 启用OPcache提升性能
  4. 配置定期备份数据库
  5. 设置日志轮转
  6. 配置CDN加速图片访问

性能优化

  1. 启用Gzip压缩
  2. 配置浏览器缓存
  3. 使用CDN分发静态资源
  4. 优化数据库查询
  5. 配置Redis缓存(可选)

安全建议

  1. 定期更新依赖包
  2. 配置防火墙规则
  3. 限制文件上传大小和类型
  4. 启用访问日志监控
  5. 定期备份数据

故障排除

常见问题

1. 图片上传失败

  • 检查上传目录权限
  • 确认PHP文件上传配置
  • 检查磁盘空间

2. 数据库连接失败

  • 检查数据库配置
  • 确认数据库服务状态
  • 检查网络连接

3. JWT认证失败

  • 检查JWT密钥配置
  • 确认Token格式正确
  • 检查Token是否过期

日志查看

系统日志存储在 storage/logs/ 目录中,可以通过管理后台查看或直接访问日志文件。

许可证

本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。

贡献

欢迎提交Issue和Pull Request来改进项目。

支持

如有问题或需要技术支持,请通过以下方式联系:

  • 提交Issue
  • 发送邮件至项目维护者

注意: 首次运行项目时,请确保已正确配置环境变量和数据库连接。系统会自动创建必要的数据表和默认管理员账户。