start(rootApp) {
        debug('Starting...');
        this.rootApp = rootApp;

        const {host, port, testmode, shutdownTimeout} = this.serverConfig;
        const self = this;

        return new Promise(function (resolve, reject) {
            self.httpServer = rootApp.listen(
                port,
                host
            );

            self.httpServer.on('error', function (error) {
                let ghostError;

                if (error.code === 'EADDRINUSE') {
                    ghostError = new errors.InternalServerError({
                        message: tpl(messages.addressInUse.error),
                        context: tpl(messages.addressInUse.context, {port}),
                        help: tpl(messages.addressInUse.help)
                    });
                } else {
                    ghostError = new errors.InternalServerError({
                        message: tpl(messages.otherError.error, {errorNumber: error.errno}),
                        context: tpl(messages.otherError.context),
                        help: tpl(messages.otherError.help)
                    });
                }

                debug('Notifying server started (error)');
                return notify.notifyServerStarted()
                    .finally(() => {
                        reject(ghostError);
                    });
            });

            self.httpServer.on('listening', function () {
                debug('...Started');
                self._logStartMessages();

                // Debug logs output in testmode only
                if (testmode) {
                    self._startTestMode();
                }

                debug('Notifying server ready (success)');
                return notify.notifyServerStarted()
                    .finally(() => {
                        resolve(self);
                    });
            });

            stoppable(self.httpServer, shutdownTimeout);

            // ensure that Ghost exits correctly on Ctrl+C and SIGTERM
            process
                .removeAllListeners('SIGINT').on('SIGINT', () => self.shutdown())
                .removeAllListeners('SIGTERM').on('SIGTERM', () => self.shutdown());
        });
    }
## Public API methods

### Start
Starts the ghost server listening on the configured port.
Requires an express app to be passed in

@param  {import('express').Application} rootApp - Required express app instance.
@return {Promise} Resolves once Ghost has started