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

Posted

技术标签:

【中文标题】如何将 nodejs 应用程序部署到谷歌云?【英文标题】:How to deploy a nodejs application to google cloud? 【发布时间】:2015-12-24 23:00:29 【问题描述】:

我正在尝试将 nodejs 应用程序部署到谷歌云,我已经发布了几个关于我遇到的错误以及如何修复它们的问题。让我说明我的努力......

problem 1) 我尝试遵循tutorial,hello world 应用程序部署。当我输入命令进行部署时,

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

它给了我一个错误,说托管 vm 不适用于您的应用程序所在的区域。我联系了 Google 的技术支持代表,他说他的名字是 Ling,他说他“不知道托管 vm 在印度不受支持”,他希望我指出我在哪里找到了这些信息。所以我给他发了this,注意其中一个答案。好的.....

problem 2) 所以,我被卡住了,不知道该怎么办。搜索“如何在谷歌云上部署 nodejs 应用程序”并找到一个video,其中一位谷歌开发人员告诉我“在云中运行应用程序有两种主要方式,基础设施即服务和平台即服务”。在应用引擎上运行它是平台即服务,这不在列表中,所以我选择了我唯一剩下的选择。有一个教程,bookshelf app 教程,也是由 google 提供的,最后一部分描述了如何在计算引擎上运行您的应用程序。我试图通过教程,但是当我输入命令时

git push cloud 7-gce:master

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

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

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

node app.js

几乎就像是在嘲弄我一样,它控制台会注销“已连接到 mongo....”和“正在侦听 3000 端口.....”。我很兴奋,我认为它正在工作......

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

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】:

哇,伙计。我考虑过标记这一点,但您似乎真的想学习编程并需要帮助。经验丰富的编码员教授新手编码员是这个网站的全部内容。所以,我们开始吧。

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

是时候解决您的问题了:

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

问题 2:不要使用 git。我每天都使用 git,它很棒,但是你还有很长的路要走,而且 git 真是令人困惑。使用您的工作区,对其进行 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-getmongo。并在一个实例上猛击它。这是我做的专业吗?一定不行。但是,当您将开发运维与编程相结合时,所有这些都是小步骤,您需要采取这些步骤。

勘误表:您希望有人推荐一本书、一个网站或指南。所有你需要知道的已经在 Ubuntu 上。它们被称为man 页面。它是手册的缩写。您可以在亚马逊上购买世界上所有的书籍并观看无限的 youtube 页面。它不会与简单的maning 命令相提并论。你必须相信我。

总结:只需创建一个 Ubuntu 实例。 targzip 你的所有代码和 scp 它到你的实例。学习apt-get,真的,你已经准备好了。您将多次完全破坏您的实例。所以只需删除它,重新创建它,然后重新开始。每一次,你都会比以前更聪明更聪明。我一直在辅导新手开发人员。你必须从小处着手,然后一路向上。最终你会明白为什么要使用 git。为什么要扩展。为什么LXC很棒。为什么 GCE 的托管实例和虚拟机是疯狂的球员,以及为什么编写部署脚本是最佳实践。但首先,您必须了解如何构建实例并以任何可能的方式获取代码。你会从那里成长。祝你好运,伙计。

【讨论】:

以上是关于如何将 nodejs 应用程序部署到谷歌云?的主要内容,如果未能解决你的问题,请参考以下文章

text 将Angular应用程序部署到谷歌云

将 node.js 应用程序部署到谷歌云平台时找不到模块“yargs”错误

text 将Spring-java应用程序部署到谷歌云

如何使用签名的 URL 将文件上传到谷歌云存储桶

使用 docker-compose 将 Docker 映像部署到谷歌云运行

如果我将 Spring Boot 应用程序部署到谷歌云,我应该使用应用引擎还是计算引擎 [重复]