docker - Magento 2 Open Source with Docker in production:如何共享静态内容和媒体文件
问题描述
我们在 Docker 环境中使用 Magento2 开源,其中我们有一个运行 nginx 的应用程序容器和多个 phpfpm 容器。目前,所有容器在网络存储上都有一个挂载到 /pub 的共享,因此 /pub/media 中的图像等只需上传一次并在所有容器之间共享。/pub/static 中的静态内容也是共享的。
这通常有效,但对自动化部署过程有缺点:
- 将静态内容部署到挂载的文件夹相当慢。
setup:static-content:deploy
当一个 php 容器启动时,它需要额外的逻辑来决定是否必须重建静态内容(使用)。- 在部署新的静态内容时,它需要网站的维护窗口/停机时间。
所以想法是在每个 php 容器中都有 /pub/static,而不是将其共享为挂载文件夹,并在每个 php 容器中单独运行构建setup:di:compile
过程setup:static-content:deploy
。一旦容器准备就绪,它就会被包含在网络中并开始为请求提供服务。
不幸的是,这不起作用,因为静态内容由应用程序容器/nginx(在 nginx.conf 中配置)提供,而不是由 php 容器提供。但是应用程序容器无权访问 /pub/static,因为该文件夹现在是多个 php 容器的本地部分。
所以我的问题是:在具有多个 php 容器的 Docker 环境中自动构建过程的最佳方法是什么?
任何文件夹应该在多个容器之间共享还是保留在容器中?(我们仍然只想拥有一个 /pub/media 文件夹,因为内容编辑器会上传图片,例如通过管理面板中的媒体库。)
解决方案
推荐阅读
- html - 奇怪的 WebRTC SinkID 问题
- html - 如何减少固定高度表格的两行之间的空间
- firebase - 验证 FCM 用户令牌的批量方法?
- swift - 使用泛型参数化属性类型
- pandas - 当索引数据类型为 Pandas 中的 Datetime 时使用索引访问两行?
- r - R ggplot2 轴文本在对数刻度中消失
- c - stm32 如何从 lsm303c i2c 得到答案
- layout - 更改 BigBlueButton HTML 5 客户端布局
- php - 在 docker 容器中启用 mysqli
- sql - 使用 ROW_NUMBER () OVER 获取停止号时出现问题 - DB2