From 2f37c4cd52e8096875fe067dc2d73a70d3f918b9 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Mon, 5 Jan 2026 01:34:55 +0300 Subject: [PATCH] logs --- backend/Dockerfile | 3 ++- backend/src/main.ts | 59 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 123a928..e9cbc65 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -22,4 +22,5 @@ ENV NODE_ENV=production ENV NODE_NO_WARNINGS=1 # Явно выводим логи в stdout/stderr без буферизации -CMD sh -c "echo '========================================' && echo '=== STARTING BACKEND ===' && echo '========================================' && npx prisma migrate deploy && echo '=== MIGRATIONS COMPLETED ===' && exec node --no-warnings dist/main" +# Используем unbuffered mode для Python-style вывода (если доступно) +CMD sh -c "echo '========================================' 1>&2 && echo '=== DOCKER CMD STARTED ===' 1>&2 && echo '========================================' 1>&2 && echo 'Running migrations...' 1>&2 && npx prisma migrate deploy 2>&1 && echo '=== MIGRATIONS COMPLETED ===' 1>&2 && echo 'Starting Node.js application...' 1>&2 && exec node --no-warnings dist/main 2>&1" diff --git a/backend/src/main.ts b/backend/src/main.ts index d1165d2..97f5e11 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -3,16 +3,54 @@ import { ValidationPipe } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { AppModule } from './app.module'; -async function bootstrap() { - // Принудительно выводим в stdout и stderr для Docker/Coolify - const log = (message: string) => { - console.log(message); - console.error(`[LOG] ${message}`); // Дублируем в stderr для надежности - }; +// Логируем ДО инициализации NestJS, чтобы видеть, что процесс запустился +console.log('========================================'); +console.log('=== BACKEND PROCESS STARTED ==='); +console.log('========================================'); +console.log(`Node version: ${process.version}`); +console.log(`Process PID: ${process.pid}`); +console.log(`Working directory: ${process.cwd()}`); - log('========================================'); - log('=== BACKEND STARTING ==='); - log('========================================'); +// Принудительно выводим в stdout и stderr для Docker/Coolify +const log = (message: string) => { + const timestamp = new Date().toISOString(); + const logMessage = `[${timestamp}] ${message}`; + console.log(logMessage); + console.error(logMessage); // Дублируем в stderr для надежности + // Также пишем напрямую в stderr + process.stderr.write(logMessage + '\n'); +}; + +log('========================================'); +log('=== BACKEND BOOTSTRAP STARTING ==='); +log('========================================'); + +// Логируем переменные окружения ДО создания приложения +log('Environment variables check:'); +log(` DATABASE_URL: ${process.env.DATABASE_URL ? 'SET (length: ' + process.env.DATABASE_URL.length + ')' : 'NOT SET'}`); +log(` JWT_SECRET: ${process.env.JWT_SECRET ? 'SET (length: ' + process.env.JWT_SECRET.length + ')' : 'NOT SET'}`); +log(` PORT: ${process.env.PORT || 'NOT SET (default: 3000)'}`); +log(` HOST: ${process.env.HOST || 'NOT SET (default: 0.0.0.0)'}`); +log(` CORS_ORIGIN: ${process.env.CORS_ORIGIN || 'NOT SET (default: http://localhost:5173)'}`); + +// Проверяем и исправляем формат DATABASE_URL +if (process.env.DATABASE_URL) { + let dbUrl = process.env.DATABASE_URL; + if (dbUrl.startsWith('postgres://')) { + log('⚠️ WARNING: DATABASE_URL uses postgres:// instead of postgresql://'); + log(' Converting to postgresql:// format for Prisma...'); + // Заменяем postgres:// на postgresql:// + dbUrl = dbUrl.replace('postgres://', 'postgresql://'); + process.env.DATABASE_URL = dbUrl; + log('✓ DATABASE_URL converted to postgresql:// format'); + } else if (dbUrl.startsWith('postgresql://')) { + log('✓ DATABASE_URL format is correct (postgresql://)'); + } else { + log('⚠️ WARNING: DATABASE_URL format is unusual'); + } +} + +async function bootstrap() { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); @@ -77,6 +115,9 @@ async function bootstrap() { try { log(`Attempting to start server on ${host}:${port}...`); + log('Creating NestJS application instance...'); + + log('Starting HTTP server...'); await app.listen(port, host); log('========================================');