nakama/backend/config/index.js

64 lines
2.0 KiB
JavaScript
Raw Normal View History

2025-11-03 20:35:01 +00:00
// Централизованная конфигурация приложения
2025-11-04 21:51:05 +00:00
// Важно: dotenv.config() должен быть вызван ДО этого файла
2025-11-03 20:35:01 +00:00
module.exports = {
// Сервер
port: process.env.PORT || 3000,
nodeEnv: process.env.NODE_ENV || 'development',
// MongoDB
mongoUri: process.env.MONGODB_URI || 'mongodb://localhost:27017/nakama',
// Redis (опционально)
redisUrl: process.env.REDIS_URL || null,
// JWT
jwtSecret: process.env.JWT_SECRET || 'nakama_secret_key_change_in_production',
// Telegram
telegramBotToken: process.env.TELEGRAM_BOT_TOKEN,
2025-11-03 22:51:17 +00:00
// Gelbooru API
gelbooruApiKey: process.env.GELBOORU_API_KEY || '638e2433d451fc02e848811acdafdce08317073c01ed78e38139115c19fe04afa367f736726514ef1337565d4c05b3cbe2c81125c424301e90d29d1f7f4cceff',
gelbooruUserId: process.env.GELBOORU_USER_ID || '1844464',
2025-11-03 20:35:01 +00:00
// Frontend URL
frontendUrl: process.env.FRONTEND_URL || 'http://localhost:5173',
// CORS
corsOrigin: process.env.CORS_ORIGIN || '*',
// Загрузка файлов
maxFileSize: parseInt(process.env.MAX_FILE_SIZE || '10485760'), // 10MB
uploadsDir: process.env.UPLOADS_DIR || 'uploads',
// Rate limiting
rateLimits: {
general: {
windowMs: 15 * 60 * 1000,
max: parseInt(process.env.RATE_LIMIT_GENERAL || '100')
},
posts: {
windowMs: 60 * 60 * 1000,
max: parseInt(process.env.RATE_LIMIT_POSTS || '10')
},
interactions: {
windowMs: 60 * 1000,
max: parseInt(process.env.RATE_LIMIT_INTERACTIONS || '20')
}
},
// Cache TTL (seconds)
cacheTTL: {
posts: parseInt(process.env.CACHE_TTL_POSTS || '300'), // 5 мин
users: parseInt(process.env.CACHE_TTL_USERS || '600'), // 10 мин
search: parseInt(process.env.CACHE_TTL_SEARCH || '180') // 3 мин
},
// Проверки
isDevelopment: () => process.env.NODE_ENV === 'development',
isProduction: () => process.env.NODE_ENV === 'production',
isTest: () => process.env.NODE_ENV === 'test'
};