diff --git a/.gitignore b/.gitignore index 1eb0ee09..87d54958 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ logs *.log npm-debug.log* +/logs # Runtime data pids diff --git a/README.md b/README.md index 1902efba..6b23df34 100644 --- a/README.md +++ b/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) diff --git a/npm/README.md b/npm/README.md index 12427fe2..c460e306 100644 --- a/npm/README.md +++ b/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) diff --git a/npm/install.js b/npm/install.js index 921c4c04..c81bff97 100644 --- a/npm/install.js +++ b/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() }) diff --git a/wiki.js b/wiki.js index adbea571..070f5d6a 100644 --- a/wiki.js +++ b/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) }) })