mirror of
https://github.com/zadam/trilium.git
synced 2025-03-02 01:53:11 +08:00
electron build uses random free port, fixes #142
This commit is contained in:
parent
365c37604b
commit
9452fc236b
5 changed files with 51 additions and 75 deletions
|
@ -3,6 +3,7 @@
|
|||
instanceName=
|
||||
|
||||
[Network]
|
||||
# port setting is relevant only for web deployments, desktop builds run on random free port
|
||||
port=8080
|
||||
# true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure).
|
||||
https=false
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
const electron = require('electron');
|
||||
const path = require('path');
|
||||
const config = require('./src/services/config');
|
||||
const log = require('./src/services/log');
|
||||
const url = require("url");
|
||||
const port = require('./src/services/port');
|
||||
|
||||
const app = electron.app;
|
||||
const globalShortcut = electron.globalShortcut;
|
||||
|
@ -23,7 +23,7 @@ function onClosed() {
|
|||
mainWindow = null;
|
||||
}
|
||||
|
||||
function createMainWindow() {
|
||||
async function createMainWindow() {
|
||||
const win = new electron.BrowserWindow({
|
||||
width: 1200,
|
||||
height: 900,
|
||||
|
@ -31,10 +31,8 @@ function createMainWindow() {
|
|||
icon: path.join(__dirname, 'src/public/images/app-icons/png/256x256.png')
|
||||
});
|
||||
|
||||
const port = config['Network']['port'] || '3000';
|
||||
|
||||
win.setMenu(null);
|
||||
win.loadURL('http://localhost:' + port);
|
||||
win.loadURL('http://localhost:' + await port);
|
||||
win.on('closed', onClosed);
|
||||
|
||||
win.webContents.on('new-window', (e, url) => {
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
"express": "~4.16.3",
|
||||
"express-session": "^1.15.6",
|
||||
"fs-extra": "^6.0.1",
|
||||
"get-port": "^4.0.0",
|
||||
"helmet": "^3.12.1",
|
||||
"html": "^1.0.0",
|
||||
"image-type": "^3.0.0",
|
||||
|
|
10
src/services/port.js
Normal file
10
src/services/port.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
const getPort = require('get-port');
|
||||
const config = require('./config');
|
||||
const utils = require('./utils');
|
||||
|
||||
if (utils.isElectron()) {
|
||||
module.exports = getPort();
|
||||
}
|
||||
else {
|
||||
module.exports = Promise.resolve(config['Network']['port'] || '3000');
|
||||
}
|
106
src/www
106
src/www
|
@ -18,70 +18,53 @@ const log = require('./services/log');
|
|||
const appInfo = require('./services/app_info');
|
||||
const messagingService = require('./services/messaging');
|
||||
const utils = require('./services/utils');
|
||||
const sqlInit = require('./services/sql_init.js');
|
||||
const sqlInit = require('./services/sql_init');
|
||||
const port = require('./services/port');
|
||||
|
||||
const port = normalizePort(config['Network']['port'] || '3000');
|
||||
app.set('port', port);
|
||||
|
||||
/**
|
||||
* Create HTTP server.
|
||||
*/
|
||||
let httpServer;
|
||||
|
||||
if (config['Network']['https']) {
|
||||
const options = {
|
||||
key: fs.readFileSync(config['Network']['keyPath']),
|
||||
cert: fs.readFileSync(config['Network']['certPath'])
|
||||
};
|
||||
async function startTrilium() {
|
||||
const usedPort = await port;
|
||||
|
||||
httpServer = https.createServer(options, app);
|
||||
app.set('port', usedPort);
|
||||
|
||||
log.info("App HTTPS server starting up at port " + port);
|
||||
}
|
||||
else {
|
||||
httpServer = http.createServer(app);
|
||||
if (config['Network']['https']) {
|
||||
const options = {
|
||||
key: fs.readFileSync(config['Network']['keyPath']),
|
||||
cert: fs.readFileSync(config['Network']['certPath'])
|
||||
};
|
||||
|
||||
log.info("App HTTP server starting up at port " + port);
|
||||
}
|
||||
httpServer = https.createServer(options, app);
|
||||
|
||||
log.info(JSON.stringify(appInfo, null, 2));
|
||||
log.info("App HTTPS server starting up at port " + usedPort);
|
||||
}
|
||||
else {
|
||||
httpServer = http.createServer(app);
|
||||
|
||||
/**
|
||||
* Listen on provided port, on all network interfaces.
|
||||
*/
|
||||
|
||||
httpServer.keepAliveTimeout = 120000 * 5;
|
||||
httpServer.listen(port);
|
||||
httpServer.on('error', onError);
|
||||
httpServer.on('listening', onListening);
|
||||
|
||||
sqlInit.dbReady.then(() => messagingService.init(httpServer, sessionParser));
|
||||
|
||||
if (utils.isElectron()) {
|
||||
const electronRouting = require('./routes/electron');
|
||||
electronRouting(app);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize a port into a number, string, or false.
|
||||
*/
|
||||
|
||||
function normalizePort(val) {
|
||||
const port = parseInt(val, 10);
|
||||
|
||||
if (isNaN(port)) {
|
||||
// named pipe
|
||||
return val;
|
||||
log.info("App HTTP server starting up at port " + usedPort);
|
||||
}
|
||||
|
||||
if (port >= 0) {
|
||||
// port number
|
||||
return port;
|
||||
}
|
||||
log.info(JSON.stringify(appInfo, null, 2));
|
||||
|
||||
return false;
|
||||
/**
|
||||
* Listen on provided port, on all network interfaces.
|
||||
*/
|
||||
|
||||
httpServer.keepAliveTimeout = 120000 * 5;
|
||||
httpServer.listen(usedPort);
|
||||
httpServer.on('error', onError);
|
||||
httpServer.on('listening', () => debug('Listening on port' + httpServer.address().port));
|
||||
|
||||
sqlInit.dbReady.then(() => messagingService.init(httpServer, sessionParser));
|
||||
|
||||
if (utils.isElectron()) {
|
||||
const electronRouting = require('./routes/electron');
|
||||
electronRouting(app);
|
||||
}
|
||||
}
|
||||
|
||||
startTrilium();
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "error" event.
|
||||
*/
|
||||
|
@ -91,36 +74,19 @@ function onError(error) {
|
|||
throw error;
|
||||
}
|
||||
|
||||
const bind = typeof port === 'string'
|
||||
? 'Pipe ' + port
|
||||
: 'Port ' + port;
|
||||
|
||||
// handle specific listen errors with friendly messages
|
||||
switch (error.code) {
|
||||
case 'EACCES':
|
||||
console.error(bind + ' requires elevated privileges');
|
||||
console.error('Port requires elevated privileges');
|
||||
process.exit(1);
|
||||
break;
|
||||
|
||||
case 'EADDRINUSE':
|
||||
console.error(bind + ' is already in use');
|
||||
console.error('Port is already in use');
|
||||
process.exit(1);
|
||||
break;
|
||||
|
||||
default:
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "listening" event.
|
||||
*/
|
||||
|
||||
function onListening() {
|
||||
const addr = httpServer.address();
|
||||
const bind = typeof addr === 'string'
|
||||
? 'pipe ' + addr
|
||||
: 'port ' + addr.port;
|
||||
|
||||
debug('Listening on ' + bind);
|
||||
}
|
Loading…
Reference in a new issue