nakama/backend/utils/minioDebug.js

112 lines
3.8 KiB
JavaScript
Raw Permalink Normal View History

2025-11-21 01:14:56 +00:00
/**
* Утилита для отладки MinIO
*/
const config = require('../config');
const { log } = require('../middleware/logger');
/**
* Вывести информацию о MinIO конфигурации
*/
function printMinioConfig() {
log('info', '🗄️ MinIO Configuration:', {
enabled: config.minio.enabled,
endpoint: config.minio.endpoint,
port: config.minio.port,
useSSL: config.minio.useSSL,
bucket: config.minio.bucket,
region: config.minio.region,
publicUrl: config.minio.publicUrl || '(auto)',
publicBucket: config.minio.publicBucket
});
// Показать пример URL
const protocol = config.minio.useSSL ? 'https' : 'http';
const port = config.minio.port === 80 || config.minio.port === 443 ? '' : `:${config.minio.port}`;
const exampleUrl = `${protocol}://${config.minio.endpoint}${port}/${config.minio.bucket}/posts/example-123456789.jpg`;
log('info', '📸 Пример URL файла:', { url: exampleUrl });
// Проверки
const warnings = [];
if (config.minio.port === 9001 || config.minio.port === 9901) {
warnings.push('⚠️ ПОРТ 9001/9901 - это консоль MinIO! Используйте порт 9000 для API');
}
if (!config.minio.publicBucket) {
warnings.push('⚠️ Bucket не публичный! Установите MINIO_PUBLIC_BUCKET=true или настройте политику доступа');
}
if (config.minio.accessKey === 'minioadmin') {
warnings.push('⚠️ Используются дефолтные credentials! Создайте Service Account в MinIO Console');
}
if (warnings.length > 0) {
warnings.forEach(warning => log('warn', warning));
} else {
log('info', '✅ Конфигурация выглядит правильно');
}
}
/**
* Тестовая функция для проверки доступности URL
*/
async function testImageUrl(imageUrl) {
try {
const https = require('https');
const http = require('http');
const url = require('url');
const parsedUrl = url.parse(imageUrl);
const client = parsedUrl.protocol === 'https:' ? https : http;
return new Promise((resolve, reject) => {
client.get(imageUrl, (res) => {
log('info', 'Проверка URL:', {
url: imageUrl,
statusCode: res.statusCode,
contentType: res.headers['content-type'],
contentLength: res.headers['content-length']
});
if (res.statusCode === 200) {
resolve(true);
} else if (res.statusCode === 403) {
log('error', '❌ 403 Forbidden - Bucket не публичный или нет прав доступа');
resolve(false);
} else if (res.statusCode === 404) {
log('error', '❌ 404 Not Found - Файл не существует');
resolve(false);
} else {
log('warn', `⚠️ Неожиданный статус: ${res.statusCode}`);
resolve(false);
}
}).on('error', (err) => {
log('error', '❌ Ошибка подключения к MinIO:', {
error: err.message,
code: err.code
});
if (err.code === 'ECONNREFUSED') {
log('error', '💡 MinIO недоступен. Проверьте:');
log('error', ' 1. MinIO запущен?');
log('error', ' 2. Порт правильный? (9000 для API, не 9001/9901)');
log('error', ' 3. Firewall разрешает подключение?');
}
reject(err);
});
});
} catch (error) {
log('error', 'Ошибка тестирования URL:', { error: error.message });
return false;
}
}
module.exports = {
printMinioConfig,
testImageUrl
};