在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上的主机。
现在你知道我的堆栈,我有多个问题:
- 该网站提供了很多从mongodb数据库生成的页面,但数据很less发生变化。 谁可以caching这个HTML页面?
- 我想将我的应用程序部署到DigitalOcean,并保持部署git的简单性。 我已经尝试过Dokku,但看起来不太稳定,我想自己安装堆栈以更好地理解我在做什么。
- 所以我曾尝试像Distelli部署工具,但我从来没有设法实际上看到我的液滴IP服务器。 我猜它必须是nginx相关的…
- 我已经尝试像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/推送 – 持续部署是否可行?
- nginx , 清漆或鱿鱼是常用的,但也有其他的select
- tutum , deis , dokku-alt , tsuru , flynn
- ?
- 你应该使用一个服务来caching你的图层。 如果只有应用程序代码发生更改,则不需要重新构build每个图层。
请确保您将ADD
和COPY
指令放在Dockerfile
。 总是先添加package.json
和bower.json
,然后安装依赖项,然后添加其余的文件。 这里有一个例子https://docs.docker.com/engine/examples/nodejs_web_app/
一旦Dockerfile
结构正确,并且用于构build映像的服务caching图层,则应该能够更快地进行部署。