mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Allow specifying interface with -p and --app-port
The syntax is "--port host:port". Not implemented for test-packages. No control is available over mongo ports (port or host). Fixes #469 and #1105.
This commit is contained in:
@@ -153,8 +153,8 @@ main.registerCommand({
|
|||||||
name: 'run',
|
name: 'run',
|
||||||
requiresApp: true,
|
requiresApp: true,
|
||||||
options: {
|
options: {
|
||||||
port: { type: Number, short: "p", default: 3000 },
|
port: { type: String, short: "p", default: '3000' },
|
||||||
'app-port': { type: Number },
|
'app-port': { type: String },
|
||||||
production: { type: Boolean },
|
production: { type: Boolean },
|
||||||
'raw-logs': { type: Boolean },
|
'raw-logs': { type: Boolean },
|
||||||
settings: { type: String },
|
settings: { type: String },
|
||||||
@@ -166,6 +166,32 @@ main.registerCommand({
|
|||||||
once: { type: Boolean }
|
once: { type: Boolean }
|
||||||
}
|
}
|
||||||
}, function (options) {
|
}, function (options) {
|
||||||
|
// XXX factor this out into a {type: host/port}?
|
||||||
|
var portMatch = options.port.match(/^(?:(.+):)?([0-9]+)$/);
|
||||||
|
if (!portMatch) {
|
||||||
|
process.stderr.write(
|
||||||
|
"run: --port (-p) must be a number or be of the form 'host:port' where\n" +
|
||||||
|
"port is a number. Try 'meteor help run' for help.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
var proxyHost = portMatch[1] || null;
|
||||||
|
var proxyPort = parseInt(portMatch[2]);
|
||||||
|
|
||||||
|
var appHost, appPort;
|
||||||
|
if (options['app-port']) {
|
||||||
|
var appPortMatch = options['app-port'].match(/^(?:(.+):)?([0-9]+)?$/);
|
||||||
|
if (!appPortMatch) {
|
||||||
|
process.stderr.write(
|
||||||
|
"run: --app-port must be a number or be of the form 'host:port' where\n" +
|
||||||
|
"port is a number. Try 'meteor help run' for help.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
appHost = appPortMatch[1] || null;
|
||||||
|
// It's legit to specify `--app-port host:` and still let the port be
|
||||||
|
// randomized.
|
||||||
|
appPort = appPortMatch[2] ? parseInt(appPortMatch[2]) : null;
|
||||||
|
}
|
||||||
|
|
||||||
if (release.forced) {
|
if (release.forced) {
|
||||||
var appRelease = project.getMeteorReleaseVersion(options.appDir);
|
var appRelease = project.getMeteorReleaseVersion(options.appDir);
|
||||||
if (release.current.name !== appRelease) {
|
if (release.current.name !== appRelease) {
|
||||||
@@ -182,8 +208,10 @@ main.registerCommand({
|
|||||||
|
|
||||||
var runAll = require('./run-all.js');
|
var runAll = require('./run-all.js');
|
||||||
return runAll.run(options.appDir, {
|
return runAll.run(options.appDir, {
|
||||||
proxyPort: options.port,
|
proxyPort: proxyPort,
|
||||||
appPort: options['app-port'],
|
proxyHost: proxyHost,
|
||||||
|
appPort: appPort,
|
||||||
|
appHost: appHost,
|
||||||
settingsFile: options.settings,
|
settingsFile: options.settings,
|
||||||
program: options.program || undefined,
|
program: options.program || undefined,
|
||||||
buildOptions: {
|
buildOptions: {
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ the .meteor directory in the root of the project.
|
|||||||
Options:
|
Options:
|
||||||
--port, -p Port to listen on (instead of the default 3000). Also
|
--port, -p Port to listen on (instead of the default 3000). Also
|
||||||
uses port N+1 and a port specified by --app-port.
|
uses port N+1 and a port specified by --app-port.
|
||||||
|
Specify as --port=host:port to bind to a specific interface.
|
||||||
--production Simulate production mode. Minify and bundle CSS and JS files.
|
--production Simulate production mode. Minify and bundle CSS and JS files.
|
||||||
--raw-logs Run without parsing logs from stdout and stderr.
|
--raw-logs Run without parsing logs from stdout and stderr.
|
||||||
--settings Set optional data for Meteor.settings on the server
|
--settings Set optional data for Meteor.settings on the server
|
||||||
|
|||||||
@@ -29,11 +29,19 @@ var Runner = function (appDir, options) {
|
|||||||
self.stopped = false;
|
self.stopped = false;
|
||||||
self.quiet = options.quiet;
|
self.quiet = options.quiet;
|
||||||
self.banner = options.banner || files.prettyPath(self.appDir);
|
self.banner = options.banner || files.prettyPath(self.appDir);
|
||||||
self.rootUrl = options.rootUrl || ('http://localhost:' + listenPort + '/');
|
if (options.rootUrl) {
|
||||||
|
self.rootUrl = options.rootUrl;
|
||||||
|
} else if (options.proxyHost) {
|
||||||
|
self.rootUrl = 'http://' + options.proxyHost + ':' + listenPort + '/';
|
||||||
|
} else {
|
||||||
|
self.rootUrl = 'http://localhost:' + listenPort + '/';
|
||||||
|
}
|
||||||
|
|
||||||
self.proxy = new Proxy({
|
self.proxy = new Proxy({
|
||||||
listenPort: listenPort,
|
listenPort: listenPort,
|
||||||
|
listenHost: options.proxyHost,
|
||||||
proxyToPort: self.appPort,
|
proxyToPort: self.appPort,
|
||||||
|
proxyToHost: options.appHost,
|
||||||
onFailure: options.onFailure
|
onFailure: options.onFailure
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -61,6 +69,7 @@ var Runner = function (appDir, options) {
|
|||||||
self.appRunner = new AppRunner(appDir, {
|
self.appRunner = new AppRunner(appDir, {
|
||||||
appDirForVersionCheck: options.appDirForVersionCheck,
|
appDirForVersionCheck: options.appDirForVersionCheck,
|
||||||
port: self.appPort,
|
port: self.appPort,
|
||||||
|
listenHost: options.appHost,
|
||||||
mongoUrl: mongoUrl,
|
mongoUrl: mongoUrl,
|
||||||
oplogUrl: oplogUrl,
|
oplogUrl: oplogUrl,
|
||||||
buildOptions: options.buildOptions,
|
buildOptions: options.buildOptions,
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ var AppProcess = function (options) {
|
|||||||
|
|
||||||
self.bundlePath = options.bundlePath;
|
self.bundlePath = options.bundlePath;
|
||||||
self.port = options.port;
|
self.port = options.port;
|
||||||
|
self.listenHost = options.listenHost;
|
||||||
self.rootUrl = options.rootUrl;
|
self.rootUrl = options.rootUrl;
|
||||||
self.mongoUrl = options.mongoUrl;
|
self.mongoUrl = options.mongoUrl;
|
||||||
self.oplogUrl = options.oplogUrl;
|
self.oplogUrl = options.oplogUrl;
|
||||||
@@ -168,12 +169,19 @@ _.extend(AppProcess.prototype, {
|
|||||||
env.PORT = self.port;
|
env.PORT = self.port;
|
||||||
env.ROOT_URL = self.rootUrl;
|
env.ROOT_URL = self.rootUrl;
|
||||||
env.MONGO_URL = self.mongoUrl;
|
env.MONGO_URL = self.mongoUrl;
|
||||||
if (self.oplogUrl)
|
if (self.oplogUrl) {
|
||||||
env.MONGO_OPLOG_URL = self.oplogUrl;
|
env.MONGO_OPLOG_URL = self.oplogUrl;
|
||||||
if (self.settings)
|
}
|
||||||
|
if (self.settings) {
|
||||||
env.METEOR_SETTINGS = self.settings;
|
env.METEOR_SETTINGS = self.settings;
|
||||||
else
|
} else {
|
||||||
delete env.METEOR_SETTINGS;
|
delete env.METEOR_SETTINGS;
|
||||||
|
}
|
||||||
|
if (self.listenHost) {
|
||||||
|
env.BIND_IP = self.listenHost;
|
||||||
|
} else {
|
||||||
|
delete env.BIND_IP;
|
||||||
|
}
|
||||||
|
|
||||||
// Display errors from (eg) the NPM connect module over the network.
|
// Display errors from (eg) the NPM connect module over the network.
|
||||||
env.NODE_ENV = 'development';
|
env.NODE_ENV = 'development';
|
||||||
@@ -306,6 +314,7 @@ var AppRunner = function (appDir, options) {
|
|||||||
self.appDirForVersionCheck = options.appDirForVersionCheck || self.appDir;
|
self.appDirForVersionCheck = options.appDirForVersionCheck || self.appDir;
|
||||||
// note: run-all.js updates port directly
|
// note: run-all.js updates port directly
|
||||||
self.port = options.port;
|
self.port = options.port;
|
||||||
|
self.listenHost = options.listenHost;
|
||||||
self.mongoUrl = options.mongoUrl;
|
self.mongoUrl = options.mongoUrl;
|
||||||
self.oplogUrl = options.oplogUrl;
|
self.oplogUrl = options.oplogUrl;
|
||||||
self.buildOptions = options.buildOptions;
|
self.buildOptions = options.buildOptions;
|
||||||
@@ -444,6 +453,7 @@ _.extend(AppRunner.prototype, {
|
|||||||
var appProcess = new AppProcess({
|
var appProcess = new AppProcess({
|
||||||
bundlePath: bundlePath,
|
bundlePath: bundlePath,
|
||||||
port: self.port,
|
port: self.port,
|
||||||
|
listenHost: self.listenHost,
|
||||||
rootUrl: self.rootUrl,
|
rootUrl: self.rootUrl,
|
||||||
mongoUrl: self.mongoUrl,
|
mongoUrl: self.mongoUrl,
|
||||||
oplogUrl: self.oplogUrl,
|
oplogUrl: self.oplogUrl,
|
||||||
|
|||||||
@@ -2,13 +2,15 @@ var _ = require('underscore');
|
|||||||
var Future = require('fibers/future');
|
var Future = require('fibers/future');
|
||||||
var runLog = require('./run-log.js');
|
var runLog = require('./run-log.js');
|
||||||
|
|
||||||
// options: listenPort, proxyToPort, onFailure
|
// options: listenPort, proxyToPort, proxyToHost, onFailure
|
||||||
var Proxy = function (options) {
|
var Proxy = function (options) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.listenPort = options.listenPort;
|
self.listenPort = options.listenPort;
|
||||||
|
self.listenHost = options.listenHost;
|
||||||
// note: run-all.js updates proxyToPort directly
|
// note: run-all.js updates proxyToPort directly
|
||||||
self.proxyToPort = options.proxyToPort;
|
self.proxyToPort = options.proxyToPort;
|
||||||
|
self.proxyToHost = options.proxyToHost || '127.0.0.1';
|
||||||
self.onFailure = options.onFailure || function () {};
|
self.onFailure = options.onFailure || function () {};
|
||||||
|
|
||||||
self.mode = "hold";
|
self.mode = "hold";
|
||||||
@@ -91,7 +93,7 @@ _.extend(Proxy.prototype, {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
self.server.listen(self.listenPort, function () {
|
self.server.listen(self.listenPort, self.listenHost || '0.0.0.0', function () {
|
||||||
if (self.server) {
|
if (self.server) {
|
||||||
self.started = true;
|
self.started = true;
|
||||||
} else {
|
} else {
|
||||||
@@ -167,7 +169,7 @@ _.extend(Proxy.prototype, {
|
|||||||
c.res.end();
|
c.res.end();
|
||||||
} else {
|
} else {
|
||||||
self.proxy.web(c.req, c.res, {
|
self.proxy.web(c.req, c.res, {
|
||||||
target: 'http://127.0.0.1:' + self.proxyToPort
|
target: 'http://' + self.proxyToHost + ':' + self.proxyToPort
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -178,7 +180,7 @@ _.extend(Proxy.prototype, {
|
|||||||
|
|
||||||
var c = self.websocketQueue.shift();
|
var c = self.websocketQueue.shift();
|
||||||
self.proxy.ws(c.req, c.socket, c.head, {
|
self.proxy.ws(c.req, c.socket, c.head, {
|
||||||
target: 'http://127.0.0.1:' + self.proxyToPort
|
target: 'http://' + self.proxyToHost + ':' + self.proxyToPort
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user