single init script

This commit is contained in:
Alex Holliday committed 2025-04-25 16:09:02 -07:00
1 parent fb505278bd
commit c654872d9c
4 files changed
+60 -34

No files matched your search

+1 -2
View File
@@ -52,7 +52,6 @@ services:
- "27017:27017"
volumes:
- ./mongo/data:/data/db
- ./mongo/init/01_init_replica_set.js:/docker-entrypoint-initdb.d/01_init_replica_set.js
- ./mongo/init/02_create_users.js:/docker-entrypoint-initdb.d/02_create_users.js
- ./mongo/init/init.js:/docker-entrypoint-initdb.d/init.js
env_file:
- mongo.env
@@ -1,16 +0,0 @@
function waitForPrimary() {
while (true) {
try {
rs.initiate({
_id: "rs0",
members: [{ _id: 0, host: "localhost:27017" }],
});
break;
} catch (e) {
print("Replica set initiation failed, retrying in 2s...");
sleep(2000);
}
}
}
waitForPrimary();
-16
View File
@@ -1,16 +0,0 @@
var username = process.env.USERNAME_ENV_VAR;
var password = process.env.PASSWORD_ENV_VAR;
db = db.getSiblingDB("uptime_db");
db.createUser({
user: username,
pwd: password,
roles: [
{
role: "readWrite",
db: "uptime_db",
},
],
});
print("User uptime_user created successfully");
+59
View File
@@ -0,0 +1,59 @@
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function initReplicaSet() {
while (true) {
try {
rs.initiate({
_id: "rs0",
members: [{ _id: 0, host: "localhost:27017" }],
});
print("Replica set initiated.");
break;
} catch (e) {
print("Replica set initiation failed, retrying in 2s...");
await sleep(2000);
}
}
// Wait until the node becomes primary
while (true) {
try {
const status = rs.status();
if (status.myState === 1) {
print("Node is now PRIMARY.");
break;
}
} catch (e) {
print("⏳ Waiting for PRIMARY state...");
}
await sleep(1000);
}
}
async function createAppUser() {
const username = process.env.USERNAME_ENV_VAR;
const password = process.env.PASSWORD_ENV_VAR;
if (!username || !password) {
throw new Error("USERNAME_ENV_VAR or PASSWORD_ENV_VAR not set.");
}
const dbName = "uptime_db";
const userDb = db.getSiblingDB(dbName);
try {
userDb.createUser({
user: username,
pwd: password,
roles: [{ role: "readWrite", db: dbName }],
});
print(`✅ User '${username}' created successfully.`);
} catch (e) {
print(`⚠️ Failed to create user '${username}': ${e.message}`);
}
}
await initReplicaSet();
await createAppUser();