【发布时间】:2019-05-30 19:44:21
【问题描述】:
所以我一直在努力解决如何部署 dockerized 应用程序。该应用程序由一个反应前端和一个快速 API 组成。
我的开发环境docker-compose.yml 如下所示:
version: '3'
services:
# Express Container
backend:
build: ./backend
expose:
- ${BACKEND_PORT}
env_file:
- ./.env
environment:
- PORT=${BACKEND_PORT}
ports:
- ${BACKEND_PORT}:${BACKEND_PORT}
volumes:
- ./backend:/backend
command: npm run devstart
links:
- mongo
# React Container
frontend:
build: './frontend'
expose:
- ${REACT_APP_PORT}
env_file:
- ./.env
environment:
- REACT_APP_BACKEND_PORT=${BACKEND_PORT}
ports:
- ${REACT_APP_PORT}:${REACT_APP_PORT}
volumes:
- ./frontend/src:/frontend/src
- ./frontend/public:/frontend/public
links:
- backend
command: npm start
mongo:
image: mongo
ports:
- "27017:27017"
但我一直在为如何构建它以进行生产而苦苦挣扎。
我看到基本上有3个选项:
- 将前端和后端分别部署到不同的服务器。在这种情况下,react 前端将位于某个网络托管服务上,而 express 后端将托管在 kubernetes 上
- 让 express 应用程序服务于 react 应用程序
- 将应用程序分开,但使用 NGINX 将 API 请求代理到 express 应用程序
我想我会选择选项 3,因为它会保持开发和生产环境非常相似。 (请告诉我这是不是结构不好,这个应用程序预计会收到很多流量。)
我是否应该忘记 docker-compose 并创建一个使用多阶段构建复制前端和后端代码的多阶段 dockerfile?这样我可以部署单个 Docker 容器吗?
我的文件夹结构如下:
app/
.env
docker-compose.yml
docker-compose.prod.yml
.gitignore
frontend/
Dockerfile
... react stuff
backend
Dockerfile
.. express stuff
我做错了吗?您如何使用 docker-compose 将应用程序部署到生产环境(最好在 kubernetes 上)。
我可以找到很多关于如何让这些东西在开发中运行的东西,但是当谈到部署这种类型的堆栈的方向时,我迷失了方向。
【问题讨论】:
标签: node.js reactjs express kubernetes docker-compose