angular - Nginx - 带有 2 个 Nginx 反向代理服务器的云服务器
问题描述
我有一个云服务器 ubuntu 18.04,我有一个后端 API(.NET Core)和一个前端Angular应用程序(这两个应用程序都部署在 docker 容器内)。后端 API 首先上传,所以我在云服务器上配置了一个 nginx 代理。然后当我对 Angular 应用程序进行 docker 化时,但所有示例都使用 nginx 进行了 docker 化。它是否可以在没有 nginx 的情况下独立 dockerize Angular 应用程序?
因此,现在云服务器有两个 nginx 反向代理。一个在服务器上,一个在 Angular 容器内 @@
我的想法
- 如果我向外界公开 IP 地址,所有请求都将直接转发到 Angular 容器 IP。
- 如果我不公开 Angular 容器的 IP(设置防火墙)。一个请求必须通过 2 个 nginx 代理(因为 Angular 应用程序现在与 nginx 一起部署)。如何在没有 nginx 的情况下对 Angular 应用程序进行 dockerize?
- 我应该为后端和前端部署 nginx 以及容器吗?
- 一个云服务器应该是一个应用程序的 nginx。然后我拆分了两个后端和前端,每个部署单独的云服务器。
解决方案
在我们在评论部分讨论之后,我想我会分享我的 angular-app Dockerfile 和 Docker compose 配置文件以供参考:
FROM node:12-alpine
ARG mode=prod
ENV mode=$mode
RUN apk --no-cache add \
tzdata \
git \
python \
g++ \
make
ENV TZ=${TZ:-America/Chicago}
RUN echo "$TZ" > /etc/timezone && date
EXPOSE 4200
USER node
WORKDIR /home/node
#To take advantage of docker's caching, first only copy the package.json and
# package-lock.json, then run npm install
COPY package*.json ./
RUN npm install
#This way the node_modules will be stored in an image build stage cache,
# which means it won't need to reinstall node_modules every build, but will
# reinstall them if either the package.json or package-lock.json file changes.
COPY *.js* ./
COPY src ./src
RUN [[ -z $mode ]] && npm run build || npm run build:$mode
码头工人撰写:
version: '3.4'
services:
express-api:
container_name: express-api
build: ./express-api
user: ${DOCKER_USER:-0:0}
expose:
- "3000"
restart: "unless-stopped"
environment:
- TZ=America/Chicago
volumes:
- ./express-api/ssl-certs/:/home/node/ssl-certs:ro
angular-app:
container_name: angular-app
build: ./angular-app
user: ${DOCKER_USER:-0:0}
expose:
- "4200"
restart: "on-failure"
environment:
- TZ=America/Chicago
volumes:
- app_dist:/home/node/dist
- ./angular-app/ssl-certs/:/home/node/ssl-certs:ro
angular-docs:
container_name: angular-docs
build:
context: ./angular-app
dockerfile: Dockerfile-docs
user: ${DOCKER_USER:-0:0}
expose:
- "8080"
restart: "on-failure"
environment:
- TZ=America/Chicago
nginx-server:
container_name: nginx-server
build: ./nginx-server
expose:
- "80"
- "443"
restart: "unless-stopped"
environment:
- TZ=America/Chicago
volumes:
- ./nginx-server/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx-server/ssl-certs/:/etc/nginx/ssl-certs:ro
- app_dist:/var/www:ro
volumes:
app_dist:
我将该撰写文件与此文件合并以进行生产:
version: '3.4'
services:
express-api:
env_file: prod.env
angular-app:
build:
args:
mode: "prod"
env_file: prod.env
nginx-server:
ports:
- "80:80"
- "443:443"
env_file: prod.env
在我的角度包 json 中,我有这些脚本:
"build": "node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build",
"build:prod": "node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --prod",
我在发布之前删除了其中的一些行,但它们应该可以帮助您入门。此设置使用一个容器来构建 angular-app 分发文件并将其存储在与 nginx 容器共享的卷中,该容器为文件提供服务并具有 express-api 后端的反向代理。
DOCKER_USER 环境变量是由 bash 脚本预先设置的:
export DOCKER_USER="${USERID:-1000}:${USERGID:-1000}"
推荐阅读
- java - Java 微服务、JVM 参数、k8s 和 Docker 的配额和其他
- python - Azure Databricks 群集初始化脚本 - 安装 python 轮
- angular - 从 App Shell-Angular 调试 MicroUI 组件
- r - R按字母顺序重新排列列值
- python - 努力理解一段代码
- excel - 数据验证列表被忽略
- javascript - 使用空格验证用户输入
- sql - NLS_LANG 导致 MATCH RECOGNIZE ORACLE SQL 出现问题
- d3.js - d3.js (arcgis js api 3.31) 无法在 arcgis js api 中选择“map_gc”dom
- python - Apache Tika 是否保留已解析的数据?