我使用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 但没有成功。
我通过将
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" ]
希望这有帮助!