fix: Install fixes + localization home key
This commit is contained in:
parent
fa68da3396
commit
bbaf311372
109
npm/install.js
109
npm/install.js
@ -19,6 +19,8 @@ const tar = require('tar')
|
||||
const zlib = require('zlib')
|
||||
|
||||
const installDir = path.resolve(__dirname, '../..')
|
||||
const isContainerBased = (process.env.WIKI_JS_HEROKU || process.env.WIKI_JS_DOCKER)
|
||||
let installMode = 'new'
|
||||
|
||||
// =====================================================
|
||||
// INSTALLATION TASKS
|
||||
@ -28,7 +30,7 @@ const tasks = {
|
||||
/**
|
||||
* Stop and delete existing instances
|
||||
*/
|
||||
stopAndDeleteInstances () {
|
||||
stopAndDeleteInstances() {
|
||||
ora.text = 'Looking for running instances...'
|
||||
return pm2.connectAsync().then(() => {
|
||||
return pm2.describeAsync('wiki').then(() => {
|
||||
@ -39,14 +41,16 @@ const tasks = {
|
||||
}).finally(() => {
|
||||
pm2.disconnect()
|
||||
})
|
||||
}).catch(err => { // eslint-disable-line handle-callback-err
|
||||
return true
|
||||
})
|
||||
},
|
||||
/**
|
||||
* Check for sufficient memory
|
||||
*/
|
||||
checkRequirements () {
|
||||
checkRequirements() {
|
||||
ora.text = 'Checking system requirements...'
|
||||
if (os.totalmem() < 1024 * 1024 * 768) {
|
||||
if (os.totalmem() < 1000 * 1000 * 768) {
|
||||
return Promise.reject(new Error('Not enough memory to install dependencies. Minimum is 768 MB.'))
|
||||
} else {
|
||||
return Promise.resolve(true)
|
||||
@ -55,7 +59,7 @@ const tasks = {
|
||||
/**
|
||||
* Install via local tarball if present
|
||||
*/
|
||||
installFromLocal () {
|
||||
installFromLocal() {
|
||||
let hasTarball = true
|
||||
let tbPath = path.join(installDir, 'wiki-js.tar.gz')
|
||||
return fs.accessAsync(tbPath)
|
||||
@ -67,7 +71,7 @@ const tasks = {
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
fs.createReadStream(tbPath).pipe(zlib.createGunzip())
|
||||
.pipe(tar.Extract({ path: installDir }))
|
||||
.pipe(tar.extract({ cwd: installDir }))
|
||||
.on('error', err => reject(err))
|
||||
.on('end', () => {
|
||||
ora.text = 'Tarball extracted successfully.'
|
||||
@ -82,7 +86,7 @@ const tasks = {
|
||||
/**
|
||||
* Install from GitHub release download
|
||||
*/
|
||||
installFromRemote () {
|
||||
installFromRemote() {
|
||||
// Fetch version from npm package
|
||||
return fs.readJsonAsync('package.json').then((packageObj) => {
|
||||
let versionGet = _.chain(packageObj.version).split('.').take(4).join('.')
|
||||
@ -96,23 +100,50 @@ const tasks = {
|
||||
return reject(new Error('Remote file not found'))
|
||||
}
|
||||
ora.text = 'Remote wiki.js tarball found. Downloading...'
|
||||
isContainerBased && console.info('>> Extracting to ' + installDir)
|
||||
|
||||
// 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)
|
||||
})
|
||||
.pipe(tar.extract({ cwd: installDir }))
|
||||
.on('error', err => reject(err))
|
||||
.on('end', () => {
|
||||
ora.text = 'Tarball extracted successfully.'
|
||||
resolve(true)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* Create default config.yml file if new installation
|
||||
*/
|
||||
ensureConfigFile() {
|
||||
return fs.accessAsync(path.join(installDir, 'config.yml')).then(() => {
|
||||
// Is Upgrade
|
||||
ora.text = 'Existing config.yml found. Upgrade mode.'
|
||||
installMode = 'upgrade'
|
||||
return true
|
||||
}).catch(err => {
|
||||
// Is New Install
|
||||
if (err.code === 'ENOENT') {
|
||||
ora.text = 'First-time install, creating a new config.yml...'
|
||||
installMode = 'new'
|
||||
let sourceConfigFile = path.join(installDir, 'config.sample.yml')
|
||||
if (process.env.WIKI_JS_HEROKU) {
|
||||
sourceConfigFile = path.join(__dirname, 'configs/config.heroku.yml')
|
||||
} else if (process.env.WIKI_JS_DOCKER) {
|
||||
sourceConfigFile = path.join(__dirname, 'configs/config.docker.yml')
|
||||
}
|
||||
return fs.copyAsync(sourceConfigFile, path.join(installDir, 'config.yml'))
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* Install npm dependencies
|
||||
*/
|
||||
installDependencies () {
|
||||
installDependencies() {
|
||||
ora.text = 'Installing Wiki.js npm dependencies...'
|
||||
return exec.stdout('npm', ['install', '--only=production', '--no-optional'], {
|
||||
cwd: installDir
|
||||
@ -121,42 +152,20 @@ const tasks = {
|
||||
return true
|
||||
})
|
||||
},
|
||||
/**
|
||||
* Create default config.yml file if new installation
|
||||
*/
|
||||
ensureConfigFile () {
|
||||
return fs.accessAsync(path.join(installDir, 'config.yml')).then(() => {
|
||||
// Is Upgrade
|
||||
ora.succeed('Upgrade completed.')
|
||||
console.info(colors.yellow('\n!!! IMPORTANT !!!'))
|
||||
console.info(colors.yellow('Running the configuration wizard is optional but recommended after an upgrade to ensure your config file is using the latest available settings.'))
|
||||
console.info(colors.yellow('Note that the contents of your config file will be displayed during the configuration wizard. It is therefor highly recommended to run the wizard on a non-publicly accessible port or skip this step completely.\n'))
|
||||
return true
|
||||
}).catch(err => {
|
||||
// Is New Install
|
||||
if (err.code === 'ENOENT') {
|
||||
ora.text = 'First-time install, creating a new config.yml...'
|
||||
let sourceConfigFile = path.join(installDir, 'config.sample.yml')
|
||||
if (process.env.WIKI_JS_HEROKU) {
|
||||
sourceConfigFile = path.join(__dirname, 'configs/config.heroku.yml')
|
||||
} else if (process.env.WIKI_JS_DOCKER) {
|
||||
sourceConfigFile = path.join(__dirname, 'configs/config.docker.yml')
|
||||
}
|
||||
return fs.copyAsync(sourceConfigFile, path.join(installDir, 'config.yml')).then(() => {
|
||||
ora.succeed('Installation succeeded.')
|
||||
return true
|
||||
})
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
})
|
||||
},
|
||||
startConfigurationWizard () {
|
||||
startConfigurationWizard() {
|
||||
ora.succeed('Installation succeeded.')
|
||||
if (process.env.WIKI_JS_HEROKU) {
|
||||
console.info('Wiki.js has been installed and is configured to use Heroku configuration.')
|
||||
console.info('> Wiki.js has been installed and is configured to use Heroku configuration.')
|
||||
return true
|
||||
} else if (process.env.WIKI_JS_DOCKER) {
|
||||
console.info('Docker environment detected. Skipping setup wizard auto-start.')
|
||||
return true
|
||||
} else if (process.stdout.isTTY) {
|
||||
if (installMode === 'upgrade') {
|
||||
console.info(colors.yellow('\n!!! IMPORTANT !!!'))
|
||||
console.info(colors.yellow('Running the configuration wizard is optional but recommended after an upgrade to ensure your config file is using the latest available settings.'))
|
||||
console.info(colors.yellow('Note that the contents of your config file will be displayed during the configuration wizard. It is therefor highly recommended to run the wizard on a non-publicly accessible port or skip this step completely.\n'))
|
||||
}
|
||||
inquirer.prompt([{
|
||||
type: 'list',
|
||||
name: 'action',
|
||||
@ -215,7 +224,7 @@ const tasks = {
|
||||
// INSTALL SEQUENCE
|
||||
// =====================================================
|
||||
|
||||
if (!process.env.WIKI_JS_HEROKU && !process.env.WIKI_JS_DOCKER) {
|
||||
if (!isContainerBased) {
|
||||
console.info(colors.yellow(
|
||||
' __ __ _ _ _ _ \n' +
|
||||
'/ / /\\ \\ (_) | _(_) (_)___ \n' +
|
||||
@ -233,15 +242,19 @@ Promise.join(
|
||||
tasks.stopAndDeleteInstances(),
|
||||
tasks.checkRequirements()
|
||||
).then(() => {
|
||||
isContainerBased && console.info('>> Fetching tarball...')
|
||||
return tasks.installFromLocal().then(succeeded => {
|
||||
return (!succeeded) ? tasks.installFromRemote() : true
|
||||
})
|
||||
}).then(() => {
|
||||
return tasks.installDependencies()
|
||||
}).then(() => {
|
||||
isContainerBased && console.info('>> Creating config file...')
|
||||
return tasks.ensureConfigFile()
|
||||
}).then(() => {
|
||||
isContainerBased && console.info('>> Installing dependencies...')
|
||||
return tasks.installDependencies()
|
||||
}).then(() => {
|
||||
return tasks.startConfigurationWizard()
|
||||
}).catch(err => {
|
||||
isContainerBased && console.error(err)
|
||||
ora.fail(err)
|
||||
})
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wiki.js",
|
||||
"version": "1.0.0-beta.12.4",
|
||||
"version": "1.0.0-beta.12.12",
|
||||
"description": "A modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown",
|
||||
"main": "install.js",
|
||||
"scripts": {
|
||||
|
@ -27,6 +27,7 @@
|
||||
"move": "Move",
|
||||
"myprofile": "My Profile",
|
||||
"normalview": "Normal View",
|
||||
"root": "Home",
|
||||
"savechanges": "Save Changes",
|
||||
"savedocument": "Save Document",
|
||||
"settings": "Settings",
|
||||
@ -46,4 +47,4 @@
|
||||
"source": "Loading source...",
|
||||
"editor": "Loading editor..."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ block rootNavRight
|
||||
.nav-item
|
||||
a.button.btn-edit-discard(href='/')
|
||||
i.icon-home
|
||||
span= t('nav.home')
|
||||
span= t('nav.root')
|
||||
|
||||
block content
|
||||
|
||||
@ -25,7 +25,7 @@ block content
|
||||
li
|
||||
a(href='/')
|
||||
i.icon-home
|
||||
span= t('nav.home')
|
||||
span= t('nav.root')
|
||||
|
||||
aside
|
||||
.sidebar-label
|
||||
|
@ -10,7 +10,7 @@ block content
|
||||
li
|
||||
a(href='/')
|
||||
i.icon-home
|
||||
span= t('nav.home')
|
||||
span= t('nav.root')
|
||||
if !isGuest
|
||||
li
|
||||
a(href='/admin')
|
||||
|
@ -44,7 +44,7 @@ block content
|
||||
li
|
||||
a(href='/')
|
||||
i.icon-home
|
||||
span= t('nav.home')
|
||||
span= t('nav.root')
|
||||
li
|
||||
a(href='/all')
|
||||
i.icon-paper
|
||||
|
Loading…
Reference in New Issue
Block a user