从源码构建#

在本节中,我们将介绍如何从源码开始构建3DAC Web应用。我们提供两种方式构建Web应用:开发模式生产模式。如果要在不修改功能的情况下部署应用,建议使用生产模式。否则,请在开发模式下构建应用。

Note

本教程仅提供Web应用构建说明。要启动完整的3DAC系统,还需要部署中间件和后端服务,如orchestrator、web后端。我们建议使用docker compose启动所有服务,详细内容请查看这里

开发构建#

安装依赖#

Web应用的源码文件位于app目录。package.json包含构建应用所需的依赖项,可以使用Node Package Manager(npm)或其高性能替代pnpm进行安装。nvm的安装说明请参见这里。应用使用Node.js 18.18构建。正确配置Node.js后,安装pnpm

npm install -g pnpm

然后,安装所需的依赖:

# 确保当前工作目录为项目根目录
cd dlp3d.ai

# 使用package.json中的配置安装依赖
pnpm install

设置SSL证书#

为什么需要HTTPS?#

Web应用需要使用您设备的麦克风。出于安全考虑,现代浏览器只允许在安全上下文中访问设备硬件,例如麦克风和摄像头。

地址类型 示例 允许访问
本机地址 (HTTP) http://localhosthttp://127.0.0.1 ✅ 开发环境例外
局域网IP (HTTP) http://192.168.x.x ❌ 非安全上下文
局域网IP (HTTPS) https://192.168.x.x ✅ 需要信任自签名证书
公共 HTTPS 域名 https://example.com ✅ 需要有效证书

生成证书#

确保已安装openssl。然后,执行以下命令:

# 确保当前工作目录为项目根目录
cd dlp3d.ai

# 创建证书目录
mkdir ssl

# 使用 openssl 生成证书
openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout ssl/key.pem \
  -out ssl/cert.pem \
  -days 365

# 按照提示完成证书生成

生成的证书将组织如下:

dlp3d.ai/ssl/
├── cert.pem  ← 证书文件
└── key.pem   ← 私钥文件

运行Web应用#

如果您在同一设备上部署和测试应用(即localhost),则不需要SSL证书。但是,如果您在一台设备上部署应用并在其他设备上测试(局域网IP),则需要SSL证书。

本机地址#

pnpm run dev

要创建Web应用窗口,请打开浏览器并访问https://127.0.0.1:3000

局域网#

pnpm run dev_ws

要创建Web应用窗口,请打开浏览器并访问https://${YOUR_IP_ADDRESS}。首次访问时,浏览器可能会提示连接不安全。这是因为我们使用的是自签名证书。要绕过此问题,请点击Advanced按钮,然后点击Proceed to 127.0.0.1 (unsafe)

不安全连接错误

一旦被信任,站点将被浏览器视为”安全上下文”。

生产构建#

对于生产构建,Web应用会被编译成静态网页。您可以通过CLI或使用docker镜像构建应用。

命令行构建#

要通过命令行构建项目:

# 确保当前工作目录为项目根目录
cd dlp3d.ai

# 构建网页
pnpm run build

构建输出将存储在.next目录中。要部署网页:

pnpm start

网页将在http://localhost:3000提供服务。

GitHub Pages 静态导出#

GitHub Pages 部署是一种额外的静态导出模式,不会替代上面的命令行或 Docker 部署方式。

Pages workflow 位于 .github/workflows/pages.yml,仅在推送 tag、发布 GitHub Release 或手动执行 workflow_dispatch 时运行。普通 main 分支 push 不会自动发布站点。

workflow 使用以下环境变量构建:

DEPLOY_TARGET=github-pages
NEXT_PUBLIC_SITE_BASE_PATH=/dlp3d.ai
NEXT_PUBLIC_ORCHESTRATOR_HOST=u1-api.sensenova.cn
NEXT_PUBLIC_ORCHESTRATOR_PORT=443
NEXT_PUBLIC_ORCHESTRATOR_PATH_PREFIX=/dlp3d-ai/orchestrator
NEXT_PUBLIC_BACKEND_HOST=u1-api.sensenova.cn
NEXT_PUBLIC_BACKEND_PORT=443
NEXT_PUBLIC_BACKEND_PATH_PREFIX=/dlp3d-ai/backend

NEXT_PUBLIC_SITE_BASE_PATH 用于配置 GitHub Pages 项目路径。当前维护的托管站点 https://dlp3d-ai.github.io/dlp3d.ai/ 使用 /dlp3d.ai;只有在明确部署到根域名时才应使用空值。

静态导出不支持 Next.js API routes。Pages workflow 会在构建前临时禁用 app/api/LLM。Docker 和命令行 standalone 构建仍会保留该 API route。

Docker构建#

要通过docker生成生产构建:

# 确保当前工作目录为项目根目录
cd dlp3d.ai

# 构建 docker 镜像并添加标签
docker build -f ./dockerfiles/web/Dockerfile . -t dlp3d_web:dev

这将自动构建一个标记为dlp3d_web:dev的docker镜像。要启动docker镜像:

docker run dlp3d_web:dev -p 3000:3000

网页将在http://localhost:3000提供服务。