【发布时间】:2020-12-28 19:38:48
【问题描述】:
我不确定情况是否已经改变,但似乎我被我正在使用的版本卡住了。
以前,在 Angular 7 中,我们能够在根级别为 Angular Universal 生成服务器文件,因此我们可以在应用程序 yaml 中拥有 node main.js,而 Google App Engine 刚刚找到了运行我们的 Web 应用程序的方法。对于 Angular 9 来说,这似乎不再可能。
我们正在为我们的生产网站使用 Angular SSR。它编译 /dist-server 文件夹中的所有服务器文件。有一个 docker 文件可以将其部署在 Google App Engine 上:
FROM node:12-alpine as buildContainer
WORKDIR /app
COPY ./package.json ./package-lock.json /app/
RUN npm install
COPY . /app
RUN npm run build:ssr // This will create dist/ and dist-server/ folders in the docker
FROM node:12-alpine
WORKDIR /app
COPY --from=buildContainer /app/package.json /app
COPY --from=buildContainer /app/dist /app/dist
COPY --from=buildContainer /app/dist-server /app/dist-server
EXPOSE 4000
CMD ["npm", "run", "serve:ssr"]
在package.json 我们有:
"serve:ssr": "node dist-server/main.js",
为了开始部署,我们在终端中输入gcloud app deploy,这个过程一切正常。主要问题是这需要将近 25 分钟才能完成。耗时部分的主要瓶颈是编译。
我认为我们可以在本地开发机器上编译 repo,只复制 dist/ 和 dist-server 文件夹到 docker 并添加 node dist-server/main.js 以在 docker 文件中运行我们的 Web 应用程序。每当我尝试仅复制 dist 和 dist-server 文件夹时。我收到以下错误消息:
复制失败:stat /var/lib/docker/tmp/docker-builder{random numbers}/dist:没有这样的文件或目录
我还尝试编译main.js,它是与app.yaml 处于同一级别的angular 通用的主服务器文件。我假设这是根据 Google App Engine Node JS 部署规则所必需的,因为有一个来自 Google 的示例 repo。我无法将我们的 main.js 文件编译到根文件夹中,它给出以下错误消息:
发生未处理的异常:输出路径不得为项目根目录!
所以我正在寻找一种不需要 Google App Engine 重建我们的 repo 的解决方案(因为我们可以在我们的开发机器中执行此操作并上传已编译的文件以节省时间)以加快部署过程.
感谢您的帮助
【问题讨论】:
-
似乎要使用本地编译的文件部署您的解决方案,您需要知道 COPY dist 和 dist-server 失败的原因,请尝试编辑您的问题以添加更多信息。此外,在特定级别拥有 Angular Universal 的主服务器文件的限制不一定适用于 Cloud Run。您是否考虑过在那里部署您的应用程序?
-
您好,感谢您的评论。我发现 dockerignore 文件中有 dist 和 dist-server 文件夹。我已经删除了这些条目。我能够在谷歌应用引擎上编译和部署 docker 文件。
标签: node.js angular docker google-app-engine server-side-rendering