我最近构建了一个Nextjs应用程序,我在Google Cloud Run上托管它。
我的应用程序从getStaticProps()
方法向外部API发出一些请求。
我希望能够根据环境(例如prod或dev(使用环境变量来指向不同的API主机,这些环境变量将针对每个环境进行不同的设置。
我知道我可以将这些变量存储在特定于环境的文件中,如.env.development
和.env.production
,但我希望能够将这些环境变量存储在云运行服务的谷歌云控制台的环境变量字段中,并完全跳过将它们存储在文件中。
我已经尝试将变量添加到Cloud Run中,但它不起作用。我还尝试在变量前面加NEXT_PUBLIC_。。。运气不好。
有人对如何做到这一点有什么建议吗?
好的。。。我想我现在已经想通了。我使用Cloud Builds构建容器,容器在运行npm run start
之前先运行npm run build
。
我假设我的Cloud Run变量在Cloud Build构建项目时不可用。
所以,我认为我的解决方案是尝试在构建时注入变量,使用替换变量。
编辑:已确认。如果我在开发模式下启动Nextjs,以便在服务器上为每个请求呈现页面,那么将使用Cloud Run环境变量。为了构建用于生产的Nextjs应用程序,我在Cloud build 构建的Dockerfile中包含了环境变量
EDIT:根据请求,一个dockerfile设置环境变量的示例:
FROM node:16.13-alpine
RUN mkdir -p /usr/src
WORKDIR /usr/src
COPY . /usr/src
ENV NEXT_PUBLIC_MY_API_HOST='https://some.host.com'
RUN npm install -only=production
RUN npm run build
EXPOSE 3000
CMD npm run start
然后,您可以使用process.env.NEXT_PUBLIC_MY_API_HOST
从代码中引用环境变量