Lor*_*ord 29 node.js docker kubernetes prisma
我正在使用 prisma、postgres、docker、kubernets。
\nnpx prisma 迁移开发工作正常。
\n和npx prisma 生成产生以下输出:
\n\xe2\x9c\x94 Generated Prisma Client (2.23.0) to ./node_modules/@prisma/client in 68ms\nYou can now start using Prisma Client in your code. Reference: https://pris.ly/d/client\n\nimport { PrismaClient } from '@prisma/client'\nconst prisma = new PrismaClient()\nRun Code Online (Sandbox Code Playgroud)\n但是当我尝试在我的路线文件中使用时产生错误:
\n新路由.ts
\nimport { PrismaClient } from '@prisma/client';\n\nconst prisma = new PrismaClient();\nRun Code Online (Sandbox Code Playgroud)\n我的泊坞窗文件:
\nFROM node:alpine\n\nWORKDIR /app\nCOPY package.json .\nRUN npm install --only=prod\nCOPY . .\n\nCMD ["npm", "start"]\nRun Code Online (Sandbox Code Playgroud)\n
Cal*_*Gee 13
我知道这已被标记为已解决,但我只是想与感兴趣的人分享我的设置。
Dockerfile
# Build image
FROM node:16.13-alpine as builder
WORKDIR /app
# Not sure if you will need this
# RUN apk add --update openssl
COPY package*.json ./
RUN npm ci --quiet
COPY ./prisma prisma
COPY ./src src
RUN npm run build
# Production image
FROM node:16.13-alpine
WORKDIR /app
ENV NODE_ENV production
COPY package*.json ./
RUN npm ci --only=production --quiet
COPY --chown=node:node --from=builder /app/prisma /app/prisma
COPY --chown=node:node --from=builder /app/src /app/src
USER node
EXPOSE 8080
CMD ["node", "src/index.js"]
Run Code Online (Sandbox Code Playgroud)
包.json
{
"name": "example",
"description": "",
"version": "0.1.0",
"scripts": {
"generate": "npx prisma generate",
"deploy": "npx prisma migrate deploy",
"dev": "npm run generate && nodemon --watch \"src/**\" --ext \"js,json\" --exec \"node src/index.js\"",
"build": "npm run generate",
"start": "npm run build && node build/index.js"
},
"prisma": {
"schema": "prisma/schema.prisma"
},
"dependencies": {
"@prisma/client": "^3.6.0"
},
"devDependencies": {
"@tsconfig/node16": "^1.0.2",
"@types/node": "^16.11.12",
"nodemon": "^2.0.15",
"prisma": "^3.6.0"
}
}
Run Code Online (Sandbox Code Playgroud)
我在 Kubernetes 中运行这个。为了使数据库和迁移顺利进行,我运行了一个运行prisma migrate deploy.
apiVersion: apps/v1
kind: Deployment
metadata:
name: EXAMPLE
spec:
replicas: 1
selector:
matchLabels:
app: EXAMPLE
strategy:
rollingUpdate:
maxSurge: 100%
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: EXAMPLE
spec:
containers:
image: DOCKER_IMAGE
imagePullPolicy: IfNotPresent
name: SERVICE_NAME
ports:
- containerPort: 8080
name: http
protocol: TCP
initContainers:
- command:
- npm
- run
- deploy
image: DOCKER_IMAGE
imagePullPolicy: IfNotPresent
name: database-migrate-deploy
Run Code Online (Sandbox Code Playgroud)
(这是一个实时服务,我刚刚复制并删除了所有非必要的内容)
我希望这对某人有用
小智 10
我在开发时通常不会使用 docker 来实现此目的,但每次我更改某些内容schema.prisma并且必须使用npx prisma generate. 对我来说,解决方案是重新启动npm start再次运行的节点应用程序。也许如果你重新启动容器它可能会起作用。
如果您位于 kubernets pod 内部,则使用终端访问 pod,然后给出生成命令
kubectl exec -it pod_name sh
npx prisma generate
Run Code Online (Sandbox Code Playgroud)
小智 7
您忘记复制prisma目录,因为生成 Prisma 客户端需要该schema.prisma文件。您应该复制整个 prisma 目录,以防您还需要迁移。
您的最终 Dockerfile 应包含以下内容:
WORKDIR /app
COPY package*.json .
COPY prisma ./prisma/
RUN npm install --only=prod
Run Code Online (Sandbox Code Playgroud)
这是解决这个问题的另一种方法。
由于.prismaprisma 客户端需要该文件夹,如下图或文档所示,另一种方法是确保它与您的代码一起提供。您可以按如下方式执行此操作。
您可能认为只需将 .prisma 文件夹的例外规则添加到您的图像中即可将生成的文件包含在图像中.dockerignore(注意感叹号)
node_modules/
!nodes_modules/.prisma
Run Code Online (Sandbox Code Playgroud)
但 prisma 使用的查询引擎对于每个操作系统都是不同的,因此您可能会遇到麻烦。
只需RUN npx prisma generate在构建命令之前添加到 Dockerfile 中即可。这样,文件就会在映像创建过程中生成,您不必prisma generate在每个容器上运行该命令。这种方法的缺点是你的docker镜像会更大。如果这是一个问题,您可以尝试其他答案。
| 归档时间: |
|
| 查看次数: |
58102 次 |
| 最近记录: |