如何将nodejs应用程序部署到谷歌云?

时间:2015-09-27 17:04:27

标签: node.js deployment google-compute-engine bitnami

我正在尝试将nodejs应用程序部署到google云端,我已经发布了几个关于我已经获得的错误以及如何解决这些错误的SO问题。让我说明我的努力......

problem 1)我尝试了tutorial,即hello world app部署。当我输入要部署的命令时,

$ gcloud preview app deploy app.yaml --set-default

它给了我一个错误,说管理的vms不适用于您的应用程序的区域。我联系了谷歌的一位技术支持代表谷歌的人,他说他的名字叫凌,他说他并没有意识到托管的vm​​s在印度没有得到支持"他希望我指出我在哪里找到这些信息。所以我发给他this,请注意其中一个答案。行.....

problem 2)所以,我被困住了,并不知道该怎么做。搜索"如何在谷歌云上部署nodejs应用程序"并找到了一个video,其中谷歌开发人员告诉我,有两种主要方式可以在云中运行您的应用程序,基础架构即服务和平台即服务"。在应用程序引擎上运行它是平台即服务,这是不在列表中所以我选择了我唯一剩下的选项。还有一个教程,bookshelf app教程,也是谷歌,最后一部分介绍了如何在计算引擎上运行您的应用程序。我试图完成教程,但是当我输入命令时

git push cloud 7-gce:master

将我的代码推送到存储库,它向我询问我的用户名和密码,它从未提及在教程中,我不知道要输入什么。我找到this question,但我不确定它是否适用于我的情况。接下来我接受了Zachary Newman建议的一些教程,我无法跟随the tutorial使用ubuntu,因为当他们告诉你hello.js文件时,它真的很奇怪因为我不得不ssh到我创建的ubuntu映像vm,一切都很慢,我不熟悉linux上的命令,所以我不得不查看如何"保存并退出"创建hello.js文件后。我得到了#34; web服务器"要运行,它是反向代理nginx服务器,但由于我不知道APP_PRIVATE_IP_ADDRESS是什么,当我访问页面时,我可以看到nginx页面而不是" hello world&# 34;应该显示的消息。请参阅先决条件标题以查看教程试图教我的内容。行....

problem 3)在Google开发者控制台上,一旦您登录,左侧就会出现一个导航部分,其中有一个指向" Cloud Launcher"的链接。在那里,我找到了一个链接来创建一个安装了nodejs的虚拟机,它由Bitnami创建。我点击了它,我的vm正在运行,我去了提供的外部IP地址,并看到Bitnami的祝贺(呃...)页面。我真的不知道该怎么做,所以我发布了另一个SO问题。 bitnami开发人员告诉我,我需要将您的文件复制到远程存储库,创建配置文件,之后您必须在Apache的配置中包含该配置以服务应用程序"。怎么样?!?!他刚刚发布了一个链接{bit} wiki page。我使用filezilla连接到我的虚拟机,我尝试将我的应用程序文件上传到虚拟机。我能够上传除节点模块之外的所有内容(它们上传时间太长,并且由于某种原因,ftp客户端在上传10分钟左右后仍然失去与服务器的连接)。所以我想我会ssh到实例并尝试npm安装我的依赖项。但它给了我更多错误......

problem 4)我不知道为什么这篇文章被搁置,但我发现this。我现在无法找到确切的页面,但我在谷歌文档的某个地方读到我们不能按照设计的root / administrator进入实例,并且我们必须执行一些高级配置才能能做到这一点。问题是我不能安装依赖项,除非我作为管理员ssh进行....:'(所以我刚用filezilla上传了我的节点模块。一切看起来不错,我ssh到我的实例和我进入我的应用程序目录并输入命令

node app.js

几乎就好像嘲笑我一样,它控制台退出"连接到mongo ...."和#34;在端口3000上聆听....."。我很兴奋,我认为它正在工作......

problem 4)服务器从未真正开始运行我认为,它无法连接到我运行的mongodb数据库(另一个实例),这是连接到mongodb实例的命令我的app.js文件

mongoose.connect('mongodb://****/myappdatabase');

其中****表示我的mongodb实例的外部IP。大约5分钟后,我在ssh浏览器上出现错误

Error: connect ETIMEDOUT ****:27017

但是他有时间阅读所有这些权利吗?

我不是开发人员,我没有多少编程经验(实际上接近于零)。我是一个业余爱好者。我在stephen g上找了一本关于c编程的书。 kochan大约5或6个月前,从那以后,我一直在关注互联网上的教程,java书籍编程和一些参考资料。我想创建一个网站。

我从w3schools学到了一些html,css,javascript和jquery,并经历了一些有关创建基本节点服务器和提供一些html页面的教程,这些都是我的应用程序所做的。这就是我想要它做的一切。

我使用了node的express框架,并使用mongoose连接到我在本地运行的mongodb。 Socket.io有点网络化。我创建了网站以获得乐趣,我真的想主持它并与我的朋友分享,我做到了这一点,现在退出真的很尴尬因为我无法主持网站。顺便说一句,我经历的事情比我在这个问题上发布的要多得多。

现在我真的很感激一些帮助,甚至一些关于我需要知道的指导,也许我应该阅读的书籍或者我应该通过更加熟悉网站托管的文档会很棒。我将在2天内提出这个问题以获得赏金,但在那之前,如果有人经历过这个并希望帮助他们自己没有个人利益,那么你将拯救我的生命。我已经在这里待了大约4天而没有运气。谢谢,如果您有任何关于我的申请的信息,请告诉我。我的意思是认真,这有多难,我做某事(或一切)都非常错误。

1 个答案:

答案 0 :(得分:8)

哇老兄。我想到了这一点,但你似乎真的想学习编程并需要帮助。经验丰富的编程员教授新手编码器就是这个网站的全部内容。所以,我们走了。

首先,Linux是你的朋友。学习它。用它。我不使用Ubuntu,但你应该。使用14.04,因为它是一个宽容的东西,并且当你刚刚学习时,它会挤满你需要的东西。

时间解决您的问题:

问题1:您使用的是gcloud preview产品。那些很棒,但不适合初学者,因为你不知道你在做什么。只需在n1标准上建立一个Ubuntu实例并摇滚吧。没有钟声。没有口哨。学习Ubuntu linux的热情与您自己教授如何编写网站一样。

问题2:不要使用git。我每天都使用git而且很棒,但是你还有很长的路要走,git让hella感到困惑。拿你的工作区,tar / gzip它,然后把整个shebang ssh到云端。然后解压缩它,您将在服务器上拥有完整的代码。警告:从不这样做专业。但对于刚刚学习的人来说......小咬人......小咬。

问题3:不要使用Bitnami预建图像。它剥夺了您从头开始学习如何做到这一点的机会,这是一次非常宝贵的经历。以下是您必须学习的两个命令:

apt-get update
apt-get install <insert thing you want to install>

就是这样。不是火箭科学,你会发现Linux上的包管理的力量。

问题4:你过分思考这个问题。要真实,请了解apt-get。它会让你到目前为止,你会诅咒自己之前没有使用它。 apt-get节点。 apt-get mongo。并在一个实例上猛烈抨击。那是我专业的做法吗?一定不行。但是,当您将开发与编程结合起来并且需要采取这些步骤时,所有这些都与宝贝步骤有关。

勘误表:您希望某人推荐图书,网站或指南。您需要知道的只是Ubuntu。它们被称为man页面。这是手动的简称。您可以在亚马逊上购买世界上所有的书籍,并观看无限的YouTube页面。它不会与简单的man命令进行比较。你必须相信我。

总结:只需创建一个Ubuntu实例。 targzip所有代码以及scp到您的实例。学习apt-get,真实地,你已经确定了。你将完全摧毁你的实例多次。所以只需删除它,重新创建它,然后继续重新开始。每一次,你都会比以前更聪明,更聪明。我一直在指导新手开发人员。你必须从小做起,然后继续努力。最终你会明白你为什么要使用git。为什么要缩放。为什么LXC太棒了。为什么GCE的托管实例和虚拟机是疯狂的,以及为什么编写部署脚本是最佳做法。但首先,您必须了解如何构建实例并以任何可能的方式获取代码。你会从那里成长。祝你好运,伙计。