# Modo de desarrollo de Spaces: desarrollo sin interrupciones en Spaces

> [!WARNING]
> El modo de desarrollo de Spaces forma parte de los planes PRO o Team & Enterprise.

## Modo de desarrollo de Spaces

Spaces Dev Mode es una función que facilita la depuración de tu aplicación y agiliza la iteración en Spaces.

Cada vez que envías cambios a tu repositorio de Space, la imagen de Docker subyacente se reconstruye y, a continuación, se aprovisiona una nueva máquina virtual para alojar el nuevo contenedor.

El modo de desarrollo te permite actualizar tu Space mucho más rápido al reemplazar la imagen de Docker.

La imagen de Docker de Dev Mode inicia tu aplicación como un subproceso, lo que te permite reiniciarla sin detener el contenedor del Space. También inicia un servidor SSH (para editores y terminales locales) y un servidor de VS Code (para VS Code Web dentro del producto) en segundo plano, para que puedas conectarte al Space.

La capacidad de conectarse al Space en ejecución habilita varios casos de uso:

    - Puedes realizar cambios en el código de la aplicación sin que el Space se reconstruya cada vez
    - Puedes depurar una aplicación en ejecución y monitorear los recursos en tiempo real

En general, agiliza el desarrollo y la experimentación con Spaces al omitir la fase de reconstrucción de la imagen de Docker.

## Interfaz

Una vez que el modo de desarrollo esté habilitado en tu Space, deberías ver un modal como el siguiente.

La aplicación no se reinicia automáticamente cuando se modifica el código. Para que los cambios se reflejen en el Space, es necesario usar el botón `Refresh`, que reiniciará la aplicación.

  Si estás usando el SDK de Gradio o tu aplicación está basada en Python, ten en cuenta que los requisitos no se instalan automáticamente. Deberás ejecutar manualmente `pip install` desde VS Code o SSH.

### Conexión

Dev Mode expone el Space en ejecución como un host SSH estándar. VS Code y cualquier otro editor se conectan a través de ese mismo punto final SSH.

#### SSH

Una vez que el modo Dev esté en ejecución, conéctate con:

```shell
ssh <space-subdomain>@ssh.hf.space
```

El subdominio se muestra en el modal de controles de modo de desarrollo. También puede obtenerlo de forma programática:

```python
from huggingface_hub import HfApi
print(HfApi().space_info("namespace/repo").subdomain)
```

La CLI de Hugging Face puede resolver el subdominio y abrir la sesión por ti:

```shell
# SSH into the Space's Dev Mode container
hf spaces ssh username/my-space

# Print the SSH command instead of running it
hf spaces ssh username/my-space --dry-run

# Use a specific identity file
hf spaces ssh username/my-space -i ~/.ssh/id_ed25519
```

Pasa `--auto` para habilitar el modo Dev sin solicitar confirmación si no está en ejecución. Consulta la [referencia de la CLI `hf spaces ssh`](https://huggingface.co/docs/huggingface_hub/package_reference/cli#hf-spaces-ssh) para obtener la lista completa de opciones.

Deberás añadir la clave pública SSH de tu máquina a [tu cuenta de usuario](https://huggingface.co/settings/keys) para poder conectar al Space mediante SSH. Consulta la documentación de [Git over SSH](./security-git-ssh#add-a-ssh-key-to-your-account) para obtener instrucciones más detalladas.

#### VS Code

También puedes usar una instalación local de VS Code para conectarte al contenedor del Space. Para ello, instala la extensión [Remote - SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) y conéctate al mismo host `<space-subdomain>@ssh.hf.space`.

### Persistir cambios

Los cambios que realices cuando el modo de desarrollo (Dev Mode) está habilitado no se guardan automáticamente en el repositorio del Space. De forma predeterminada, se descartarán cuando el modo de desarrollo se deshabilite o cuando el Space entre en modo de suspensión.

Si desea persistir los cambios realizados mientras el modo de desarrollo está habilitado, debe usar `git` desde dentro del contenedor del Space (usando VS Code o SSH). Por ejemplo:

```shell
# Add changes and commit them
git add .
git commit -m "Persist changes from Dev Mode"

# Push the commit to persist them in the repo
git push
```

El modal mostrará una advertencia si tienes cambios sin confirmar o sin enviar en el Space:

## Activar el modo de desarrollo

Puedes activar el modo de desarrollo en tu Space desde la interfaz web o a través de la API.

### A través de la API

Puede alternar el modo de desarrollo de forma programática:

```
POST https://huggingface.co/api/spaces/{namespace}/{repo}/dev-mode
Content-Type: application/json
Authorization: Bearer {token}

{
  "enabled": true
}
```

### A través de la interfaz web

También puedes crear un Space con el modo de desarrollo habilitado:

## Limitaciones

Dev Mode no está disponible actualmente para Spaces estáticos. Los Spaces de Docker también tienen algunos requisitos adicionales.

### Espacios de Docker

El modo de desarrollo se admite para los Espacios de Docker. Sin embargo, tu Espacio debe cumplir con las siguientes reglas para que el modo de desarrollo funcione correctamente.

1. Deben instalarse los siguientes paquetes:

- `bash` (necesario para establecer conexiones SSH)
- `curl`, `wget` y `procps` (requeridos por el proceso del servidor de VS Code)
- `git` y `git-lfs` para poder confirmar y enviar cambios desde tu entorno de Dev Mode

2. El código de su aplicación debe estar ubicado en la carpeta `/app` para que el daemon de Dev Mode pueda detectar los cambios.

3. La carpeta `/app` debe pertenecer al usuario con uid `1000` para permitirte realizar cambios en el código.

4. El Dockerfile debe contener una instrucción `CMD` para el inicio. Consulta la [documentación de Docker](https://docs.docker.com/reference/dockerfile/#cmd) sobre la instrucción `CMD` para obtener más detalles.

Dev Mode funciona bien cuando la imagen base es de tipo debian (por ejemplo, ubuntu).

Las distribuciones de Linux más exóticas (por ejemplo, alpine) no se prueban y no se garantiza que el modo de desarrollo funcione en ellas.

### Ejemplo de Dockerfiles compatibles

Este es un ejemplo de un Dockerfile compatible con el modo de desarrollo de Spaces.

Instala los paquetes necesarios con `apt-get`, junto con algunos más para la comodidad del desarrollador (específicamente: `top`, `vim` y `nano`). A continuación, inicia una aplicación de NodeJS desde `/app`.

```Dockerfile
FROM node:19-slim

RUN apt-get update && \
    apt-get install -y \
      bash \
      git git-lfs \
      wget curl procps \
      htop vim nano && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --link ./ /app
RUN  npm i 

RUN chown 1000 /app
USER 1000
CMD ["node", "index.js"]
```

Hay varios ejemplos de Docker Spaces compatibles con Dev Mode en esta organización. ¡No dudes en duplicarlos en tu espacio de nombres!

Ejemplo de aplicación en Python (servidor HTTP de FastAPI): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-python

Ejemplo de aplicación en JavaScript (servidor HTTP de Express.js): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-javascript

## Comentarios

Puedes compartir tu opinión sobre el modo de desarrollo de Spaces directamente en HF Hub: https://huggingface.co/spaces/dev-mode-explorers/README/discussions

