E5K7's picture
Final Fix: Robust Docker Multi-Stage and Dynamic Port for Hugging Face
0dcd9f7
import dotenv from 'dotenv';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// In monorepos, we often want to load from the root .env
dotenv.config({ path: path.join(__dirname, '../../../../.env') });
// Fallback if running from a different context
dotenv.config();
interface EnvConfig {
NODE_ENV: string;
PORT: number;
CLIENT_URL: string;
GLM_API_KEY: string;
GLM_BASE_URL: string;
GLM_MODEL: string;
GITHUB_TOKEN: string;
REDIS_URL: string;
LOG_LEVEL: string;
}
function required(key: string): string {
const value = process.env[key];
if (!value && process.env.NODE_ENV === 'production') {
// Suppress crash to allow the ide to boot without AI features
// throw new Error(`Missing required environment variable: ${key}`);
return '';
}
return (value || '').trim();
}
export const config: EnvConfig = {
NODE_ENV: (process.env.NODE_ENV || 'development').trim(),
PORT: parseInt(process.env.PORT || '7860', 10),
CLIENT_URL: (process.env.NODE_ENV === 'production' ? '*' : (process.env.CLIENT_URL || 'http://localhost:5173')).trim(),
GLM_API_KEY: required('GLM_API_KEY'),
GLM_BASE_URL: (process.env.GLM_BASE_URL || 'https://open.bigmodel.cn/api/paas/v4/').trim(),
GLM_MODEL: (process.env.GLM_MODEL || 'glm-5').trim(),
GITHUB_TOKEN: (process.env.GITHUB_TOKEN || '').trim(),
REDIS_URL: (process.env.REDIS_URL || 'redis://localhost:6379').trim(),
LOG_LEVEL: (process.env.LOG_LEVEL || 'debug').trim(),
};