在容器中部署 Django + Vuejs (AWS Elastic Beanstalk)
Deploying Django + Vuejs in containers (AWS Elastic Beanstalk)
我正在使用 Django 和 Vuejs 开发一个应用程序,是时候测试与部署相关的事情了。我的应用程序将部署多次(每个未来客户 1 个实例)所以我想使用容器来更快地部署和删除虚拟机维护。
事情是:
我现在不知道如何在生产中构建 vuejs 部分。
Django 后端应该为捆绑资产提供服务,虽然我在 AWS 文档上看到我可以迁移、收集静态文件,...容器启动时的 Django 应用程序,但我不知道 when/where 我应该构建 vuejs 部分,以便让 Django 收集构建的东西。
有人可以帮我解决这个问题吗?
When/where/how 我应该构建 vuejs 部分吗?
请注意,Django 和 Vuejs 以这种方式集成:无论 URL,Django 为 Vuejs SPA 提供服务。而 Vuejs SPA 使用了使用 Django Rest Framework 制作的 Django API。
在此先感谢您的帮助。
如果需要更多信息,我将编辑此 post。
没有用过beanstalk,所以尝试帮助ECR + ECS + ALB堆栈。
此外,您没有提供很多关于您的配置的信息,而且您的问题有点宽泛,无法明确回答。所以下面的描述是一个典型的情况,可能不适用于你的情况。
创建您自己的自定义容器映像:
- 一个用于前端。那将是 Nginx + 编译的 Vue 代码。换句话说静态内容的图像
- 一个用于后端。那将是 Django + 一些应用程序服务器(gunicorn、uwsgi 等)。
并将其汇集到 ECR。
这些图像将通过某些 CI/CD 工具或手动更新。您必须每次都在您的环境中的某个地方构建它。由你决定
创建 ECS 集群(或 Front 和 Back 两个)。设置必须同时 运行 的容器数量、要侦听的端口等。ECS 将从第一步开始使用您的图像到 运行 个容器。
创建应用程序负载均衡器并将所有路径 api/
(域。com/api/url)重定向到后端容器,将所有其他路径重定向到前端(必须创建两个目标组)。
为负载均衡器 HTTPS 侦听器创建 SSL 证书
更新 1:回答 When/where/how should I build the vuejs part ?
根据 this information beantalk 可以将您的自定义图像用于 运行 容器
The Docker and Multicontainer Docker platforms for Elastic Beanstalk support the use of Docker images stored in a public or private online image repository.
因此,如果您将 Vue 和 Django 存储在一个容器中:
什么时候构建vuejs部分
任何时候你想要向你的基础架构发布新代码
我应该在哪里构建vuejs部分
已安装 Docker
的 server/compute 服务的任何位置
vuejs部分应该怎么搭建
- 构建Vue静态代码
- 复制到 Django 目录
- 使用 Django + Vue 内容创建 Docker 图像
- 将图像拉到 AWS ECR 并更新它的版本
- 从更新的映像发布(运行 个新容器)更新的服务
- 在新版本上重复
更新 2:回答 Concerning the uploaded images, I guess I have to save them on some AWS S3 storage somehow ?
最好的方法是在 S3 中使用 S3 作为 static content storage (You can even store all Vue 代码并且根本不要将容器用于前端)
Django 也 supports S3。而且还蛮方便的。
※ 如果您尝试 运行 Vue on S3
,请不要忘记 CORS 设置
但正如我所想,您已经拥有使用 usual POSIX storage instead of S3-like Object storage. So here will be easier to mount permanent shared EFS volume to your containers 的完整服务。在这种情况下,您可以 运行 服务而无需更改任何代码。
如果你有时间调整对象存储的代码,我推荐使用这种方式。
我正在使用 Django 和 Vuejs 开发一个应用程序,是时候测试与部署相关的事情了。我的应用程序将部署多次(每个未来客户 1 个实例)所以我想使用容器来更快地部署和删除虚拟机维护。
事情是:
我现在不知道如何在生产中构建 vuejs 部分。
Django 后端应该为捆绑资产提供服务,虽然我在 AWS 文档上看到我可以迁移、收集静态文件,...容器启动时的 Django 应用程序,但我不知道 when/where 我应该构建 vuejs 部分,以便让 Django 收集构建的东西。
有人可以帮我解决这个问题吗?
When/where/how 我应该构建 vuejs 部分吗?
请注意,Django 和 Vuejs 以这种方式集成:无论 URL,Django 为 Vuejs SPA 提供服务。而 Vuejs SPA 使用了使用 Django Rest Framework 制作的 Django API。
在此先感谢您的帮助。
如果需要更多信息,我将编辑此 post。
没有用过beanstalk,所以尝试帮助ECR + ECS + ALB堆栈。
此外,您没有提供很多关于您的配置的信息,而且您的问题有点宽泛,无法明确回答。所以下面的描述是一个典型的情况,可能不适用于你的情况。
创建您自己的自定义容器映像:
- 一个用于前端。那将是 Nginx + 编译的 Vue 代码。换句话说静态内容的图像
- 一个用于后端。那将是 Django + 一些应用程序服务器(gunicorn、uwsgi 等)。
并将其汇集到 ECR。
这些图像将通过某些 CI/CD 工具或手动更新。您必须每次都在您的环境中的某个地方构建它。由你决定
创建 ECS 集群(或 Front 和 Back 两个)。设置必须同时 运行 的容器数量、要侦听的端口等。ECS 将从第一步开始使用您的图像到 运行 个容器。
创建应用程序负载均衡器并将所有路径
api/
(域。com/api/url)重定向到后端容器,将所有其他路径重定向到前端(必须创建两个目标组)。为负载均衡器 HTTPS 侦听器创建 SSL 证书
更新 1:回答 When/where/how should I build the vuejs part ?
根据 this information beantalk 可以将您的自定义图像用于 运行 容器
The Docker and Multicontainer Docker platforms for Elastic Beanstalk support the use of Docker images stored in a public or private online image repository.
因此,如果您将 Vue 和 Django 存储在一个容器中:
什么时候构建vuejs部分
任何时候你想要向你的基础架构发布新代码
我应该在哪里构建vuejs部分
已安装 Docker
的 server/compute 服务的任何位置vuejs部分应该怎么搭建
- 构建Vue静态代码
- 复制到 Django 目录
- 使用 Django + Vue 内容创建 Docker 图像
- 将图像拉到 AWS ECR 并更新它的版本
- 从更新的映像发布(运行 个新容器)更新的服务
- 在新版本上重复
更新 2:回答 Concerning the uploaded images, I guess I have to save them on some AWS S3 storage somehow ?
最好的方法是在 S3 中使用 S3 作为 static content storage (You can even store all Vue 代码并且根本不要将容器用于前端)
Django 也 supports S3。而且还蛮方便的。
※ 如果您尝试 运行 Vue on S3
,请不要忘记 CORS 设置但正如我所想,您已经拥有使用 usual POSIX storage instead of S3-like Object storage. So here will be easier to mount permanent shared EFS volume to your containers 的完整服务。在这种情况下,您可以 运行 服务而无需更改任何代码。
如果你有时间调整对象存储的代码,我推荐使用这种方式。