Add env vars to automatically create initial admin user on first run
This commit is contained in:
parent
fccf14eb95
commit
e9c02c29a5
|
@ -19,3 +19,7 @@ COUCH_DB_PORT=4005
|
||||||
REDIS_PORT=6379
|
REDIS_PORT=6379
|
||||||
WATCHTOWER_PORT=6161
|
WATCHTOWER_PORT=6161
|
||||||
BUDIBASE_ENVIRONMENT=PRODUCTION
|
BUDIBASE_ENVIRONMENT=PRODUCTION
|
||||||
|
|
||||||
|
# An admin user can be automatically created initially if these are set
|
||||||
|
BB_ADMIN_USER_EMAIL=
|
||||||
|
BB_ADMIN_USER_PASSWORD=
|
|
@ -23,6 +23,8 @@ services:
|
||||||
ENABLE_ANALYTICS: "true"
|
ENABLE_ANALYTICS: "true"
|
||||||
REDIS_URL: redis-service:6379
|
REDIS_URL: redis-service:6379
|
||||||
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
REDIS_PASSWORD: ${REDIS_PASSWORD}
|
||||||
|
BB_ADMIN_USER_EMAIL: ${BB_ADMIN_USER_EMAIL}
|
||||||
|
BB_ADMIN_USER_PASSWORD: ${BB_ADMIN_USER_PASSWORD}
|
||||||
depends_on:
|
depends_on:
|
||||||
- worker-service
|
- worker-service
|
||||||
- redis-service
|
- redis-service
|
||||||
|
|
|
@ -56,6 +56,8 @@ async function init() {
|
||||||
DISABLE_THREADING: 1,
|
DISABLE_THREADING: 1,
|
||||||
SERVICE: "app-service",
|
SERVICE: "app-service",
|
||||||
DEPLOYMENT_ENVIRONMENT: "development",
|
DEPLOYMENT_ENVIRONMENT: "development",
|
||||||
|
BB_ADMIN_USER_EMAIL: "",
|
||||||
|
BB_ADMIN_USER_PASSWORD: "",
|
||||||
}
|
}
|
||||||
let envFile = ""
|
let envFile = ""
|
||||||
Object.keys(envFileJson).forEach(key => {
|
Object.keys(envFileJson).forEach(key => {
|
||||||
|
|
|
@ -18,7 +18,9 @@ const { logAlert } = require("@budibase/backend-core/logging")
|
||||||
const { Thread } = require("./threads")
|
const { Thread } = require("./threads")
|
||||||
import redis from "./utilities/redis"
|
import redis from "./utilities/redis"
|
||||||
import * as migrations from "./migrations"
|
import * as migrations from "./migrations"
|
||||||
import { events, installation } from "@budibase/backend-core"
|
import { events, installation, tenancy } from "@budibase/backend-core"
|
||||||
|
import { createAdminUser, getChecklist } from "./utilities/workerRequests"
|
||||||
|
import { DEFAULT_TENANT_ID } from "@budibase/backend-core/dist/src/constants"
|
||||||
|
|
||||||
const app = new Koa()
|
const app = new Koa()
|
||||||
|
|
||||||
|
@ -110,6 +112,27 @@ module.exports = server.listen(env.PORT || 0, async () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check and create admin user if required
|
||||||
|
if (
|
||||||
|
env.SELF_HOSTED &&
|
||||||
|
!env.MULTI_TENANCY &&
|
||||||
|
env.BB_ADMIN_USER_EMAIL &&
|
||||||
|
env.BB_ADMIN_USER_PASSWORD
|
||||||
|
) {
|
||||||
|
const checklist = await getChecklist()
|
||||||
|
if (!checklist?.adminUser?.checked) {
|
||||||
|
await createAdminUser(
|
||||||
|
env.BB_ADMIN_USER_EMAIL,
|
||||||
|
env.BB_ADMIN_USER_PASSWORD,
|
||||||
|
"default"
|
||||||
|
)
|
||||||
|
console.log(
|
||||||
|
"Admin account automatically created for",
|
||||||
|
env.BB_ADMIN_USER_EMAIL
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// check for version updates
|
// check for version updates
|
||||||
await installation.checkInstallVersion()
|
await installation.checkInstallVersion()
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,8 @@ module.exports = {
|
||||||
DYNAMO_ENDPOINT: process.env.DYNAMO_ENDPOINT,
|
DYNAMO_ENDPOINT: process.env.DYNAMO_ENDPOINT,
|
||||||
QUERY_THREAD_TIMEOUT: parseIntSafe(process.env.QUERY_THREAD_TIMEOUT),
|
QUERY_THREAD_TIMEOUT: parseIntSafe(process.env.QUERY_THREAD_TIMEOUT),
|
||||||
SQL_MAX_ROWS: process.env.SQL_MAX_ROWS,
|
SQL_MAX_ROWS: process.env.SQL_MAX_ROWS,
|
||||||
|
BB_ADMIN_USER_EMAIL: process.env.BB_ADMIN_USER_EMAIL,
|
||||||
|
BB_ADMIN_USER_PASSWORD: process.env.BB_ADMIN_USER_PASSWORD,
|
||||||
// flags
|
// flags
|
||||||
ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
|
ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
|
||||||
DISABLE_THREADING: process.env.DISABLE_THREADING,
|
DISABLE_THREADING: process.env.DISABLE_THREADING,
|
||||||
|
|
|
@ -137,3 +137,19 @@ exports.readGlobalUser = async ctx => {
|
||||||
)
|
)
|
||||||
return checkResponse(response, "get user", { ctx })
|
return checkResponse(response, "get user", { ctx })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports.createAdminUser = async (email, password, tenantId) => {
|
||||||
|
const response = await fetch(
|
||||||
|
checkSlashesInUrl(env.WORKER_URL + "/api/global/users/init"),
|
||||||
|
request(null, { method: "POST", body: { email, password, tenantId } })
|
||||||
|
)
|
||||||
|
return checkResponse(response, "create admin user")
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getChecklist = async () => {
|
||||||
|
const response = await fetch(
|
||||||
|
checkSlashesInUrl(env.WORKER_URL + "/api/global/configs/checklist"),
|
||||||
|
request(null, { method: "GET" })
|
||||||
|
)
|
||||||
|
return checkResponse(response, "get checklist")
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue