537yaha před 5 měsíci
rodič
revize
3cf250911f
2 změnil soubory, kde provedl 69 přidání a 5 odebrání
  1. 4 5
      frontend/Dockerfile
  2. 65 0
      frontend/next.config.mjs

+ 4 - 5
frontend/Dockerfile

@@ -38,12 +38,11 @@ ENV NODE_ENV=production
 # 复制 package 文件(用于安装生产依赖)
 COPY package*.json ./
 
-# 安装生产依赖 + TypeScript(next start 加载 next.config.ts 需要 TS,必须在构建时装好,避免运行时安装)
-RUN npm ci --only=production && npm install typescript --no-save && npm cache clean --force
+# 只安装生产依赖;生产阶段仅使用 next.config.mjs,不复制 .ts,避免 next start 触发任何 npm install
+RUN npm ci --only=production && npm cache clean --force
 
-# 从构建阶段复制必要的文件
-COPY --from=builder /app/next.config.ts ./
-COPY --from=builder /app/tsconfig.json ./
+# 从构建阶段复制必要的文件(仅 .mjs 配置,Next 不会加载 .ts 故不会尝试安装 TypeScript)
+COPY --from=builder /app/next.config.mjs ./
 COPY --from=builder /app/public ./public
 COPY --from=builder /app/.next ./.next
 

+ 65 - 0
frontend/next.config.mjs

@@ -0,0 +1,65 @@
+/**
+ * 生产用 Next 配置(纯 JS,运行时无需 TypeScript)
+ * 与 next.config.ts 逻辑一致,供 Docker 生产镜像使用,避免 next start 触发 npm install
+ */
+
+const backendPort = process.env.NEXT_PUBLIC_BACKEND_PORT || "8080";
+const backendHost = process.env.NEXT_PUBLIC_BACKEND_HOST || "localhost";
+
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+  eslint: {
+    ignoreDuringBuilds: true,
+  },
+  async rewrites() {
+    if (process.env.NODE_ENV === "development") {
+      return [
+        {
+          source: "/agent/profile/:path*",
+          destination: `http://${backendHost}:${backendPort}/agent/profile/:path*`,
+        },
+        {
+          source: "/agent/avatar/:path*",
+          destination: `http://${backendHost}:${backendPort}/agent/avatar/:path*`,
+        },
+        {
+          source: "/agent/embedding-config",
+          destination: `http://${backendHost}:${backendPort}/agent/embedding-config`,
+        },
+        {
+          source: "/agent/ai-config/:path*",
+          destination: `http://${backendHost}:${backendPort}/agent/ai-config/:path*`,
+        },
+        {
+          source: "/:path((?!_next|agent|chat|favicon.ico).*)",
+          destination: `http://${backendHost}:${backendPort}/:path*`,
+        },
+      ];
+    }
+    return [];
+  },
+  images: {
+    remotePatterns: [
+      {
+        protocol: "http",
+        hostname: "192.168.124.9",
+        port: backendPort,
+        pathname: "/uploads/**",
+      },
+      {
+        protocol: "http",
+        hostname: "localhost",
+        port: backendPort,
+        pathname: "/uploads/**",
+      },
+      {
+        protocol: "http",
+        hostname: "127.0.0.1",
+        port: backendPort,
+        pathname: "/uploads/**",
+      },
+    ],
+  },
+};
+
+export default nextConfig;