在Digitalocean上从Heroku切换到Docker

我有一个生产网站,每月有150到200.000个独立访问者,而且这个网站正在快速增长。

我有一个DigitalOcean水滴(4GB内存和60GB固态硬盘)的MongoDB数据库(20GB的数据)主机,

NodeJs服务器在Heroku上的2 x Web Standard-1X上运行。

对于客户端部分我使用AngularJs。

我的package.json包含大约100个模块。 而bower.json包含约65个模块。

几乎所有的媒体都是Amazon S3上的主机。

现在你知道我的堆栈,我有多个问题:

  1. 该网站提供了很多从mongodb数据库生成的页面,但数据很less发生变化。 谁可以caching这个HTML页面?
  2. 我想将我的应用程序部署到DigitalOcean,并保持部署git的简单性。 我已经尝试过Dokku,但看起来不太稳定,我想自己安装堆栈以更好地理解我在做什么。
  3. 所以我曾尝试像Distelli部署工具,但我从来没有设法实际上看到我的液滴IP服务器。 我猜它必须是nginx相关的…
  4. 我已经尝试像Wercker一样的持续集成来构builddocker映像,将它们推送到Tutum并进行部署。 但build设时间和部署时间都很长,如8〜10分钟…

这是我的Dockerfile,需要花费大量的时间来构build,我怎么能加快速度呢?

FROM node:latest RUN mkdir /src WORKDIR /src ADD . /src RUN npm install RUN npm install -g gulp RUN gulp default ENV NODE_ENV production ENV PORT 3000 EXPOSE 3000 CMD node server.js 

那就是我现在的地方。 你对这种堆栈有什么build议? 我究竟做错了什么 ?

非常感谢。

相关: Docker每次构build/推送 – 持续部署是否可行?

  1. nginx , 清漆或鱿鱼是常用的,但也有其他的select
  2. tutum , deis , dokku-alt , tsuru , flynn
  3. 你应该使用一个服务来caching你的图层。 如果只有应用程序代码发生更改,则不需要重新构build每个图层。

请确保您将ADDCOPY指令放在Dockerfile 。 总是先添加package.jsonbower.json ,然后安装依赖项,然后添加其余的文件。 这里有一个例子https://docs.docker.com/engine/examples/nodejs_web_app/

一旦Dockerfile结构正确,并且用于构build映像的服务caching图层,则应该能够更快地进行部署。