为Django和VueJS设置的Docker容器

时间:2018-11-16 20:58:30

标签: django docker vue.js docker-compose

下午好,

我正在寻找有关如何集中精力的指导。我一直沿这些兔子洞走下去,似乎找不到我要寻找的道路。

我已经开发了一些小型的内部django应用程序,但希望将VueJS集成到组合中,以获得更动态的前端。

我的目标是:

  • 我想使用Django-restframework进行后端调用
  • 我想在前端使用VueJS并回叫REST API。
  • 我希望所有这些内容都可以存放在我可以使用Jenkins进行同步的Docker容器中。

我的问题/疑虑:

  • 我一直在尝试为VueJS和Django构建单个docker容器,但是从Node或Python开始,我似乎最终陷入了依赖地狱。有人有很好的参考链接吗?
  • 我无法决定是否要完全脱钩,还是想保留一些Django模板。后者的原因是我不想丢失内置的Django身份验证。我没有足够的技能来编写整个身份验证书,因此我宁愿不失去已经完成的工作。
  • 如果我已经完全解耦并且django严格是API,那么我也可以为django使用一个docker容器,并为前端使用另一个docker容器。有想法吗?
  • 最后,这些Web应用程序都具有相同的风险级别,并且存在于具有单独的postgres数据库服务器的同一Web应用程序服务器上。 Nginx应该在服务器上,然后用django在docker容器中存储gunicorn吗?大多数开发人员在哪里确定服务器上的本机内容以及docker容器提供的内容?这些都是针对特定目的的低容量应用程序。

感谢您在我继续涉足新领域时的所有指导。

凯文

2 个答案:

答案 0 :(得分:4)

编辑2019年5月

这是使用ECS,AWS容器编排工具和CI / CD的GitLab为Django和Vue进行的设置。仓库是here

Docker, Django, Vue setup

我一直在研究一个项目,该项目演示了如何使用docker设置Django + Vue项目。这是一个名为verbose-equals-truehttps://verbose-equals-true.tk)的ope源项目。该项目的源代码可在此处找到:https://gitlab.com/briancaffey/verbose-equals-true

这里是我如何构建生产项目的概述。该项目使用docker compose来协调不同的容器以进行生产和开发。

enter image description here

如果您有任何有关我如何使用Django / Vue / docker的问题,请告诉我。我在https://verbose-equals-true.tk/docs上有详细说明的文档。

以下是关于您的问题/疑虑的一些想法:

  • 我从VueJS的官方建议开始,介绍了如何对Vue应用程序进行docker化,并从Docker获得了有关如何对postgres + Django应用程序进行docker化的官方示例。您可能可以将所有内容放在同一个容器中,但是我喜欢将它们分离出来,以使它们保持模块化和清晰。

  • 我正在使用djangorestframework_jwt软件包进行JWT身份验证。我还可以使用内置的Django身份验证系统和Django admin。

  • 我认为拥有单独的容器是有意义的。在开发中,您可以从运行npm run serve的节点容器中为Vue应用程序提供服务,而在生产中,您可以从nginx容器中提供生产应用程序的静态文件(您可以为该部分使用多阶段构建)。

  • 我会将所有内容保存在容器中,而泊坞窗引擎除外。这将简化设置,并使您可以将应用程序移植到决定部署它的任何位置。保持分离唯一有意义的是postgres数据库。连接到托管数据库服务(如AWS RDS)通常要容易得多,但是也可以在docker主机上运行postgres容器,以简化操作。这将需要您自己进行备份,因此您需要熟悉Docker卷。

答案 1 :(得分:2)

我一直在使用Django / Vue,这就是我的工作:

  • 创建Django项目
  • 使用vue-cli将项目的文件夹初始化为新的Vue项目

从这里我可以启动两个开发服务器,一个用于Django,另一个用于Vue:

python manage.py runserver

在另一个终端中:

npm run serve

为了在Vue中使用我的API,我在vue.config.js中使用以下配置:

module.exports = {
  baseUrl: process.env.NODE_ENV === 'production'
    ? '/static/'
    : '/',
  outputDir: '<PROJECT_BASE_DIR>/static',
  indexPath: '../templates/index.html',
  filenameHashing: false,
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8000'
      }
    }
  },
}

devServer将请求重定向到API,outputDirindexPath帮助将应用程序构建到项目的文件夹<PROJECT_BASE_DIR>/templates/<PROJECT_BASE_DIR>/static/

下一步是创建一个TemplateView并将template_name设置为index.html(由Vue构建的文件),这样您就可以将SPA放在Django视图/模板中。

通过这种方法,您可以将Docker容器用于Django。

我希望这会为您提供一些基本指导以继续。

亚历杭德罗