При развертывании веб-приложения на Heroku они сообщат вам, какой порт свободен, через переменную env. Вы должны связать этот порт в вашем исходном коде.
В вашем Dockerfile удалите EXPOSE 3000
, так как вы не можете открыть пользовательский порт.
В вашем исходном коде вы должны будете написать что-то вроде const port = process.env.PORT || 3000
.
Так что, когда вы выполняете свою программу локально, и у вас не установлен env var $PORT
, он откроет порт 3000. В Heroku он откроет порт для того, что указано в $PORT
.
Обычное препятствие при развертывании в Heroku состоит в том, что ваши URL-адреса больше не работают. При локальном запуске у вас может быть URL: http://localhost:3000/
, но в Heroku у вас есть: https://my-app.herokuapp.com/
.
http s может вызвать головную боль, так как вы, возможно, работали с http все время , Кроме того, если вы жестко закодировали порт в конце имени хоста, это вызовет некоторые проблемы. Heroku автоматически переводит имя хоста в ip-адрес + порт.
Вы можете прочитать здесь о развертывании на Docker здесь:
https://devcenter.heroku.com/categories/deploying-with-docker
https://devcenter.heroku.com/articles/build-docker-images-heroku-yml
Убедившись, что ваш код совместим с Heroku, вы можете приступить к развертыванию Heroku Docker. Статья очень тщательная, и я считаю, что лучше, если вы прочитаете их, чем я, просто скопируйте и вставьте то, что там написано.