first commit

This commit is contained in:
2026-07-16 20:48:43 -03:00
commit 5696cee264
1111 changed files with 322270 additions and 0 deletions
+80
View File
@@ -0,0 +1,80 @@
1️⃣ Estructura de archivos
vps1/
├─ docker-compose.yml
└─ init-mongo.js
Lo mismo para VPS2 y VPS3 (cambiando las IPs de bind_ip según corresponda).
2️⃣ Contenido de init-mongo.js
// init-mongo.js
// Crear usuario con todos los permisos sobre 'mibase'
db = db.getSiblingDB('mibase');
db.createUser({
user: "miusuario",
pwd: "mipassword",
roles: [{ role: "dbOwner", db: "mibase" }]
});
// Inicializar el replica set (solo se ejecuta en el contenedor que será primario)
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.101:27017" }, // primario
{ _id: 1, host: "192.168.1.102:27017" }, // secundario
{ _id: 2, host: "192.168.1.103:27017" } // secundario
]
});
Nota: Aunque este script se monte en todos los contenedores, MongoDB ignora la reejecución del usuario si ya existe, y rs.initiate() solo tiene efecto la primera vez que se ejecuta en el primario.
3️⃣ Docker Compose para VPS1
version: "3.9"
services:
mongodb:
image: mongo:7
container_name: mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: rootpassword
command: >
mongod --replSet rs0 --bind_ip 192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.200 --auth
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
- ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
restart: unless-stopped
volumes:
mongo_data:
VPS2 y VPS3: solo cambian la IP de bind_ip según la IP de cada VPS.
VPS2 → 192.168.1.102,192.168.1.101,192.168.1.103,192.168.1.200
VPS3 → 192.168.1.103,192.168.1.101,192.168.1.102,192.168.1.200
4️⃣ Conexión desde tu backend
mongodb://miusuario:mipassword@192.168.1.101:27017,192.168.1.102:27017,192.168.1.103:27017/mibase?replicaSet=rs0
El driver (o Mongoose) manejará lecturas y escrituras correctamente, y failover automático si el primario cae.
5️⃣ Seguridad
Solo pueden conectarse:
IPs de los VPS del replica set
IP del backend (192.168.1.200)
Se requiere autenticación (--auth).
@@ -0,0 +1,21 @@
version: "3.9"
services:
mongodb:
image: mongo:7
container_name: mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: rootpassword
command: >
mongod --replSet rs0 --bind_ip 192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.200 --auth
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
- ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
restart: unless-stopped
volumes:
mongo_data:
+21
View File
@@ -0,0 +1,21 @@
// init-mongo.js
// Crear usuario con todos los permisos sobre 'mibase'
db = db.getSiblingDB('mibase');
db.createUser({
user: "miusuario",
pwd: "mipassword",
roles: [{ role: "dbOwner", db: "mibase" }]
});
// Inicializar el replica set (solo se ejecuta en el contenedor que será primario)
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.101:27017" }, // primario
{ _id: 1, host: "192.168.1.102:27017" }, // secundario
{ _id: 2, host: "192.168.1.103:27017" } // secundario
]
});
@@ -0,0 +1,21 @@
version: "3.9"
services:
mongodb:
image: mongo:7
container_name: mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: rootpassword
command: >
mongod --replSet rs0 --bind_ip 192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.200 --auth
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
- ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
restart: unless-stopped
volumes:
mongo_data:
+21
View File
@@ -0,0 +1,21 @@
// init-mongo.js
// Crear usuario con todos los permisos sobre 'mibase'
db = db.getSiblingDB('mibase');
db.createUser({
user: "miusuario",
pwd: "mipassword",
roles: [{ role: "dbOwner", db: "mibase" }]
});
// Inicializar el replica set (solo se ejecuta en el contenedor que será primario)
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.101:27017" }, // primario
{ _id: 1, host: "192.168.1.102:27017" }, // secundario
{ _id: 2, host: "192.168.1.103:27017" } // secundario
]
});
@@ -0,0 +1,21 @@
version: "3.9"
services:
mongodb:
image: mongo:7
container_name: mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: rootpassword
command: >
mongod --replSet rs0 --bind_ip 192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.200 --auth
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
- ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
restart: unless-stopped
volumes:
mongo_data:
+21
View File
@@ -0,0 +1,21 @@
// init-mongo.js
// Crear usuario con todos los permisos sobre 'mibase'
db = db.getSiblingDB('mibase');
db.createUser({
user: "miusuario",
pwd: "mipassword",
roles: [{ role: "dbOwner", db: "mibase" }]
});
// Inicializar el replica set (solo se ejecuta en el contenedor que será primario)
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.101:27017" }, // primario
{ _id: 1, host: "192.168.1.102:27017" }, // secundario
{ _id: 2, host: "192.168.1.103:27017" } // secundario
]
});