Api 平台 - 生产环境构建失败:未找到 nuxt

问题描述 投票:0回答:1

我使用API平台3.2。

我正在使用 Nuxt 部署我的 API 平台应用程序,当我运行命令时:

SERVER_NAME=your-domain-name.example.com \ APP_SECRET=ChangeMe \ POSTGRES_PASSWORD=ChangeMe \ CADDY_MERCURE_JWT_SECRET=ChangeThisMercureHubJWTSecretKey \ docker compose -f compose.yaml -f compose.prod.yaml up --wait

我有以下错误:

=> ERROR [pwa builder 4/4] RUN PNPM install --frozen-lockfile --offline --prod &&  pnpm run build                                                                                                     4.9s

[pwa builder 4/4] RUN        PNPM install --frozen-lockfile --offline --prod &&      pnpm run build:

3.272 ? The modules directory at "/srv/app/node_modules" will be removed and reinstalled from scratch. Proceed? (Y/n) ‣ true

4.190 > nuxt-app@ build /srv/app

4.190 > nuxt build

4.190

4.196 sh: 1: nuxt: not found

4.199  ELIFECYCLE  Command failed.


failed to solve: process "/bin/sh -c pnpm install --frozen-lockfile --offline --prod && \tpnpm run build" did not complete successfully: exit code: 1

这是我的 pwa/Dockerfile:

#syntax=docker/dockerfile:1.4

Versions

FROM node:lts AS node_upstream

Base stage for dev and build

FROM node_upstream AS base

WORKDIR /srv/app

RUN corepack enable && 

corepack prepare --activate pnpm@latest && 

pnpm config -g set store-dir /.pnpm-store

Development image

FROM base as dev

EXPOSE 3000
ENV PORT 3000
ENV HOSTNAME localhost

CMD ["sh", "-c", "pnpm install; pnpm dev"]

FROM base AS builder

COPY --link pnpm-lock.yaml ./
RUN pnpm fetch --prod

COPY --link . .

RUN    pnpm install --frozen-lockfile --offline --prod && 

pnpm run build

Production image, copy all the files and run nuxt

FROM node_upstream AS prod

WORKDIR /srv/app

ENV NODE_ENV production

RUN addgroup --system --gid 1001 nodejs; 

adduser --system --uid 1001 nuxt

COPY --from=builder --link /srv/app/public ./public

USER nuxt

EXPOSE 3000

ENV PORT 3000
ENV HOSTNAME localhost

CMD ["node", "server.js"]

还有我的 compose.prod.yaml:

# Production environment override
services:
php:
build:
context: ./api
target: frankenphp_prod
environment:
APP_SECRET: ${APP_SECRET}
MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET}
MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET}

pwa:
build:
context: ./pwa
target: prod

database:
environment:
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}

这是我第一次在生产中部署API平台,我不知道它来自哪里......感谢您的帮助

我尝试直接在 pwa 中进行 pnpm install 但没有成功。

nuxtjs3 api-platform.com
1个回答
0
投票

我通过将

COPY --from=builder --link /srv/app/public ./public
中的
pwa/Dockerfile
行更改为
COPY --from=builder /srv/app/.output ./.output
并在
COPY --link package*.json ./
之前添加
pnpm install
解决了我的问题。我还必须将
pnpm install
RUN pnpm run build
分开,并将
COPY --link . .
放在两者之间。

最后,我将文件末尾的

CMD ["node", "server.js"]
替换为
CMD ["node", ".output/server/index.mjs" ]

这是我的最终文件:

#syntax=docker/dockerfile:1.4

# Versions
FROM node:lts AS node_upstream

# Base stage for dev and build
FROM node_upstream AS base

WORKDIR /srv/app

RUN corepack enable && \
    corepack prepare --activate pnpm@latest && \
    pnpm config -g set store-dir /.pnpm-store

# Development image
FROM base as dev

EXPOSE 3000
ENV PORT 3000
ENV HOSTNAME localhost

CMD ["sh", "-c", "pnpm install; pnpm dev"]

FROM base AS builder

COPY --link pnpm-lock.yaml ./
RUN pnpm fetch --prod

COPY --link package*.json ./

RUN pnpm install --frozen-lockfile --offline --prod

COPY --link . .
RUN pnpm run build
RUN pnpm prune

# Production image, copy all the files and run nuxt
FROM node_upstream AS prod

WORKDIR /srv/app

ENV NODE_ENV production

RUN addgroup --system --gid 1001 nodejs; \
    adduser --system --uid 1001 nuxt

COPY --from=builder /srv/app/.output ./.output

USER nuxt

EXPOSE 3000

ENV PORT 3000
ENV HOST localhost

CMD [ "node", ".output/server/index.mjs" ]

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.