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',
|
|
|
|
|
e621ApiKey: process.env.E621_API_KEY || 'cW2SYnKFJgbViqd6gpC3xu9t',
|
|
|
|
|
|
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'
|
|
|
|
|
};
|
|
|
|
|
|