Files
NodeBB/app.js

190 lines
7.0 KiB
JavaScript
Raw Normal View History

2013-07-11 12:14:49 -04:00
/*
NodeBB - A forum powered by node in development by designcreateplay
Copyright (C) 2013 DesignCreatePlay Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function () {
"use strict";
// Configuration setup
var nconf = require('nconf');
nconf.argv().env();
var fs = require('fs'),
async = require('async'),
2013-12-07 19:18:57 -05:00
semver = require('semver'),
winston = require('winston'),
path = require('path'),
pkg = require('./package.json'),
utils = require('./public/src/utils.js'),
meta;
// Runtime environment
global.env = process.env.NODE_ENV || 'production';
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {
colorize: true
});
winston.add(winston.transports.File, {
filename: 'error.log',
level: 'error'
});
// TODO: remove once https://github.com/flatiron/winston/issues/280 is fixed
winston.err = function (err) {
winston.error(err.stack);
};
2013-12-07 16:51:47 -05:00
require('child_process').exec('/usr/bin/which convert', function(err, stdout, stderr) {
2013-12-07 17:03:07 -05:00
if(err || !stdout) {
2013-12-08 14:49:47 -05:00
winston.warn('Couldn\'t find convert. Did you install imagemagick?');
2013-12-07 16:51:47 -05:00
}
});
// Log GNU copyright info along with server info
winston.info('NodeBB v' + pkg.version + ' Copyright (C) 2013 DesignCreatePlay Inc.');
winston.info('This program comes with ABSOLUTELY NO WARRANTY.');
winston.info('This is free software, and you are welcome to redistribute it under certain conditions.');
winston.info('');
2013-09-10 16:26:26 -04:00
if (!nconf.get('help') && !nconf.get('setup') && !nconf.get('install') && !nconf.get('upgrade') && fs.existsSync(__dirname + '/config.json')) {
// Load server-side configs
nconf.file({
file: __dirname + '/config.json'
});
meta = require('./src/meta');
2014-01-22 14:04:04 -05:00
nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path'));
nconf.set('upload_url', path.join(path.sep, nconf.get('relative_path'), 'uploads', path.sep));
2013-11-19 13:04:12 -05:00
nconf.set('base_dir', __dirname);
2013-08-19 13:31:04 -04:00
winston.info('Time: ' + new Date());
winston.info('Initializing NodeBB v' + pkg.version + ', on port ' + nconf.get('port') + ', using ' + nconf.get('database') +' store at ' + nconf.get(nconf.get('database') + ':host') + ':' + nconf.get(nconf.get('database') + ':port') + '.');
winston.info('NodeBB instance bound to: ' + ((nconf.get('bind_address') === "0.0.0.0" || !nconf.get('bind_address')) ? 'Any address (0.0.0.0)' : nconf.get('bind_address')));
if (process.env.NODE_ENV === 'development') {
winston.info('Base Configuration OK.');
2013-08-26 17:10:41 -04:00
}
2014-01-18 16:01:09 -05:00
if (!semver.satisfies(require('./node_modules/nodebb-theme-cerulean/package.json').version, pkg.dependencies['nodebb-theme-cerulean'])) {
2014-01-05 23:57:43 -05:00
winston.error('nodebb-theme-cerulean is out of date - please run npm install.');
}
if (!semver.satisfies(require('./node_modules/nodebb-theme-vanilla/package.json').version, pkg.dependencies['nodebb-theme-vanilla'])) {
winston.error('nodebb-theme-vanilla is out of date - please run npm install.');
2013-12-07 19:18:57 -05:00
}
require('./src/database').init(function(err) {
meta.configs.init(function () {
var templates = require('./public/src/templates'),
translator = require('./public/src/translator'),
webserver = require('./src/webserver'),
sockets = require('./src/socket.io'),
plugins = require('./src/plugins'),
notifications = require('./src/notifications'),
upgrade = require('./src/upgrade');
templates.setGlobal('relative_path', nconf.get('relative_path'));
upgrade.check(function(schema_ok) {
if (schema_ok || nconf.get('check-schema') === false) {
sockets.init();
plugins.init();
global.templates = {};
global.translator = translator;
translator.loadServer();
var customTemplates = meta.config['theme:templates'] ? path.join(__dirname, 'node_modules', meta.config['theme:id'], meta.config['theme:templates']) : false;
2013-12-31 17:01:51 -05:00
utils.walk(path.join(__dirname, 'public/templates'), function (err, tplsToLoad) {
templates.init(tplsToLoad, customTemplates);
});
2013-12-31 17:01:51 -05:00
plugins.ready(function() {
templates.ready(webserver.init);
});
notifications.init();
} else {
winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:');
winston.warn(' node app --upgrade');
winston.warn('To ignore this error (not recommended):');
winston.warn(' node app --no-check-schema')
process.exit();
}
});
});
});
} else if (nconf.get('setup') || nconf.get('install') || !fs.existsSync(__dirname + '/config.json')) {
// New install, ask setup questions
if (nconf.get('setup')) {
winston.info('NodeBB Setup Triggered via Command Line');
} else {
winston.warn('Configuration not found, starting NodeBB setup');
}
nconf.file({
file: __dirname + '/config.json'
});
2014-01-05 18:27:13 -05:00
var templates = require('./public/src/templates'),
install = require('./src/install');
2013-08-23 13:14:36 -04:00
winston.info('Welcome to NodeBB!');
winston.info('This looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.');
winston.info('Press enter to accept the default setting (shown in brackets).');
2013-09-10 16:26:26 -04:00
install.setup(function (err) {
if (err) {
winston.error('There was a problem completing NodeBB setup: ', err.message);
} else {
winston.info('NodeBB Setup Completed. Run \'./nodebb start\' to manually start your NodeBB server.');
}
2013-08-23 13:14:36 -04:00
process.exit();
});
} else if (nconf.get('upgrade')) {
nconf.file({
file: __dirname + '/config.json'
});
require('./src/database').init(function(err) {
meta = require('./src/meta.js');
meta.configs.init(function () {
require('./src/upgrade').upgrade();
});
});
} else/* if (nconf.get('help') */{
winston.info('Usage: node app [options] [arguments]');
winston.info(' [NODE_ENV=development | NODE_ENV=production] node app [--start] [arguments]');
winston.info('');
winston.info('Options:');
winston.info(' --help displays this usage information');
winston.info(' --setup configure your environment and setup NodeBB');
winston.info(' --upgrade upgrade NodeBB, first read: github.com/designcreateplay/NodeBB/wiki/Upgrading-NodeBB');
winston.info(' --start manually start NodeBB (default when no options are given)');
};
}());