/** * This is the main entry point for the web server which serves Dashy * Reads some config, runs some checks, prints a lil welcome, starts server * Registers the Express app.js, which has all the routes, middleware, auth * Note: The app must first be built (yarn build) before this script is run * */ const dns = require('dns'); const os = require('os'); const http = require('http'); const app = require('./services/app'); const sslServer = require('./services/ssl-server'); const printMessage = require('./services/print-message'); /* Checks if app is running within a container, from env var */ const isDocker = !!process.env.IS_DOCKER; /* Checks env var for port. If undefined, will use Port 8080 for Docker, or 4000 for metal */ const port = process.env.PORT || (isDocker ? 8080 : 4000); /* Checks env var for host. If undefined, will use 0.0.0.0 */ const host = process.env.HOST || '0.0.0.0'; /* Gets the users local IP and port, then calls to print welcome message */ const printWelcomeMessage = () => { dns.promises.lookup(os.hostname()) .then(({ address }) => { const ip = process.env.HOST || address || 'localhost'; console.log(printMessage(ip, port, isDocker)); // eslint-disable-line no-console }) .catch(() => { console.log(`Dashy server has started (${port})`); // eslint-disable-line no-console }); }; /* Create HTTP server from app on port, and print welcome message */ http.createServer(app) .listen(port, host, () => { printWelcomeMessage(); }) .on('error', (err) => { console.warn('Unable to start Dashy\'s Node server\n', err); // eslint-disable-line no-console }); /* Check, and if possible start SSL server too */ sslServer.startSSLServer(app);