gpt4 book ai didi

docker - Nginx - Heroku Docker - 是否可以在 Heroku 上将 Nginx 作为反向代理运行

转载 作者:行者123 更新时间:2023-12-02 18:48:24 25 4
gpt4 key购买 nike

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

  • 一个用于 Nginx
  • 一个用于我的应用程序前端
  • 一个用于我的业务逻辑服务器

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

    最佳答案

    我有一个类似的模板,但不同的是它在 heroku 中需要 3 个应用程序。
    由于每个容器都在单独的应用程序中运行,因此它们都暴露于外部世界。

    此模板使用 travis 构建容器并将其部署到 heroku。
    模板有 3 张图片
    * 前端(Nginx - React)
    * 后端(Nodejs - express)
    * 服务器(Nginx)

    我已经为我的模板引用了以下网址。
    https://medium.com/@javierfernandes/continuous-deployment-con-docker-travis-heroku-c24042fb830b
    Heroku (Docker) PORT environment varibale in nginx

    以下是存储库网址。
    https://github.com/pramodramdas/heroku_multi_dockers

    脚步

  • 在 heroku 中创建 3 个应用程序。
  • 从 heroku 获取 api key -> 账户设置 -> api key
  • 在 travis 中创建以下环境变量

    HEROKU_USERNAME=_//下划线
    HEROKU_PASSWORD=//来自heroku的Api key
    HEROKU_API_KEY=//与上面相同的api key
    HEROKU_APP_BACKEND=//没有“.herokuapp.com”的heroku后端应用名称
    HEROKU_APP_CLIENT=//没有“.herokuapp.com”的heroku前端应用名称
    HEROKU_APP_NGINX=//heroku nginx 应用程序名称没有“.herokuapp.com”
    DOCKER_USERNAME=//dockerhub 用户名
    DOCKER_PASSWORD=//dockerhub 密码
  • 在 nginx heroku 应用程序中创建以下环境变量

    HEROKU_APP_BACKEND_URL=//heroku 后端应用 url 示例:xxxxxx.herokuapp.com
    HEROKU_APP_CLIENT_URL=//heroku 前端应用url 示例:xxxxxx.herokuapp.com

  • 我的 nginx 服务器配置。
    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;
    }
    }

    前端包通过前端容器内的单独 nginx 服务器切断。下面是配置
    server {
    listen $PORT;

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

    Docker 文件应该有命令将包复制到 nginx 和
    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 文件的末尾以选择 env 变量。

    下面是 travis 配置
    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

    关于docker - Nginx - Heroku Docker - 是否可以在 Heroku 上将 Nginx 作为反向代理运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52781529/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com