Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用docker部署nodejs、mongodb、redis应用程序_Docker_Heroku_Deployment_Docker Compose - Fatal编程技术网

使用docker部署nodejs、mongodb、redis应用程序

使用docker部署nodejs、mongodb、redis应用程序,docker,heroku,deployment,docker-compose,Docker,Heroku,Deployment,Docker Compose,我有一个包含nodejs、mongodb和redis的应用程序。我想将此应用部署到heroku。但我不知道我如何才能做到这一点。我读过一些文章。不幸的是,我无法理解 docker文件 FROM node:latest WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . EXPOSE 5000 CMD ["npm","start"] docker-compos

我有一个包含nodejs、mongodb和redis的应用程序。我想将此应用部署到heroku。但我不知道我如何才能做到这一点。我读过一些文章。不幸的是,我无法理解

docker文件

FROM node:latest

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install 

COPY . .

EXPOSE 5000

CMD ["npm","start"]
docker-compose.yml

version: '3'
services:

  mongo:
    container_name: mongo
    image: mongo
  
    ports:
      - '27017:27017'
  redis: 
    image: redis
    

  app:
    container_name: password-manager-docker
    restart: always
    build: .
    
    ports:
      - '80:5000'
    links: 
      - mongo
      - redis
    environment: 
      MONGODB_URI: ${MONGODB_URI}
      clientID: ${clientID}
      clientSecret : ${clientSecret}
      PORT: ${PORT}
      NODE_ENV : ${NODE_ENV}
      JWT_SECRET_KEY: ${JWT_SECRET_KEY}
      JWT_EXPIRE: ${JWT_EXPIRE}
      REFRESH_TOKEN: ${REFRESH_TOKEN}
      JWT_REFRESH_SECRET_KEY: ${JWT_REFRESH_SECRET_KEY}
      JWT_REFRESH_EXPIRE: ${JWT_REFRESH_EXPIRE}
      JWT_COOKIE: ${JWT_COOKIE}
 

任何建议都会对我有所帮助

我建议您分别部署应用程序和数据库。我可能错了,但据我所知,您不能将docker compose与Heroku一起使用,因此您可能希望首先让应用程序运行

要构建和推送应用程序,请选中此项。 您需要传递一个环境变量才能在正确的端口上启动应用程序,以便在Dockerfile中使用

暴露$PORT

CMD npm启动-p$端口

这样,您将在Heroku提供的端口上运行服务器

对于redis,您可以使用Heroku插件:

您可以通过在应用的根目录下添加heroku.yml来指定加载项:


我希望这能帮助您继续。

谢谢您的建议。我如何处理docker compoase.yml中的环境变量。我的意思是我必须手动将它们添加到heroku吗?要在heroku中部署docker应用程序,您不需要docker compose文件,只需使用docker文件。Heroku自动传递$PORT变量,您不需要设置它。事实上,您甚至不需要公开它,因为Heroku将自动选择$PORT中指定的一个。如果要在docker compose中以env变量的形式传递端口(用于本地使用),请选中此处