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:
- commit local code bitbucket
- clone code bitbucket google compute engine through ssh
- run command grunt
- 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.
- go google cloud console.
- networking > firewall rules.
- find entry "default-allow-internal" tcp , udp ranges 1-65535 . edit , change source filter allow source.
- 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
Post a Comment