Nginx-Heroku Docker-是否可以在Heroku上将Nginx作为反向代理运行 [英] Nginx - Heroku Docker - Is it possible to run Nginx as a reverse proxy on Heroku

查看:241
本文介绍了Nginx-Heroku Docker-是否可以在Heroku上将Nginx作为反向代理运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图弄清楚如何使用Nginx在Heroku应用上构建反向代理。问题在于Heroku似乎每个应用程序只接受一个容器。但是我的应用程序系统将至少使用三个容器:

I'm trying to figure out how build a reverse proxy on an Heroku app with Nginx. The problem is that Heroku seems to accept only one container per application. But my application system would use at least three container:


  • 一个用于Nginx

  • 一个用于我应用程序前端

  • 一个用于我的业务逻辑服务器的

所以有可能做到这一点Heroku?我的意思是,以某种方式或在同一域上部署另一个多容器应用程序?那就太棒了。
如果有人有任何提示,那就太好了。
谢谢。

So is it possible to make that with Heroku? I mean, deploy in a way or another a multi-container application on the same domain? It would be purely awesome. If someone has any hint, would be great. Thanks.

推荐答案

我有一个类似的模板,但区别在于它在heroku中需要3个应用程序。

由于每个容器都在单独的应用程序中运行,因此它们全部都暴露于外部环境。

I have a template which is kind of similar, but difference is that it requires 3 applications in heroku.
Since each container runs in separate application, all of them are exposed to outer world.

此模板使用travis构建容器并将其部署到heroku。

模板包含3张图片

* Frontend(Nginx- React)

*后端(Nodejs-express)

* Server(Nginx)

This template uses travis to build and deploy containers to heroku.
Template has 3 images
* Frontend(Nginx - React)
* Backend(Nodejs - express)
* Server(Nginx)

我在下面为我引用了以下网址模板。

https:// medium.com/@javierfernandes/continuous-deployment-con-docker-travis-heroku-c24042fb830b

I have referred below urls for my template.
https://medium.com/@javierfernandes/continuous-deployment-con-docker-travis-heroku-c24042fb830b
Heroku (Docker) PORT environment varibale in nginx

下面是存储库URL。

https://github.com/pramodramdas/heroku_multi_dockers

Below is repository url.
https://github.com/pramodramdas/heroku_multi_dockers


  • 在heroku中创建3个应用程序。

  • 获取api k ey从heroku->帐户设置-> Api键

  • 在travis中创建以下环境变量

  • Create 3 applications in heroku.
  • Get api key from heroku -> account settings -> Api Key
  • Create following environment variables in travis

HEROKU_USERNAME = _ / / underscore

HEROKU_PASSWORD = //来自heroku的Api密钥

HEROKU_API_KEY = //与上面相同的api密钥

HEROKU_APP_BACKEND = // heroku后端应用名称,不包含 .herokuapp.com

HEROKU_APP_CLIENT = //没有 .herokuapp.com的heroku前端应用程序名称

HEROKU_APP_NGINX = //没有 .herokuapp.com的heroku nginx应用程序名称

DOCKER_USERNAME = // dockerhub用户名

DOCKER_PASSWORD = // dockerhub密码

HEROKU_USERNAME=_ //underscore
HEROKU_PASSWORD= //Api key from heroku
HEROKU_API_KEY= //same api key as above
HEROKU_APP_BACKEND= //heroku back end app name without ".herokuapp.com"
HEROKU_APP_CLIENT= //heroku front end app name without ".herokuapp.com"
HEROKU_APP_NGINX= //heroku nginx app name without ".herokuapp.com"
DOCKER_USERNAME= //dockerhub username
DOCKER_PASSWORD= //dockerhub password

在nginx heroku应用程序

Create following environment variables in nginx heroku app

HEROKU_APP_BACKEND_URL = // heroku后端应用程序URL示例:xxxxxx.herokuapp.com

HEROKU_APP_CLIENT_URL = // heroku前端应用程序URL例如:xxxxxx.herokuapp.com

HEROKU_APP_BACKEND_URL= //heroku back end app url example: xxxxxx.herokuapp.com
HEROKU_APP_CLIENT_URL= //heroku front end app url example: xxxxxx.herokuapp.com

我的Nginx服务器配置。

My nginx server config.

upstream client {
  server $HEROKU_APP_CLIENT_URL;
}

upstream backend {
  server $HEROKU_APP_BACKEND_URL;
}

server {
  listen $PORT;

  location / {
    proxy_pass http://client;
    proxy_set_header Host $HEROKU_APP_CLIENT_URL;
  }

  location /api {
    proxy_pass http://backend;
    proxy_set_header Host $HEROKU_APP_BACKEND_URL;
  }
}

前端包是通过Frontend内部的单独的Nginx服务器来切断的容器。下面是配置

front end bundle is severed through separate nginx server inside Frontend container. Below is config

server {
  listen $PORT;

  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
  }
}

Docker文件应具有将捆绑软件复制到nginx的命令,并且

Docker file should have commands to copy bundle to nginx and

CMD /bin/bash -c "envsubst '\$PORT \$HEROKU_APP_CLIENT_URL \$HEROKU_APP_BACKEND_URL' < /etc/nginx/conf.d/default.conf > /etc/nginx/conf.d/default.conf" && nginx -g 'daemon off;'

在Docker文件末尾以选择环境变量。

at end of docker file in order to pick env variables.

下面是travis配置

Below is travis config

sudo: required
language: node_js 
node_js: 
  - "9"
services:
  - docker

before_install:
  - wget -qO- https://toolbelt.heroku.com/install.sh | sh
  - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
  - echo "$HEROKU_PASSWORD" | docker login -u "$HEROKU_USERNAME" --password-stdin registry.heroku.com

script:
  - docker build -t $DOCKER_USERNAME/docker_client ./frontend_heroku;
  - docker tag $DOCKER_USERNAME/docker_client registry.heroku.com/$HEROKU_APP_CLIENT/web;
  - docker build -t $DOCKER_USERNAME/docker_backend ./backend_heroku;
  - docker tag $DOCKER_USERNAME/docker_backend registry.heroku.com/$HEROKU_APP_BACKEND/web;
  - docker build -t $DOCKER_USERNAME/docker_nginx ./nginx_heroku;
  - docker tag $DOCKER_USERNAME/docker_nginx registry.heroku.com/$HEROKU_APP_NGINX/web;

deploy:
  provider: script
  script: 
    # push to dockerhub & heroku 
    docker push $DOCKER_USERNAME/docker_client;
    docker push registry.heroku.com/$HEROKU_APP_CLIENT/web;
    heroku container:release web --app $HEROKU_APP_CLIENT;
    docker push $DOCKER_USERNAME/docker_backend;
    docker push registry.heroku.com/$HEROKU_APP_BACKEND/web;
    heroku container:release web --app $HEROKU_APP_BACKEND;
    docker push $DOCKER_USERNAME/docker_nginx;
    docker push registry.heroku.com/$HEROKU_APP_NGINX/web;
    heroku container:release web --app $HEROKU_APP_NGINX;
  on: 
    branch: master 

这篇关于Nginx-Heroku Docker-是否可以在Heroku上将Nginx作为反向代理运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆