This commit is contained in:
Dmitry 2026-01-05 01:34:55 +03:00
parent c51788dfae
commit 2f37c4cd52
2 changed files with 52 additions and 10 deletions

View file

@ -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"

View file

@ -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('========================================');