Node.js 如何在谷歌云上部署Sails.js项目?
我已经学习了多年的教程,我可以在Google cloud上运行node.js应用程序,但是我在我的项目中使用Sails.js,如果我尝试使用Node.js 如何在谷歌云上部署Sails.js项目?,node.js,sails.js,google-cloud-platform,gcloud,Node.js,Sails.js,Google Cloud Platform,Gcloud,我已经学习了多年的教程,我可以在Google cloud上运行node.js应用程序,但是我在我的项目中使用Sails.js,如果我尝试使用 gcloud preview app deploy app.yaml--设置默认值,部署失败 我找不到关于如何部署sails应用程序的教程。 我应该遵循哪些步骤 编辑:我得到的错误是错误:(gcloud.preview.app.deploy)没有足够的VMs就绪(0/1就绪,1仍在部署)。部署版本:20150623t154347.3852229531087
gcloud preview app deploy app.yaml--设置默认值
,部署失败
我找不到关于如何部署sails应用程序的教程。
我应该遵循哪些步骤
编辑:我得到的错误是错误:(gcloud.preview.app.deploy)没有足够的VMs就绪(0/1就绪,1仍在部署)。部署版本:20150623t154347.38522295310879860
即使是使用sails new my_项目创建的默认“empty”sails项目,我也会得到这个结果
更新:我可以使用不同的google项目进行部署,其中CPU配额没有达到最大值,但是:
- 当我查看时,我发现每次运行gcloud deploy时都会使用额外的CPU,并且使用的CPU数量从未减少。如何释放这些CPU
- 当我浏览到我的项目时,我看到的是
错误:服务器错误您请求的服务尚不可用。
请在30秒后重试
你知道这是什么原因吗
更新2:在应用程序引擎控制台日志中,我可以看到:
致命错误:找不到本地grunt
如果安装了grunt,它不应该已经是我项目的一部分了吗
sudo npm安装grunt——保存?
?我最终成功了。Grunt的问题是通过在本地安装Grunt和Grunt cli以及一系列其他依赖项来解决的
下面是如何配置Sails.js项目,使其可部署在Google云上:
1) 将以下内容添加到app.js的开头:
"use strict";
var express = require('express');
var app = express();
app.use(require('./lib/appengine-handlers'));
2) 在项目根目录中创建一个app.yaml文件,包含以下内容:
# [START runtime]
runtime: custom
vm: true
api_version: 1
module: default
# [END runtime]
# [START resources]
resources:
cpu: .5
memory_gb: 1.3
disk_size_gb: 10
# [END resources]
# [START scaling]
automatic_scaling:
min_num_instances: 1
max_num_instances: 5
cool_down_period_sec: 60
cpu_utilization:
target_utilization: 0.5
# [END scaling]
env_variables:
NODE_ENV: production
# [START docker]
FROM google/nodejs-runtime
# [END docker]
3) 确保package.json文件包含以下脚本和依赖项:
"scripts": {
"start": "node app.js",
"monitor": "nodemon app.js",
"deploy": "gcloud preview app deploy app.yaml"
},
"dependencies": {
"express": "^4.12.0",
"gcloud": "^0.15.0",
"grunt": "^0.4.5",
"grunt-cli": "^0.1.13",
"grunt-contrib-clean": "^0.6.0",
"grunt-contrib-coffee": "^0.13.0",
"grunt-contrib-concat": "^0.5.1",
"grunt-contrib-copy": "^0.8.0",
"grunt-contrib-cssmin": "^0.12.3",
"grunt-contrib-jst": "^0.6.0",
"grunt-contrib-less": "^1.0.1",
"grunt-contrib-uglify": "^0.9.1",
"grunt-contrib-watch": "^0.6.1",
"grunt-gcloud": "^0.2.0",
"grunt-sails-linker": "^0.10.1",
"grunt-sync": "^0.2.3",
"sails": "^0.11.0",
"sails-disk": "^0.10.8"
}
4) 在项目根目录中创建Dockerfile文件,其内容如下:
# [START runtime]
runtime: custom
vm: true
api_version: 1
module: default
# [END runtime]
# [START resources]
resources:
cpu: .5
memory_gb: 1.3
disk_size_gb: 10
# [END resources]
# [START scaling]
automatic_scaling:
min_num_instances: 1
max_num_instances: 5
cool_down_period_sec: 60
cpu_utilization:
target_utilization: 0.5
# [END scaling]
env_variables:
NODE_ENV: production
# [START docker]
FROM google/nodejs-runtime
# [END docker]
5) 通过修改config/local.js文件更改默认端口,如下所示:
port: process.env.PORT || 8080
6) 安装所有依赖项并推送到云:
sudo npm install --save
gcloud preview app deploy app.yaml --set-default
我也有同样的问题。无论我做了什么,应用程序都无法部署,并出现相同的错误。问题非常简单:我将主脚本文件命名为index.js
,而不是app.js
。在我将主脚本重命名为app.js
之后,一切都开始正常工作。关于谷歌云平台上的Sails.js
谷歌云平台有一个,以及一个你可以使用的示例应用程序
现在,它甚至比在文章中描述的更容易。您可以直接在app.yaml
文件中指定runtime:nodejs
,而不必担心自定义Dockerfile
基本上:
使用其生成器生成您的Sail.js应用程序
创建最小的app.yaml
文件:
runtime: nodejs
vm: true
env_variables:
PORT: 8080
更新package.json
:
"scripts": {
"debug": "node debug app.js",
"start": "node app.js",
"deploy": "gcloud preview app deploy app.yaml --promote --project <your-project-id>"
}
示例应用程序是,因此社区可以提交问题和PRs,并为后面的人改进内容
关于部署时出现的新实例
如果未在deploy命令中指定已部署实例的版本,则将部署一个新实例,并为其分配生成的版本。--promote
标志使新的eployed版本成为用户实际看到的版本。以前部署的版本仍在运行,您必须手动删除它们,或者保留它们以便回滚
根据您的用例,保留以前的版本可能会很有用,这样您就可以在单击按钮时回滚到它
如果您不希望在部署时创建新实例/版本,则可以在现有实例/版本的基础上部署应用程序。让我们浏览一个场景:
克隆示例应用程序并首次部署它:
$ git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
$ cd nodejs-docs-samples/appengine/sails
$ gcloud preview app deploy app.yaml --promote --project <your-project-id>
在Google Cloud Developer控制台()中,您将看到现在有两个版本:1234
和5678(默认)
5678(默认)
意味着5678
版本是用户访问的版本,但是1234
版本仍在运行,您仍然可以在开发人员控制台中的特殊url访问它。您可以停止、删除或回滚到1234
版本
现在,假设您进行了一些代码更改,并希望重新部署,但不需要新的实例和版本:
$ gcloud preview app deploy app.yaml --version 5678 --promote --project <your-project-id>
$gcloud预览应用程序部署app.yaml--版本5678--升级--项目
这一次,我们指定了一个现有版本,因此新代码将部署在现有实例和版本之上,并且您不会在开发人员控制台中遇到另一个正在运行的实例。在开发过程中,在现有版本的基础上重新部署是很方便的,但是当您需要即时回滚时,例如在生产版本中,您可能不应该这样做。如果您看到的错误似乎表明您的虚拟机已用完,您可能需要去清理以前部署的版本
要删除以前部署的版本,请从App Engine versions选项卡中删除它,而不是从Compute Engine VM Instances选项卡中删除它
干杯 您能添加您在gcloud
或控制台上看到的实际输出或错误吗?仅考虑到“部署失败”,很难调试此问题。如果您使用的是托管虚拟机,则需要在项目中启用计算引擎。如果您的计算引擎已启用,您需要检查是否有可用于部署的GCE配额。我正在使用app engine,但尚未配置计算引擎。我可以看到,我有1个VM实例用于app engine(),但最多有8个VM实例用于compute engine()。我发现可以使用“gcloud compute instances delete”或通过web界面删除计算实例。然而,当浏览到我的项目时,我仍然得到服务器错误,并且在m上有一个错误