gpt4 book ai didi

docker - 在 Next.js 应用程序上获取环境变量 Kubernetes

转载 作者:行者123 更新时间:2023-12-04 17:25:55 28 4
gpt4 key购买 nike

我一直在阅读有关让 K8s 环境变量在 Next.js 应用程序中工作的其他问题,但直到现在还没有被接受的答案。
我的应用程序使用 .env.local 运行良好,但在部署到 K8s 时出现错误(未定义)。
这是我的 next.config.js

module.exports = {
env: {
NEXT_PUBLIC_API_BASE_URL: process.env.NEXT_PUBLIC_API_BASE_URL,
},
};
K8s环境:
k8s environment
任何人都可以帮助我让环境 var 在我的 next.js 应用程序上工作吗?
现在我做了一个简单的技巧,即在 dockerfile 上添加 ARG 和 ENV,然后在构建 docker 镜像时注入(inject)它
Dockerfile:
ARG NEXT_PUBLIC_API_BASE_URL
ENV NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL}

最佳答案

您应该添加 ENV_VARS.env.local文件。以 configMap 的形式. ( https://nextjs.org/docs/basic-features/environment-variables )
在 Kubernetes 中,您创建一个 configMap像这样:

apiVersion: v1
name: env-local
data:
.env: |-
NEXT_PUBLIC_API_URL=http:/your.domain.com/api
API_URL=http://another.endpoint.com/serverSide
kind: ConfigMap
然后你挂载 configMap作为 FILE 到您的部署中,然后它可以在 app/.env.local 获得:

apiVersion: apps/v1
kind: Deployment
spec:
replicas: 1
selector:
matchLabels:
app: your-app
template:
metadata:
labels:
app: your-app
spec:
containers:
- image: your/image:latest
imagePullPolicy: Always
name: your-app
ports:
volumeMounts:
- mountPath: /app/.env.local
name: env-local
readOnly: true
subPath: .env.local
volumes:
- configMap:
defaultMode: 420
items:
- key: .env
path: .env.local
name: env-local
name: env-local


什么也有效 - 至少对我来说 - 对于 服务器端变量 只是在我的 deployment 中将它们添加为常规环境变量: https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/#define-an-environment-variable-for-a-container
apiVersion: v1
kind: Pod
metadata:
name: your-app
labels:
purpose: demonstrate-envars
spec:
containers:
- name: your-app-container
image: gcr.io/google-samples/node-hello:1.0
env:
- name: DEMO_GREETING
value: "Hello from the environment"
- name: DEMO_FAREWELL
value: "Such a sweet sorrow"

const withSvgr = require('next-svgr');

module.exports = {
// Will only be available on the server side
serverRuntimeConfig: {
API_URL: process.env.API_URL,
},
// Will be available on both server and client
publicRuntimeConfig: {
NEXT_PUBLIC_API_URL: process.env.API_URL,
},
};

关于docker - 在 Next.js 应用程序上获取环境变量 Kubernetes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63351072/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com