gitlab-acebase
Version:
AceBase realtime database server (webserver endpoint to allow remote connections)
126 lines (117 loc) • 4.57 kB
JavaScript
import { AceBaseServer } from './server.js';
process.env.NODE_ENV = 'development';
/*
Use environment variables or pass arguments to this script to start an AceBase server
instance from the command-line.
Command-line arguments format:
`npx acebase-server start DBNAME=mydb HOST=localhost PORT=3000`
You can use all variables mentioned below (without 'ACEBASE_' prefix)
All environment variables MUST be prefixed with 'ACEBASE_' (except for PORT if ACEBASE_PORT is not specified).
Currently available environment variables:
# File and network settings:
ACEBASE_DBNAME='mydb'
ACEBASE_DBPATH='.'
ACEBASE_HOST='localhost'
ACEBASE_PORT='3000'
ACEBASE_ROOT_PATH=''
# Transaction logging settings:
ACEBASE_TXLOG='true'
ACEBASE_TXDAYS='30'
# Auth settings:
ACEBASE_AUTH='true'
ACEBASE_AUTH_USER_SIGNUP='true'
ACEBASE_AUTH_DEFAULT_ACCESS_RULE='deny'
ACEBASE_AUTH_DEFAULT_ADMIN_PASSWORD=''
ACEBASE_AUTH_NEW_USER_RATE_LIMIT='0'
ACEBASE_AUTH_SEPARATE_DB='false'
ACEBASE_AUTH_TOKENS_EXPIRE='0'
# IPC configuration for single machine clusters
ACEBASE_IPC='socket'
# IPC configuration for multiple machine clusters (Make sure there is ONLY ONE 'master' instance)
ACEBASE_IPC_PORT='9163'
ACEBASE_IPC_HOST='ipc.example.com'
ACEBASE_IPC_ROLE='master'
ACEBASE_IPC_SSL='true'
ACEBASE_IPC_TOKEN='secret'
*/
// If one executes "node start.js [dbname=name] [host=ip] [port=nr]"
function getVariable(name, defaultValue) {
// Checks if an argument with the name was passed,
// or if an environment variable was set with that name,
// else it will return the default value
name = name.toUpperCase();
const arg = process.argv.find(arg => arg.toUpperCase().startsWith(`${name}=`));
if (arg) {
return arg.split('=')[1];
}
const envName = `ACEBASE_${name}`;
if (typeof process.env[envName] !== 'undefined') {
return process.env[envName];
}
if (name === 'PORT' && typeof process.env[name] !== 'undefined') {
return process.env[name];
}
return defaultValue;
}
const options = {
host: getVariable('HOST', 'localhost'),
port: +getVariable('PORT', 5757),
path: getVariable('DBPATH', '.'),
rootPath: getVariable('ROOT_PATH', ''),
logLevel: 'verbose'
};
// Check if we should use a remote IPC server, let AceBase use a local IPC socket otherwise
const ipcPort = +getVariable('IPC_PORT', 0);
if (ipcPort > 0) {
const role = getVariable('IPC_ROLE');
if (!['master', 'worker'].includes(role)) {
throw new Error('IPC_ROLE must be either "master" or "worker"');
}
options.ipc = {
host: getVariable('IPC_HOST'),
port: ipcPort,
ssl: +getVariable('IPC_SSL', 0) === 1,
token: getVariable('IPC_TOKEN'),
role,
};
}
else if (getVariable('IPC') === 'socket') {
// Use local IPC socket, will become default soon
options.ipc = 'socket';
}
// Check if transaction logging should be enabled (not enabled by default)
if (getVariable('TXLOG', 'false') === 'true' || +getVariable('TXLOG', 0) === 1) {
options.transactions = {
log: true,
maxAge: +getVariable('TXDAYS', 30),
};
}
// Check if authentication should be enabled (default)
if (getVariable('AUTH', 'true') === 'true' || +getVariable('AUTH', 1) === 1) {
options.authentication = {
enabled: true,
allowUserSignup: +getVariable('AUTH_USER_SIGNUP', 1) === 1,
defaultAccessRule: getVariable('AUTH_DEFAULT_ACCESS_RULE'),
defaultAdminPassword: getVariable('AUTH_DEFAULT_ADMIN_PASSWORD'),
newUserRateLimit: +getVariable('AUTH_NEW_USER_RATE_LIMIT', 0),
separateDb: getVariable('AUTH_SEPARATE_DB', false),
tokensExpire: +getVariable('AUTH_TOKENS_EXPIRE', 0), // No implemented yet
};
}
else {
options.authentication = { enabled: false };
}
const dbname = getVariable('DBNAME', 'mydb');
const server = new AceBaseServer(dbname, options);
server.configAuthProvider('gitlab', {
client_id: "fedc8e2fb59386c35cb015458efaaaf4084b2fc0175821f75e70050aa704ac0f",
client_secret: "53c55954b00514dc3c56bea12c31b325a9f7e0ca3628cdc20ee04f6f2cef9fbe",
scopes: ["read_user api read_api read_repository write_repository sudo openid profile email write_registry read_registry admin_mode"],
state: "devopssystem",
host: "gitlab.handymes.com"
});
server.once('ready', () => {
server.debug.log(`AceBase server running`);
process.send?.('ready'); // When using pm2, you can use --wait-ready flag (see https://pm2.keymetrics.io/docs/usage/signals-clean-restart/)
});
//# sourceMappingURL=start.js.map