index.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import dotenv from 'dotenv';
  2. import path from 'path';
  3. import { fileURLToPath } from 'url';
  4. dotenv.config();
  5. const __dirname = path.dirname(fileURLToPath(import.meta.url));
  6. export const config = {
  7. env: process.env.NODE_ENV || 'development',
  8. version: process.env.npm_package_version || '1.0.0',
  9. port: parseInt(process.env.PORT || '3000', 10),
  10. // 服务监听地址:127.0.0.1 仅本地访问,0.0.0.0 允许局域网访问
  11. host: process.env.HOST || '127.0.0.1',
  12. // 数据库配置
  13. database: {
  14. host: process.env.DB_HOST || 'localhost',
  15. port: parseInt(process.env.DB_PORT || '3306', 10),
  16. username: process.env.DB_USERNAME || 'root',
  17. password: process.env.DB_PASSWORD || '',
  18. database: process.env.DB_DATABASE || 'media_manager',
  19. },
  20. // Redis 配置
  21. redis: {
  22. host: process.env.REDIS_HOST || 'localhost',
  23. port: parseInt(process.env.REDIS_PORT || '6379', 10),
  24. password: process.env.REDIS_PASSWORD || undefined,
  25. db: parseInt(process.env.REDIS_DB || '0', 10),
  26. },
  27. // JWT 配置
  28. jwt: {
  29. secret: process.env.JWT_SECRET || 'your-super-secret-key-change-in-production',
  30. accessExpiresIn: process.env.JWT_ACCESS_EXPIRES_IN || '15m',
  31. refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '7d',
  32. },
  33. // CORS 配置
  34. cors: {
  35. origin: process.env.CORS_ORIGIN
  36. ? process.env.CORS_ORIGIN.split(',').map(s => s.trim()).filter(Boolean)
  37. : ['*'],
  38. },
  39. // 上传配置
  40. upload: {
  41. path: process.env.UPLOAD_PATH || path.join(__dirname, '../../uploads'),
  42. maxVideoSize: parseInt(process.env.MAX_VIDEO_SIZE || '4096', 10) * 1024 * 1024, // MB to bytes
  43. maxImageSize: parseInt(process.env.MAX_IMAGE_SIZE || '10', 10) * 1024 * 1024,
  44. allowedVideoTypes: ['video/mp4', 'video/quicktime', 'video/x-flv'],
  45. allowedImageTypes: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'],
  46. },
  47. // 加密配置
  48. encryption: {
  49. key: process.env.ENCRYPTION_KEY || 'your-encryption-key-32-chars-long!',
  50. },
  51. // 内部 API 密钥(供 Python 服务调用)
  52. internalApiKey: process.env.INTERNAL_API_KEY || 'internal-api-key-default',
  53. // AI 配置 - 阿里云百炼千问大模型
  54. ai: {
  55. apiKey: process.env.DASHSCOPE_API_KEY || process.env.OPENAI_API_KEY || '',
  56. baseUrl: process.env.DASHSCOPE_BASE_URL || process.env.OPENAI_BASE_URL || 'https://dashscope.aliyuncs.com/compatible-mode/v1',
  57. // 默认模型配置
  58. defaultModel: process.env.AI_DEFAULT_MODEL || 'qwen-plus',
  59. // 可用模型列表
  60. models: {
  61. // 商业版模型
  62. chat: process.env.AI_CHAT_MODEL || 'qwen-plus', // 对话模型
  63. fast: process.env.AI_FAST_MODEL || 'qwen-turbo', // 快速模型
  64. reasoning: process.env.AI_REASONING_MODEL || 'qwq-plus', // 推理模型
  65. vision: process.env.AI_VISION_MODEL || 'qwen-vl-plus', // 视觉理解模型
  66. coder: process.env.AI_CODER_MODEL || 'qwen-coder-plus', // 代码模型
  67. embedding: process.env.AI_EMBEDDING_MODEL || 'text-embedding-v3', // 嵌入模型
  68. },
  69. // 请求配置
  70. timeout: parseInt(process.env.AI_TIMEOUT || '60000', 10),
  71. maxRetries: parseInt(process.env.AI_MAX_RETRIES || '3', 10),
  72. },
  73. };