在接触了Next.js开发之后,我想大家通常都是部署在Vercel平台上。虽然这个平台很方便,但是也会有很多人需要将它部署在自己的服务器上。如何部署,在我的 优化 Next.js Docker 镜像:减少镜像大小的有效方法 文件中有介绍。

这里遇到的问题是Next.js在打包的时候需要生成sitemap.xml文件,这需要链接数据库操作,这也意味着你需要在打包成镜像的时候链接数据库。

平常我们通过.env文件来让程序读取参数,打包的时候没法读取.env文件,这个时候就需要docker 的命令了。

解决方法

Dockerfile 文件中加入环境参数

例如我在输出阶段的代码附近增加

# 传递构建参数
ARG DATABASE_URL

# 设置环境变量
ENV DATABASE_URL=$DATABASE_URL

使用如下命令,将数据库地址传入

docker build -t [镜像名称:latest] --build-arg DATABASE_URL=postgresql://postgres:[数据库密码]@[数据库地址]:5432/postgres --platform linux/amd64  .

这样就能在打包的时候链接数据库了

--build-arg 就是传递参数的

--platform 指定镜像的平台