HoC*_*Co_ 4 reverse-proxy nginx heroku docker docker-container
我想弄清楚如何使用 Nginx 在 Heroku 应用程序上构建反向代理。问题是 Heroku 似乎每个应用程序只接受一个容器。但我的应用系统至少会使用三个容器:
那么可以用 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 环境变量在 nginx
以下是存储库网址。
https://github.com/pramodramdas/heroku_multi_dockers
在 travis 中创建以下环境变量
HEROKU_USERNAME=_ //下划线
HEROKU_PASSWORD= //来自heroku的Api key
HEROKU_API_KEY= //与上面相同的api key
HEROKU_APP_BACKEND= //heroku后端应用名称不带“.herokuapp.com”
HEROKU_APP_CLIENT= //heroku前端应用名称不带“ .herokuapp.com"
HEROKU_APP_NGINX= //没有“.herokuapp.com”的heroku nginx应用名称
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;
}
}
Run Code Online (Sandbox Code Playgroud)
前端包通过前端容器内的单独 nginx 服务器切断。下面是配置
server {
listen $PORT;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
Run Code Online (Sandbox Code Playgroud)
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;'
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4749 次 |
| 最近记录: |