在容器中部署 Django + Vuejs (AWS Elastic Beanstalk)

利布里斯

我正在使用 Django 和 Vuejs 开发一个应用程序,现在是测试部署相关内容的时候了。我的应用程序将被部署多次(每个未来客户 1 个实例),所以我想使用容器来加快部署和删除虚拟机维护。

事情是 :

我现在不知道如何在生产中构建 vuejs 部分。

Django 后端应该为捆绑资产提供服务,虽然我在 AWS 文档中看到我可以迁移、收集静态文件、......容器启动时的 Django 应用程序,但我不知道我应该在何时/何地构建 vuejs 部分,以便让 Django 收集构建的东西。

有人可以帮我吗?

我应该何时/何地/如何构建 vuejs 部分?

请注意,Django 和 Vuejs 以这种方式集成:无论 URL 是什么,Django 都为 Vuejs SPA 提供服务。Vuejs SPA 使用 Django Rest Framework 制作的 Django API。

在此先感谢您的帮助。

如果需要更多信息,我会编辑这篇文章。

转职

没有使用 beanstalk,所以尝试帮助 ECR + ECS + ALB 堆栈。

此外,您没有提供很多有关您的配置的信息,并且您的问题有点宽,无法明确回答。所以以下描述是典型情况,可能不适用于您的情况。

  1. 创建您自己的自定义容器映像:

    • 一种用于前端。那将是 Nginx + 编译的 Vue 代码。换句话说,静态内容的图像
    • 一个用于后端。那将是 Django + 一些应用程序服务器(gunicorn、uwsgi 等)。

    并将其汇集到 ECR。

    这些图像将由某些 CI/CD 工具或手动更新。您必须每次都在您的环境中的某个地方构建它。由你决定

  2. 创建 ECS 集群(或两个用于 Front 和 Back)。设置必须同时运行的容器数量、监听的端口等。ECS 将使用第一步中的镜像来运行容器。

  3. 创建应用程序负载均衡器并将所有路径api/(domain.com/api/url)重定向到后端容器,将所有其他路径重定向到前端(必须创建两个目标组)。

  4. 为负载均衡器 HTTPS 侦听器创建 SSL 证书

更新1:回答 When/where/how should I build the vuejs part ?

根据此信息beanstalk 可以使用您的自定义图像来运行容器

Elastic Beanstalk 的 Docker 和多容器 Docker 平台支持使用存储在公共或私有在线映像存储库中的 Docker 映像。

因此,如果您将 Vue 和 Django 存储在一个容器中:

  1. 我应该什么时候构建 vuejs 部分

    任何时候你想向你的基础设施发布新代码

  2. 我应该在哪里构建 vuejs 部分

    已安装 Docker 的服务器/计算服务中的任何位置

  3. 我应该如何构建 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 作为静态内容存储(您甚至可以将所有 Vue代码存储在 S3 中,并且根本不使用容器作为前端)
Django 也支持 S3而且很方便。

※ 如果您尝试在 S3 上运行 Vue,请不要忘记 CORS 设置

但是我可以假设,您已经拥有一个完整的服务,该服务使用通常的 POSIX 存储而不是类似 S3 的对象存储所以在这里将永久共享 EFS 卷挂载到您的容器会更容易在这种情况下,您无需更改任何代码即可运行服务。

如果你有时间调整对象存储的代码,我推荐使用这种方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章