Base de datos
Dos instancias de MySQL en Cloud SQL, cada una en su proyecto.
| Instancia | Proyecto | Versión | Tamaño | Disco |
|---|---|---|---|---|
mysql8 | produccion-ucic | MySQL 8.0.31 | 4 vCPU / 20 GB | 287 GB |
test-mysql8 | testing-ucic | MySQL 8.0.40 | 1 vCPU / 3.8 GB | 216 GB |
Las versiones no coinciden: producción corre 8.0.31 y pruebas 8.0.40. Probar contra una versión más nueva que la de producción significa que algo puede funcionar en pruebas y fallar al desplegar, no al revés.
Las bases de producción
prd_portal prd_nexo
prd_portal_moodle moodleprd
prd_foquita prd_futuro99
prd_entrenate_online_contribuye testing_moodle
testing_futuro99
Hay dos bases con prefijo testing_ dentro de la instancia de producción.
Comparten CPU, memoria y disco con lo que atiende a los usuarios: una consulta
pesada de pruebas se nota en producción.
La base de Nexo
Todo el portal vive en prd_nexo, y ahí está la decisión que más conviene
entender:
El portal y el módulo de TI comparten la misma base. nexo-hub-backend es
dueño de las tablas de identidad (ti_usuarios, ti_tokens); nexo-ti-backend
las lee.
Se eligió así frente a las alternativas —que el módulo pregunte al portal por HTTP, o repartir un JWT firmado— por una razón concreta: la revocación es inmediata. Si se desactiva a alguien, el módulo lo ve en la siguiente consulta. Con un JWT habría que esperar a que venza; con introspección por HTTP, el portal se vuelve un punto único de fallo para todos los módulos.
El precio: los dos servicios están atados al mismo esquema, así que renombrar una de esas tablas obliga a desplegar los dos a la vez.
Las tablas se llaman ti_usuarios y ti_tokens por un accidente de orden: el
módulo de TI fue el primero que tuvo autenticación real, y las creó él. Hoy son
del portal y el prefijo miente. Renombrarlas exige un despliegue coordinado.
Permisos
El usuario prd_nexo se creó con ALL PRIVILEGES ON *.*, o sea permiso sobre
todas las bases de la instancia, incluidas las de Aprendix y Moodle. Debería
tener permiso completo solo sobre prd_nexo y lectura sobre lo que de verdad
necesite.
Es la clase de cosa que no molesta hasta el día que una migración mal escrita toca una tabla que no era suya.
Cómo comprobar esto
gcloud sql instances list --project produccion-ucic
gcloud sql databases list --instance mysql8 --project produccion-ucic