nakama/backend/config/index.js

96 lines
3.8 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',
2025-11-10 21:56:36 +00:00
jwt: {
accessSecret: process.env.JWT_ACCESS_SECRET || process.env.JWT_SECRET || 'nakama_access_secret_change_me',
refreshSecret: process.env.JWT_REFRESH_SECRET || process.env.JWT_SECRET || 'nakama_refresh_secret_change_me',
accessExpiresIn: parseInt(process.env.JWT_ACCESS_EXPIRES_IN || '300', 10), // 5 минут
refreshExpiresIn: parseInt(process.env.JWT_REFRESH_EXPIRES_IN || '604800', 10), // 7 дней
accessCookieName: process.env.JWT_ACCESS_COOKIE_NAME || 'nakama_access_token',
refreshCookieName: process.env.JWT_REFRESH_COOKIE_NAME || 'nakama_refresh_token'
},
2025-11-03 20:35:01 +00:00
// Telegram
telegramBotToken: process.env.TELEGRAM_BOT_TOKEN,
2025-11-10 20:13:22 +00:00
moderationBotToken: process.env.MODERATION_BOT_TOKEN || process.env.SERVER_MONITOR_BOT_TOKEN || '7604181694:AAGmnpWtR2rknbZreWNoU3PtVWMFJdlwVmc',
moderationOwnerUsernames: (process.env.MODERATION_OWNER_USERNAMES || 'glpshchn00')
.split(',')
.map((name) => name.trim().toLowerCase())
.filter(Boolean),
moderationChannelUsername: process.env.MODERATION_CHANNEL_USERNAME || '@reichenbfurry',
2025-11-03 20:35:01 +00:00
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-21 01:28:48 +00:00
// e621 API
e621Username: process.env.E621_USERNAME || 'glpshchn00',
2025-12-01 01:26:34 +00:00
e621ApiKey: process.env.E621_API_KEY || 'MWYMw57r2Gu6Yxvw1YvepNvZ',
2025-11-21 01:28:48 +00:00
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 мин
},
2025-11-20 22:07:37 +00:00
// MinIO Configuration
minio: {
enabled: process.env.MINIO_ENABLED === 'true',
endpoint: process.env.MINIO_ENDPOINT || '103.80.87.247',
port: parseInt(process.env.MINIO_PORT || '9000', 10),
useSSL: process.env.MINIO_USE_SSL === 'true',
accessKey: process.env.MINIO_ACCESS_KEY || 'minioadmin',
secretKey: process.env.MINIO_SECRET_KEY || 'minioadmin',
bucket: process.env.MINIO_BUCKET || 'nakama-media',
region: process.env.MINIO_REGION || 'us-east-1',
publicUrl: process.env.MINIO_PUBLIC_URL || '', // Кастомный URL (CDN)
publicBucket: process.env.MINIO_PUBLIC_BUCKET === 'true'
},
2025-11-03 20:35:01 +00:00
// Проверки
isDevelopment: () => process.env.NODE_ENV === 'development',
isProduction: () => process.env.NODE_ENV === 'production',
isTest: () => process.env.NODE_ENV === 'test'
};