diff --git a/CHANGELOG_SESSION.md b/CHANGELOG_SESSION.md index 8f8131a..402c7ec 100644 --- a/CHANGELOG_SESSION.md +++ b/CHANGELOG_SESSION.md @@ -368,7 +368,7 @@ * **Copia de Configuración Activa del Sistema:** Se configuraron como valores por defecto los parámetros reales del sistema en ejecución (`DATABASE_URL=postgresql://postgres:password@localhost:5432/classrooms_db`, usuario `postgres`, base `classrooms_db` y contraseña `password`), garantizando paridad exacta con el entorno local. * **Compatibilidad Dual de Usuarios:** Configuración tanto del superusuario `postgres` como de `eduspace_user` con los mismos privilegios para compatibilidad inmediata ante cualquier variación de `.env`. * **Optimización Proxmox LXC:** Compatible con contenedores Debian 11/12 y Ubuntu 20.04/22.04/24.04 en Proxmox VE. - * **Migración Automática de Directorio:** Si el repositorio se clona en `/root`, se traslada automáticamente a `/opt/admin-edu-space` para garantizar permisos de ejecución del usuario del servicio (`eduspace`). + * **Migración Automática de Directorio Robusta:** Si el repositorio se clona en `/root`, se traslada automáticamente a `/opt/admin-edu-space` mediante sincronización directa con `cp -a`, limpiando posibles directorios anidados residuales y deteniendo el servicio previamente para evitar errores de colisión (`Directory not empty`). * **Despliegue del Motor PostgreSQL Nativo:** Instalación desatendida del motor en el LXC, inicialización dinámica del servicio y bucle de healthcheck de conexión. * **Restauración Automatizada y Permisos:** Detección automática de `classrooms_db.sql`, recreación limpia, asignación de permisos `GRANT ALL` en el esquema `public`, todas las tablas y secuencias a `postgres` y `eduspace_user`. * **Entorno Virtual Nativo (`venv`):** Configuración en `/opt/admin-edu-space/venv` con dependencias del sistema y `gunicorn`. diff --git a/install.sh b/install.sh index c1aa757..e57d765 100644 --- a/install.sh +++ b/install.sh @@ -31,16 +31,27 @@ SQL_BACKUP_FILE="${APP_DIR}/classrooms_db.sql" # ─── Verificación de Permisos Root ───────────────────────────────────────────── [[ $EUID -ne 0 ]] && err "Ejecutá este script con permisos de root: sudo bash install.sh" -# Si el directorio está dentro de /root, lo movemos a /opt para evitar problemas de permisos +# Si el directorio está dentro de /root, lo trasladamos a /opt para evitar problemas de permisos con el usuario de servicio if [[ "${APP_DIR}" == /root/* ]]; then NEW_DIR="/opt/admin-edu-space" - warn "Detectado directorio en ${APP_DIR}. Moviendo a ${NEW_DIR} para evitar errores de permisos..." - mkdir -p /opt - mv "${APP_DIR}" "${NEW_DIR}" + warn "Detectado directorio en ${APP_DIR}. Trasladando a ${NEW_DIR} para evitar bloqueos de permisos..." + systemctl stop "${SERVICE_NAME}" 2>/dev/null || true + + # Limpiar cualquier subdirectorio anidado previo si quedó de un intento fallido + rm -rf "${NEW_DIR}/admin-edu-space" 2>/dev/null || true + + mkdir -p "${NEW_DIR}" + # Copiar recursivamente todo el contenido (incluyendo dotfiles) directamente a NEW_DIR + cp -a "${APP_DIR}/." "${NEW_DIR}/" + cd "${NEW_DIR}" + rm -rf "${APP_DIR}" 2>/dev/null || true exec bash install.sh fi +# Limpiar posible subdirectorio anidado residual en caso de ejecuciones previas +rm -rf "${APP_DIR}/admin-edu-space" 2>/dev/null || true + [[ ! -f "${APP_DIR}/wsgi.py" ]] && err "No se encontró wsgi.py en ${APP_DIR}. ¿Estás en el directorio raíz del proyecto?" echo -e "\n${BOLD}${CYAN}"