Browse Source

npm install fixes + logs folder

NGPixel 8 years ago
parent
commit
f311d74a08
5 changed files with 71 additions and 50 deletions
  1. 1 0
      .gitignore
  2. 1 1
      README.md
  3. 1 3
      npm/README.md
  4. 48 33
      npm/install.js
  5. 20 13
      wiki.js

+ 1 - 0
.gitignore

@@ -2,6 +2,7 @@
 logs
 *.log
 npm-debug.log*
+/logs
 
 # Runtime data
 pids

+ 1 - 1
README.md

@@ -7,7 +7,7 @@
 [![Release](https://img.shields.io/github/release/Requarks/wiki.svg?style=flat-square&maxAge=3600)](https://github.com/Requarks/wiki/releases)
 [![License](https://img.shields.io/badge/license-AGPLv3-blue.svg?style=flat-square)](https://github.com/requarks/wiki/blob/master/LICENSE)
 [![npm](https://img.shields.io/badge/npm-wiki.js-blue.svg?style=flat-square)](https://www.npmjs.com/package/wiki.js)
-[![Github All Releases](https://img.shields.io/github/downloads/Requarks/wiki/total.svg?style=flat-square)](https://github.com/Requarks/wiki/releases/latest)
+[![npm Downloads](https://img.shields.io/npm/dt/wiki.js.svg?style=flat-square)](https://www.npmjs.com/package/wiki.js)  
 [![Build Status](https://img.shields.io/travis/Requarks/wiki/master.svg?style=flat-square)](https://travis-ci.org/Requarks/wiki)
 [![Codacy Badge](https://img.shields.io/codacy/grade/1d0217a3153c4595bdedb322263e55c8/master.svg?style=flat-square)](https://www.codacy.com/app/Requarks/wiki)
 [![Dependency Status](https://img.shields.io/gemnasium/Requarks/wiki.svg?style=flat-square)](https://gemnasium.com/github.com/Requarks/wiki)

+ 1 - 3
npm/README.md

@@ -8,9 +8,7 @@
 [![Release](https://img.shields.io/github/release/Requarks/wiki.svg?style=flat-square&maxAge=3600)](https://github.com/Requarks/wiki/releases)
 [![License](https://img.shields.io/badge/license-AGPLv3-blue.svg?style=flat-square)](https://github.com/requarks/wiki/blob/master/LICENSE)
 
-##### A modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown
-
-This npm package is an installer for Wiki.js. For information about Wiki.js, use the following links:
+This npm package is an installer for Wiki.js. For information about Wiki.js, including detailed installation steps, read the following links:
 
 - [Official Website](https://wiki.requarks.io/)
 - [Installation Guide](https://wiki.requarks.io/get-started.html)

+ 48 - 33
npm/install.js

@@ -13,32 +13,43 @@ const _ = require('lodash')
 
 let installDir = path.resolve(__dirname, '../..')
 
-/**
- * Fetch version from npm package
- */
-fs.readJsonAsync('package.json').then((packageObj) => {
-  let remoteURL = _.replace('https://github.com/Requarks/wiki/releases/download/v{0}/wiki-js.tar.gz', '{0}', packageObj.version)
-
-  return new Promise((resolve, reject) => {
-    /**
-     * Fetch tarball
-     */
-    ora.text = 'Looking for latest release...'
-    https.get(remoteURL, resp => {
-      if (resp.statusCode !== 200) {
-        return reject(new Error('Remote file not found'))
-      }
-      ora.text = 'Install tarball found. Downloading...'
+ora.text = 'Looking for running instances...'
+pm2.connectAsync().then(() => {
+  return pm2.describeAsync('wiki').then(() => {
+    ora.text = 'Stopping and deleting from pm2...'
+    return pm2.deleteAsync('wiki')
+  }).catch(err => { // eslint-disable-line handle-callback-err
+    return true
+  })
+}).then(() => {
+  /**
+   * Fetch version from npm package
+   */
+  return fs.readJsonAsync('package.json').then((packageObj) => {
+    let versionGet = _.chain(packageObj.version).split('.').take(4).join('.')
+    let remoteURL = _.replace('https://github.com/Requarks/wiki/releases/download/v{0}/wiki-js.tar.gz', '{0}', versionGet)
 
+    return new Promise((resolve, reject) => {
       /**
-       * Extract tarball
+       * Fetch tarball
        */
-      resp.pipe(zlib.createGunzip())
-      .pipe(tar.Extract({ path: installDir }))
-      .on('error', err => reject(err))
-      .on('end', () => {
-        ora.text = 'Tarball extracted successfully.'
-        resolve(true)
+      ora.text = 'Looking for latest release...'
+      https.get(remoteURL, resp => {
+        if (resp.statusCode !== 200) {
+          return reject(new Error('Remote file not found'))
+        }
+        ora.text = 'Install tarball found. Downloading...'
+
+        /**
+         * Extract tarball
+         */
+        resp.pipe(zlib.createGunzip())
+        .pipe(tar.Extract({ path: installDir }))
+        .on('error', err => reject(err))
+        .on('end', () => {
+          ora.text = 'Tarball extracted successfully.'
+          resolve(true)
+        })
       })
     })
   })
@@ -62,17 +73,19 @@ fs.readJsonAsync('package.json').then((packageObj) => {
     /**
      * Upgrade mode
      */
-    ora.text = 'Upgrade succeeded. Reloading Wiki.js...'
-    return pm2.connectAsync().then(() => {
-      return pm2.restartAsync('wiki').catch(err => { // eslint-disable-line handle-callback-err
-        return new Error('Unable to restart Wiki.js via pm2... Do a manual restart!')
-      }).then(() => {
-        ora.succeed('Wiki.js has restarted. Upgrade completed.')
+    return new Promise((resolve, reject) => {
+      ora.text = 'Upgrade succeeded. Starting Wiki.js...'
+      let npmInstallProc = exec('wiki start', {
+        cwd: installDir
+      })
+      npmInstallProc.stdout.pipe(process.stdout)
+      npmInstallProc.on('error', err => {
+        reject(err)
+      })
+      .on('exit', () => {
+        ora.succeed('Wiki.js has started. Upgrade completed.')
+        resolve(true)
       })
-    }).catch(err => {
-      ora.fail(err)
-    }).finally(() => {
-      pm2.disconnect()
     })
   }).catch(err => {
     /**
@@ -89,4 +102,6 @@ fs.readJsonAsync('package.json').then((packageObj) => {
   })
 }).catch(err => {
   ora.fail(err)
+}).finally(() => {
+  pm2.disconnect()
 })

+ 20 - 13
wiki.js

@@ -1,11 +1,12 @@
 #!/usr/bin/env node
 'use strict'
 
-const fs = require('fs-extra')
-const ora = require('ora')
 const Promise = require('bluebird')
+const fs = Promise.promisifyAll(require('fs-extra'))
+const ora = require('ora')
 const pm2 = Promise.promisifyAll(require('pm2'))
 const cmdr = require('commander')
+const path = require('path')
 
 const packageObj = fs.readJsonSync('package.json')
 
@@ -15,18 +16,24 @@ cmdr.command('start')
   .description('Start Wiki.js process')
   .action(() => {
     let spinner = ora('Initializing...').start()
-    pm2.connectAsync().then(() => {
-      return pm2.startAsync({
-        name: 'wiki',
-        script: 'server.js',
-        cwd: __dirname
-      }).then(() => {
-        spinner.succeed('Wiki.js has started successfully.')
-      }).finally(() => {
-        pm2.disconnect()
+    fs.emptyDirAsync(path.join(__dirname, './logs')).then(() => {
+      return pm2.connectAsync().then(() => {
+        return pm2.startAsync({
+          name: 'wiki',
+          script: 'server.js',
+          cwd: __dirname,
+          output: path.join(__dirname, './logs/wiki-output.log'),
+          error: path.join(__dirname, './logs/wiki-error.log'),
+          minUptime: 5000,
+          maxRestarts: 5
+        }).then(() => {
+          spinner.succeed('Wiki.js has started successfully.')
+        }).finally(() => {
+          pm2.disconnect()
+        })
       })
     }).catch(err => {
-      console.error(err)
+      spinner.fail(err)
       process.exit(1)
     })
   })
@@ -42,7 +49,7 @@ cmdr.command('stop')
         pm2.disconnect()
       })
     }).catch(err => {
-      console.error(err)
+      spinner.fail(err)
       process.exit(1)
     })
   })