fix: corregir traslado automatico de directorio a /opt con cp -a evitando Directory not empty
This commit is contained in:
@@ -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.
|
* **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`.
|
* **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.
|
* **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.
|
* **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`.
|
* **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`.
|
* **Entorno Virtual Nativo (`venv`):** Configuración en `/opt/admin-edu-space/venv` con dependencias del sistema y `gunicorn`.
|
||||||
|
|||||||
+15
-4
@@ -31,16 +31,27 @@ SQL_BACKUP_FILE="${APP_DIR}/classrooms_db.sql"
|
|||||||
# ─── Verificación de Permisos Root ─────────────────────────────────────────────
|
# ─── Verificación de Permisos Root ─────────────────────────────────────────────
|
||||||
[[ $EUID -ne 0 ]] && err "Ejecutá este script con permisos de root: sudo bash install.sh"
|
[[ $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
|
if [[ "${APP_DIR}" == /root/* ]]; then
|
||||||
NEW_DIR="/opt/admin-edu-space"
|
NEW_DIR="/opt/admin-edu-space"
|
||||||
warn "Detectado directorio en ${APP_DIR}. Moviendo a ${NEW_DIR} para evitar errores de permisos..."
|
warn "Detectado directorio en ${APP_DIR}. Trasladando a ${NEW_DIR} para evitar bloqueos de permisos..."
|
||||||
mkdir -p /opt
|
systemctl stop "${SERVICE_NAME}" 2>/dev/null || true
|
||||||
mv "${APP_DIR}" "${NEW_DIR}"
|
|
||||||
|
# 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}"
|
cd "${NEW_DIR}"
|
||||||
|
rm -rf "${APP_DIR}" 2>/dev/null || true
|
||||||
exec bash install.sh
|
exec bash install.sh
|
||||||
fi
|
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?"
|
[[ ! -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}"
|
echo -e "\n${BOLD}${CYAN}"
|
||||||
|
|||||||
Reference in New Issue
Block a user