javascript - No Access to NodeJS Express App hosted on Google Compute Engine -


i have f1-micro instance on google cloud. in installed ubuntu 14.04, nodejs 0.10 , mongodb. have made express application yeoman works on localhost. when try run in instance, can not access it!

here' do:

  1. commit local code bitbucket
  2. clone code bitbucket google compute engine through ssh
  3. run command grunt
  4. access external ip provided google port no. on browser says this webpage not available

here source code:

** app.js **

'use strict';  // module dependencies. var express = require('express'),     path = require('path'),     fs = require('fs'),     methodoverride = require('method-override'),     morgan = require('morgan'),     bodyparser = require('body-parser'),     errorhandler = require('errorhandler');  var app = module.exports = exports.app = express();  app.locals.sitename = "server";  // connect database var db = require('./config/db'); app.use(express.static(__dirname + '/public'));   // bootstrap models var modelspath = path.join(__dirname, 'models'); fs.readdirsync(modelspath).foreach(function (file) {   require(modelspath + '/' + file); });  var env = process.env.node_env || 'development';  if ('development' == env) {     app.use(morgan('dev'));     app.use(errorhandler({         dumpexceptions: true,         showstack: true     }));     app.set('view options', {         pretty: true     }); }  if ('test' == env) {     app.use(morgan('test'));     app.set('view options', {         pretty: true     });     app.use(errorhandler({         dumpexceptions: true,         showstack: true     })); }  if ('production' == env) {     app.use(morgan());      app.use(errorhandler({         dumpexceptions: false,         showstack: false     })); }  app.engine('html', require('ejs').renderfile); app.set('view engine', 'html'); app.use(methodoverride()); app.use(bodyparser.json()); app.use(bodyparser.urlencoded({ extended: true }));  // bootstrap routes var routespath = path.join(__dirname, 'routes'); fs.readdirsync(routespath).foreach(function(file) {   app.use('/', require(routespath + '/' + file)); });  // bootstrap api var apipath = path.join(__dirname, 'api'); fs.readdirsync(apipath).foreach(function(file) {   app.use('/api', require(apipath + '/' + file)); });  // start server var port = process.env.port || 3000; app.listen(port, function () {   console.log('express server listening on port %d in %s mode', port, app.get('env')); }); 

** gruntfile.js **

module.exports = function(grunt) {   require('load-grunt-tasks')(grunt);   grunt.initconfig({     // configure mochatest task     mochatest: {       test: {         options: {           reporter: 'spec'         },         src: ['test/**/*.js']       }     },     watch: {       options: {         livereload: true,       },       express: {         files:  [ '*.js','routes/*.js', 'models/*.js', 'config/*.js','api/*.js'  ],         tasks:  [ 'express:dev' ],         options: {           spawn: false // without option specified express won't reloaded         }       }     },     express: {       options: {         port : 3000,         node_env: 'development'       },       dev: {         options: {           script: 'app.js',           node_env: 'development'         }       },       prod: {         options: {           script: 'app.js',           node_env: 'production'         }       }     },     open: {       server: {         url: 'http://localhost:3000'        }     }   });    grunt.registertask('test', 'mochatest');    grunt.registertask('server', function(arg) {     if(arg && arg == 'prod')     {       grunt.task.run([         'express:prod',         'open',         'watch'       ]);     }     else     {       grunt.task.run([         'express:dev',         'open',         'watch'       ]);     }   });   grunt.registertask('default', [ 'server' ]);   grunt.registertask('dist', [ 'server:prod' ]);  }; 

i tried changing app.listen google provided internal ip still no luck. ideas?

okay figured out. simple. problem port only. needed change firewall setting allow ports source. that's it.

  1. go google cloud console.
  2. networking > firewall rules.
  3. find entry "default-allow-internal" tcp , udp ranges 1-65535 . edit , change source filter allow source.
    1. restart app with. should work now.

update 27 april 2017 : flow changed little bit on gce. edit source filter -> ip range 0.0.0.0/0


Comments