| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | 'use strict'const Promise = require('bluebird')const fs = Promise.promisifyAll(require('fs-extra'))const pm2 = Promise.promisifyAll(require('pm2'))const ora = require('ora')const path = require('path')const ROOTPATH = process.cwd()module.exports = {  /**   * Detect the most appropriate start mode   */  startDetect: function () {    if (process.env.WIKI_JS_HEROKU) {      return this.startInHerokuMode()    } else {      return this.startInBackgroundMode()    }  },  /**   * Start in background mode   */  startInBackgroundMode: function () {    let spinner = ora('Initializing...').start()    return fs.emptyDirAsync(path.join(ROOTPATH, './logs')).then(() => {      return pm2.connectAsync().then(() => {        return pm2.startAsync({          name: 'wiki',          script: 'server',          cwd: ROOTPATH,          output: path.join(ROOTPATH, './logs/wiki-output.log'),          error: path.join(ROOTPATH, './logs/wiki-error.log'),          minUptime: 5000,          maxRestarts: 5        }).then(() => {          spinner.succeed('Wiki.js has started successfully.')        }).finally(() => {          pm2.disconnect()        })      })    }).catch(err => {      spinner.fail(err)      process.exit(1)    })  },  /**   * Start in Heroku mode   */  startInHerokuMode: function () {    console.warn('Incorrect command on Heroku, use instead: node server')    process.exit(1)  },  /**   * Stop Wiki.js process(es)   */  stop () {    let spinner = ora('Shutting down Wiki.js...').start()    return pm2.connectAsync().then(() => {      return pm2.stopAsync('wiki').then(() => {        spinner.succeed('Wiki.js has stopped successfully.')      }).finally(() => {        pm2.disconnect()      })    }).catch(err => {      spinner.fail(err)      process.exit(1)    })  },  /**   * Restart Wiki.js process(es)   */  restart: function () {    let self = this    return self.stop().delay(1000).then(() => {      self.startDetect()    })  },  /**   * Start the web-based configuration wizard   *   * @param {Number} port Port to bind the HTTP server on   */  configure (port) {    port = port || 3000    let spinner = ora('Initializing interactive setup...').start()    require('./configure')(port, spinner)  }}
 |