【问题标题】:Deployment pipeline with production react build具有生产反应构建的部署管道
【发布时间】:2020-11-17 04:16:27
【问题描述】:

我有一个反应构建和一个服务器构建 (mongo) 例如

- root
  - server
   -build
   DockerFile
  -client
   -build
  DockerFile
docker-compose.yml

这在推送时使用 github 操作来构建和部署到 AWS 实例

服务器在单独端口上的 prod 上运行良好,但是我缺少能够在此主机上运行客户端的东西。如果可以的话,我不想通过我的 express api 提供我所有的静态资产。

Docker 编写文件:

version: '3'
services:
  client:
    build:
      context: ./client
      dockerfile: Dockerfile
    volumes:
      - /app/node_modules
      - ./client:/usr/src/app
    ports:
      - '3000:3000'
    restart: on-failure
    container_name: spacer_app_client
    tty: true
    stdin_open: true
  server:
    build:
      context: ./server
      dockerfile: Dockerfile
    ports:
      - '3001:3001'
    restart: on-failure
    container_name: spacer_app_server
    stdin_open: true
    volumes:
      - /app/node_modules # Inside the container, don't try to override this folder, just leave as is
      - ./server:/usr/src/app # Look at the server directory and copy everything into the app folder in the container

【问题讨论】:

  • 很抱歉,但我们并没有真正得到您想要实现的目标。 “在这台主机上运行我的客户端”是什么意思?另外我不明白静态资产问题的重点?如果您需要第三个带有 Web 服务器 nginx/apache 的容器,只需将其添加到您的撰写文件中。
  • 对不起,我没有很好地解释 myseld。我想就是这样,我的 docker 文件中需要一个 nginx 服务器才能托管静态文件,但不确定命令/如何做到这一点
  • 你能展示你的 docker-compose.yml 吗?这是您使用提供一些静态文件的 nginx 容器放置第三个容器的地方...
  • 当然!感谢您的输入。我会将它添加到主要问题的编辑中

标签: reactjs docker amazon-ec2 github-actions


【解决方案1】:

您可以添加一个 nginx(或您想要的任何其他网络服务器到您的 docker compose:

首先去 dockerhub (https://hub.docker.com/),然后搜索“nginx”或者任何你看名字的名字。求官方图。你会得到类似的东西:https://hub.docker.com/_/nginx

在文档页面中,他们解释了如何通过命令行使用 docker 运行官方 nginx 服务器实例:

docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

理想情况下,您修复版本以具有预测行为。该文档为您提供了可用的文档。让我们获取最新的稳定版本:

docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx:1.19.1

他们也通过示例解释了如何使用 docker-compose 来做到这一点:

web:
  image: nginx:1.19.1
  volumes:
   - ./templates:/etc/nginx/templates
  ports:
   - "8080:80"
  environment:
   - NGINX_HOST=foobar.com
   - NGINX_PORT=80

当然,您可以根据自己的喜好调整音量、端口等。

备注: dockerhub 上有数千个可用容器,适用于大多数数据库、操作系统、服务器、构建工具链等。所以你可以直接运行 python 或 java 应用程序或 web 服务器或任何你喜欢的配置。

【讨论】:

  • 这太好了,谢谢。我现在要试试这个。一个简单的问题,我认为我可以在本地系统上的 docker 容器中完成所有这些工作?然后提供它所有的工作,它会在我的 AWS 主机上可靠地工作吗?
  • 当然,一切都可以在本地或您想要的任何环境上运行。尽管如此,如果您希望您的容器在生产中可靠地工作,它们不应该绑定到本地卷,因为在生产中,文件系统不会在集群的节点上提供此类文件。这实际上就是您在 docker-compose.yml....
  • 对于生产来说,所有实际上是代码的文件(我的意思是在你的 git 和你的提交的一部分,而不是最终用户动态生成的内容)应该只复制到容器内和它的一部分。这样他们总是可用的。为此使用 COPY 指令,这意味着您的代码的每个新版本(新提交、PR 合并等)都将创建您的容器的新版本。而部署新版本的应用只是在配置文件中更改容器的版本。
  • 我还想说,如果您使用的是 AWS,您应该定期使用最终目标环境进行测试,例如 AWS。您可以在生产之上拥有一个测试系统,并使用它来逐步尝试和验证您的配置。当它在该环境上运行良好时,您将其推送到生产环境。但是你真的不应该改变 dev 和 prod 之间的工作方式。如果您在测试时不使用相同的工具并且不尝试使用与 prod 中相同的工具进行部署,那么您将有很长的集成时间,并且有可能在 prod 中加载一些不起作用的东西并导致长时间停机.
  • 谢谢尼古拉斯。我对 docker 有一些了解。但是,您之前提到“这对测试(即时反馈)很好,而不是对生产而言。”但是我认为我会在生产和本地使用相同的 docker-compose 文件?
猜你喜欢
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
相关资源
最近更新 更多