#!/bin/bash # Función para manejar errores handle_error() { echo "Error: $1" exit 1 } # Verificar y crear el directorio /data si no existe if [ ! -d "/data" ]; then mkdir -p /data || handle_error "No se pudo crear el directorio /data" echo "Directorio /data creado para almacenamiento persistente" fi # Verificar permisos del directorio /data if [ ! -w "/data" ]; then echo "Advertencia: No se tienen permisos de escritura en /data. Algunos datos pueden no ser persistentes." fi # Asegurar que el usuario jovyan sea el propietario de /data chown -R ${NB_UID}:${NB_GID} /data # Cargar el token de JupyterLab desde el archivo de entorno source /etc/environment # Verificar si el token está presente if [ -z "$JUPYTER_TOKEN" ]; then handle_error "El token de JupyterLab está vacío. Asegúrate de configurar el secreto JUPYTER_TOKEN en la configuración del Space." fi # Verificar disponibilidad de GPU if command -v nvidia-smi &> /dev/null; then echo "GPU detectada. Configurando entorno para uso de GPU." export NVIDIA_VISIBLE_DEVICES=all export NVIDIA_DRIVER_CAPABILITIES=compute,utility else echo "No se detectó GPU. Se utilizará CPU." fi # Iniciar JupyterLab en segundo plano jupyter lab --ip=0.0.0.0 --port=${JUPYTERLAB_PORT} --no-browser --allow-root \ --NotebookApp.base_url=/jupyter --NotebookApp.token=${JUPYTER_TOKEN} \ --notebook-dir=/data & # Asegurar que el archivo PID de Nginx sea escribible touch /tmp/nginx.pid chmod 644 /tmp/nginx.pid # Iniciar Nginx en primer plano nginx -g "daemon off;" -c /etc/nginx/nginx.conf || handle_error "Fallo al iniciar Nginx"