feat: Add path to socket for external mariadb database (#6670)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Frank Elsinga <frank@elsinga.de>
This commit is contained in:
parent
999c09d818
commit
a86789be6c
@ -165,7 +165,7 @@ class Database {
|
||||
* Read the database config
|
||||
* @throws {Error} If the config is invalid
|
||||
* @typedef {string|undefined} envString
|
||||
* @returns {{type: "sqlite"} | {type:envString, hostname:envString, port:envString, database:envString, username:envString, password:envString}} Database config
|
||||
* @returns {{type: "sqlite"} | {type:envString, hostname:envString, port:envString, database:envString, username:envString, password:envString, socketPath:envString}} Database config
|
||||
*/
|
||||
static readDBConfig() {
|
||||
let dbConfig;
|
||||
@ -185,7 +185,7 @@ class Database {
|
||||
|
||||
/**
|
||||
* @typedef {string|undefined} envString
|
||||
* @param {{type: "sqlite"} | {type:envString, hostname:envString, port:envString, database:envString, username:envString, password:envString}} dbConfig the database configuration that should be written
|
||||
* @param {{type: "sqlite"} | {type:envString, hostname:envString, port:envString, database:envString, username:envString, password:envString, socketPath:envString}} dbConfig the database configuration that should be written
|
||||
* @returns {void}
|
||||
*/
|
||||
static writeDBConfig(dbConfig) {
|
||||
@ -284,6 +284,7 @@ class Database {
|
||||
port: dbConfig.port,
|
||||
user: dbConfig.username,
|
||||
password: dbConfig.password,
|
||||
socketPath: dbConfig.socketPath,
|
||||
...(dbConfig.ssl
|
||||
? {
|
||||
ssl: {
|
||||
@ -309,6 +310,7 @@ class Database {
|
||||
user: dbConfig.username,
|
||||
password: dbConfig.password,
|
||||
database: dbConfig.dbName,
|
||||
socketPath: dbConfig.socketPath,
|
||||
timezone: "Z",
|
||||
typeCast: function (field, next) {
|
||||
if (field.type === "DATETIME") {
|
||||
|
||||
@ -102,6 +102,7 @@ class SetupDatabase {
|
||||
dbConfig.dbName = process.env.UPTIME_KUMA_DB_NAME;
|
||||
dbConfig.username = getEnvOrFile("UPTIME_KUMA_DB_USERNAME");
|
||||
dbConfig.password = getEnvOrFile("UPTIME_KUMA_DB_PASSWORD");
|
||||
dbConfig.socketPath = process.env.UPTIME_KUMA_DB_SOCKET?.trim();
|
||||
dbConfig.ssl = getEnvOrFile("UPTIME_KUMA_DB_SSL")?.toLowerCase() === "true";
|
||||
dbConfig.ca = getEnvOrFile("UPTIME_KUMA_DB_CA");
|
||||
Database.writeDBConfig(dbConfig);
|
||||
@ -160,6 +161,7 @@ class SetupDatabase {
|
||||
runningSetup: this.runningSetup,
|
||||
needSetup: this.needSetup,
|
||||
isEnabledEmbeddedMariaDB: this.isEnabledEmbeddedMariaDB(),
|
||||
isEnabledMariaDBSocket: process.env.UPTIME_KUMA_DB_SOCKET?.trim().length > 0,
|
||||
});
|
||||
});
|
||||
|
||||
@ -202,16 +204,22 @@ class SetupDatabase {
|
||||
|
||||
// External MariaDB
|
||||
if (dbConfig.type === "mariadb") {
|
||||
if (!dbConfig.hostname) {
|
||||
response.status(400).json("Hostname is required");
|
||||
this.runningSetup = false;
|
||||
return;
|
||||
}
|
||||
// If socketPath is provided and not empty, validate it
|
||||
if (process.env.UPTIME_KUMA_DB_SOCKET?.trim().length > 0) {
|
||||
dbConfig.socketPath = process.env.UPTIME_KUMA_DB_SOCKET.trim();
|
||||
} else {
|
||||
// socketPath not provided, hostname and port are required
|
||||
if (!dbConfig.hostname) {
|
||||
response.status(400).json("Hostname is required");
|
||||
this.runningSetup = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!dbConfig.port) {
|
||||
response.status(400).json("Port is required");
|
||||
this.runningSetup = false;
|
||||
return;
|
||||
if (!dbConfig.port) {
|
||||
response.status(400).json("Port is required");
|
||||
this.runningSetup = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!dbConfig.dbName) {
|
||||
@ -241,6 +249,7 @@ class SetupDatabase {
|
||||
user: dbConfig.username,
|
||||
password: dbConfig.password,
|
||||
database: dbConfig.dbName,
|
||||
socketPath: dbConfig.socketPath,
|
||||
...(dbConfig.ssl
|
||||
? {
|
||||
ssl: {
|
||||
|
||||
@ -1369,6 +1369,7 @@
|
||||
"None (Successful Connection)": "None (Successful Connection)",
|
||||
"expectedTlsAlertDescription": "Select the TLS alert you expect the server to return. Use {code} to verify mTLS endpoints reject connections without client certificates. See {link} for details.",
|
||||
"TLS Alert Spec": "RFC 8446",
|
||||
"mariadbSocketPathDetectedHelptext": "Connecting to the database as specified via the {0} environment variable.",
|
||||
"Expand All Groups": "Expand All Groups",
|
||||
"Collapse All Groups": "Collapse All Groups"
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
</div>
|
||||
|
||||
<template v-if="dbConfig.type === 'mariadb'">
|
||||
<div class="form-floating mt-3 short">
|
||||
<div v-if="!isProvidedMariaDBSocket" class="form-floating mt-3 short">
|
||||
<input
|
||||
id="floatingInput"
|
||||
v-model="dbConfig.hostname"
|
||||
@ -90,11 +90,19 @@
|
||||
<label for="floatingInput">{{ $t("Hostname") }}</label>
|
||||
</div>
|
||||
|
||||
<div class="form-floating mt-3 short">
|
||||
<div v-if="!isProvidedMariaDBSocket" class="form-floating mt-3 short">
|
||||
<input id="floatingInput" v-model="dbConfig.port" type="text" class="form-control" required />
|
||||
<label for="floatingInput">{{ $t("Port") }}</label>
|
||||
</div>
|
||||
|
||||
<div v-if="isProvidedMariaDBSocket" class="mt-1 short text-start">
|
||||
<i18n-t keypath="mariadbSocketPathDetectedHelptext" tag="div" class="form-text">
|
||||
<code>UPTIME_KUMA_DB_SOCKET</code>
|
||||
</i18n-t>
|
||||
</div>
|
||||
|
||||
<hr v-if="isProvidedMariaDBSocket" class="mt-3 mb-2 short" />
|
||||
|
||||
<div class="form-floating mt-3 short">
|
||||
<input
|
||||
id="floatingInput"
|
||||
@ -198,6 +206,9 @@ export default {
|
||||
disabledButton() {
|
||||
return this.dbConfig.type === undefined || this.info.runningSetup;
|
||||
},
|
||||
isProvidedMariaDBSocket() {
|
||||
return this.info.isEnabledMariaDBSocket;
|
||||
},
|
||||
},
|
||||
async mounted() {
|
||||
let res = await axios.get("/setup-database-info");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user