feat: Configuración completa de Docker con PostgreSQL, HTTPS y servidor de producción

- Agregada configuración de servidor HTTPS con Express (server.js)
- Integración de PostgreSQL en docker-compose.yml con servicio dedicado
- Actualizado Dockerfile para optimizar build en Alpine Linux
- Configurado vite.config.ts con soporte HTTPS para desarrollo
- Agregados certificados SSL para HTTPS
- Actualizado svelte.config.js con configuración CSRF
- Ajustadas métricas de restauración en +page.server.ts para usar last_restore_date
- Agregado script npm start en package.json
- Instalado express como dependencia de producción
This commit is contained in:
2026-03-04 08:19:38 -06:00
parent 5fa97105c9
commit 03e3793dd3
11 changed files with 824 additions and 754 deletions

View File

@@ -377,28 +377,20 @@ export const load: PageServerLoad = async ({ cookies }) => {
console.error("Error processing backups/alerts hydration:", e);
}
// CALCULAR MÉTRICAS DE RESTAURACIÓN basadas en backups reales (ANTES del filtro)
// CALCULAR MÉTRICAS DE RESTAURACIÓN basadas en last_restore_date (ANTES del filtro)
restoredCount = 0;
notRestoredCount = 0;
const oneDayAgo = new Date(Date.now() - 24 * 60 * 60 * 1000);
for (const db of databaseRows) {
// Buscar backups de esta base de datos en las últimas 24 horas
// Comparar usando NodoSubNodo (de la BD) con nodo_name (del archivo de backup)
const recentBackups = backupFiles.filter(backup => {
const backupNodo = (backup.nodo_name || '').toLowerCase();
const dbNodo = (db.NodoSubNodo || '').toLowerCase();
const backupDate = new Date(backup.date);
// Si no tiene NodoSubNodo, intentar con el nombre de la BD
const hasMatch = dbNodo ? (backupNodo === dbNodo) :
(backupNodo === (db.visible_name || '').toLowerCase());
return hasMatch && backupDate > oneDayAgo;
});
if (recentBackups.length > 0) {
restoredCount++;
// Verificar si tiene una restauración en las últimas 24 horas
if (db.last_restore_date) {
const restoreDate = new Date(db.last_restore_date);
if (restoreDate > oneDayAgo) {
restoredCount++;
} else {
notRestoredCount++;
}
} else {
notRestoredCount++;
}
@@ -423,20 +415,14 @@ export const load: PageServerLoad = async ({ cookies }) => {
restoredCount = 0;
notRestoredCount = 0;
for (const db of databaseRows) {
const recentBackups = backupFiles.filter(backup => {
const backupNodo = (backup.nodo_name || '').toLowerCase();
const dbNodo = (db.NodoSubNodo || '').toLowerCase();
const backupDate = new Date(backup.date);
// Si no tiene NodoSubNodo, intentar con el nombre de la BD
const hasMatch = dbNodo ? (backupNodo === dbNodo) :
(backupNodo === (db.visible_name || '').toLowerCase());
return hasMatch && backupDate > oneDayAgo;
});
if (recentBackups.length > 0) {
restoredCount++;
// Verificar si tiene una restauración en las últimas 24 horas
if (db.last_restore_date) {
const restoreDate = new Date(db.last_restore_date);
if (restoreDate > oneDayAgo) {
restoredCount++;
} else {
notRestoredCount++;
}
} else {
notRestoredCount++;
}