- FastAPI backend with SQLModel, Alembic migrations, AgentScope agents - Next.js 15 frontend with React 19, Tailwind, Zustand, React Flow - Multi-provider AI system (DashScope, Kling, MiniMax, Volcengine, OpenAI, etc.) - All HTTP clients migrated from sync requests to async httpx - Admin-managed API keys via environment variables - SSRF vulnerability fixed in ensure_url()
89 lines
2.7 KiB
JavaScript
89 lines
2.7 KiB
JavaScript
/** @type {import('next').NextConfig} */
|
||
// 服务端 rewrites 转发目标;浏览器端 Base 由 NEXT_PUBLIC_API_URL 控制(见 src/lib/client.ts)
|
||
const API_URL = process.env.API_URL || 'http://localhost:8000';
|
||
|
||
const nextConfig = {
|
||
output: 'standalone',
|
||
experimental: {
|
||
optimizePackageImports: [
|
||
'@lobehub/icons',
|
||
'lucide-react',
|
||
'framer-motion',
|
||
'@radix-ui/react-dialog',
|
||
'@radix-ui/react-dropdown-menu',
|
||
'@radix-ui/react-select',
|
||
'@radix-ui/react-tabs',
|
||
],
|
||
// Increase proxy timeout for long-running AI operations
|
||
proxyTimeout: 300000, // 5 minutes
|
||
},
|
||
// Server response timeout
|
||
serverExternalPackages: [],
|
||
images: {
|
||
// 本地开发环境下关闭 Next 图片优化,避免在受限网络环境中请求 OSS 导致 _next/image 500
|
||
unoptimized: process.env.NODE_ENV === 'development',
|
||
dangerouslyAllowSVG: true,
|
||
contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;",
|
||
remotePatterns: [
|
||
{
|
||
protocol: 'https',
|
||
hostname: '**.aliyuncs.com',
|
||
},
|
||
{
|
||
protocol: 'http',
|
||
hostname: '**.aliyuncs.com',
|
||
},
|
||
{
|
||
protocol: 'http',
|
||
hostname: 'localhost',
|
||
},
|
||
{
|
||
protocol: 'https',
|
||
hostname: 'api.dicebear.com',
|
||
}
|
||
]
|
||
},
|
||
async rewrites() {
|
||
return [
|
||
{
|
||
source: '/api/:path*',
|
||
destination: `${API_URL}/api/:path*`,
|
||
},
|
||
{
|
||
source: '/files/:path*',
|
||
destination: `${API_URL}/files/:path*`,
|
||
},
|
||
{
|
||
source: '/uploads/:path*',
|
||
destination: `${API_URL}/uploads/:path*`,
|
||
},
|
||
{
|
||
source: '/config/:path*',
|
||
destination: `${API_URL}/config/:path*`,
|
||
},
|
||
{
|
||
source: '/projects/:path*',
|
||
destination: `${API_URL}/projects/:path*`,
|
||
},
|
||
{
|
||
source: '/generations/:path*',
|
||
destination: `${API_URL}/generations/:path*`,
|
||
},
|
||
{
|
||
source: '/storage/:path*',
|
||
destination: `${API_URL}/storage/:path*`,
|
||
},
|
||
{
|
||
source: '/chat/:path*',
|
||
destination: `${API_URL}/chat/:path*`,
|
||
},
|
||
{
|
||
source: '/health',
|
||
destination: `${API_URL}/health`,
|
||
}
|
||
];
|
||
},
|
||
};
|
||
|
||
export default nextConfig;
|