我正在尝试通过terraform将容器化的nextJS应用程序部署到Heroku。
我可以使用以下容器成功部署而无需:
provider "heroku" {
email = var.HEROKU_EMAIL
}
resource "heroku_app" "app" {
name = var.app_name
region = "eu"
}
resource "heroku_build" "nextjs" {
app = heroku_app.app.id
buildpacks = ["https://github.com/heroku/heroku-buildpack-nodejs"]
source = {
path = "./app"
}
}
resource "heroku_formation" "app" {
app = heroku_app.app.id
type= "web"
quantity = 1
size = "Free"
depends_on = [heroku_app.app]
}
看着terraform documentation,似乎可以使用以下命令将Heroku堆栈设置为container
:
resource "heroku_app" "app" {
name = var.app_name
region = "eu"
stack = "container"
}
并且我创建了一个简单的heroku.yml
:
build:
docker:
web: Dockerfile
run:
web: npm build && npm start
目前还不清楚heroku_build
中的“源”应该是什么,目前我正在获取:
Error: error retrieving formation: Get https://api.heroku.com/apps/<app-name>/formation/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx: Couldn't find that app.
This github issue公开了一个相关问题,但对我的理解没有太大帮助
答案 0 :(得分:1)
您需要一个Dockerfile,以告诉Heroku如何构建Docker映像:
FROM node:12
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "node", "server.js" ]
然后,对于heroku_build:
resource "heroku_build" "this" {
app = heroku_app.this.name
source = {
path = "."
}
}
这样,您可以将当前文件夹(。)“推”到Heroku,它将找到heroku.yml并创建Docker映像。