# Spaces Dev Mode: Phát triển liền mạch trong Spaces

> [!WARNING]
> Chế độ Dev của Spaces là một phần của các gói PRO hoặc Team & Enterprise.

## Chế độ Dev của Spaces

Spaces Dev Mode là tính năng giúp việc gỡ lỗi ứng dụng của bạn trở nên dễ dàng hơn và rút ngắn thời gian lặp lại trên Spaces.

Mỗi khi bạn commit các thay đổi vào repo Space của mình, hình ảnh Docker bên dưới sẽ được build lại, sau đó một máy ảo mới sẽ được cấp phát để chạy container mới.

Chế độ Dev cho phép bạn cập nhật Space của mình nhanh hơn bằng cách ghi đè lên hình ảnh Docker.

Ảnh Docker Dev Mode khởi chạy ứng dụng của bạn dưới dạng tiến trình con, cho phép bạn khởi động lại nó mà không cần dừng container Space. Nó cũng khởi chạy một máy chủ SSH (cho trình soạn thảo và terminal cục bộ) và một máy chủ VS Code (cho VS Code Web trong sản phẩm) ở chế độ nền, để bạn có thể kết nối với Space.

Khả năng kết nối với Space đang chạy mở ra một số trường hợp sử dụng:

    - Bạn có thể thực hiện các thay đổi đối với mã ứng dụng mà không cần Space xây dựng lại mỗi lần
    - Bạn có thể gỡ lỗi một ứng dụng đang chạy và theo dõi tài nguyên theo thời gian thực

Nhìn chung, điều này giúp việc phát triển và thử nghiệm với Spaces nhanh hơn đáng kể bằng cách bỏ qua giai đoạn xây dựng lại hình ảnh Docker.

## Giao diện

Khi Dev Mode được bật trên Space của bạn, bạn sẽ thấy một hộp thoại như sau.

Ứng dụng không tự động khởi động lại khi bạn thay đổi mã. Để các thay đổi của bạn hiển thị trong Space, bạn cần sử dụng nút `Refresh` để khởi động lại ứng dụng.

  Nếu bạn đang sử dụng Gradio SDK, hoặc ứng dụng của bạn dựa trên Python, hãy lưu ý rằng các yêu cầu phụ thuộc không được cài đặt tự động. Bạn sẽ cần chạy thủ công `pip install` từ VS Code hoặc SSH.

### Kết nối

Dev Mode hiển thị Space đang chạy dưới dạng một host SSH tiêu chuẩn. VS Code và bất kỳ trình chỉnh sửa nào khác đều kết nối thông qua cùng một điểm cuối SSH đó.

#### SSH

Khi Dev Mode đang chạy, hãy kết nối bằng cách:

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

Tên miền con được hiển thị trong hộp thoại điều khiển Chế độ Dev. Bạn cũng có thể lấy nó theo cách lập trình:

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

Hugging Face CLI có thể phân giải tên miền con và mở phiên cho bạn:

```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
```

Truyền `--auto` để bật Dev Mode mà không cần hỏi nếu nó chưa chạy. Xem [`hf spaces ssh` CLI reference](https://huggingface.co/docs/huggingface_hub/package_reference/cli#hf-spaces-ssh) để biết danh sách đầy đủ các tùy chọn.

Bạn cần thêm khóa SSH công khai của máy vào [tài khoản người dùng](https://huggingface.co/settings/keys) để có thể kết nối với Space bằng SSH. Xem tài liệu [Git over SSH](./security-git-ssh#add-a-ssh-key-to-your-account) để có hướng dẫn chi tiết hơn.

#### VS Code

Bạn cũng có thể sử dụng bản cài đặt VS Code cục bộ để kết nối với container của Space. Để làm điều này, hãy cài đặt tiện ích mở rộng [Remote - SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) và kết nối đến cùng một host `<space-subdomain>@ssh.hf.space`.

### Lưu trữ các thay đổi

Những thay đổi bạn thực hiện khi Dev Mode được bật sẽ không được tự động lưu vào kho Space. Mặc định, chúng sẽ bị hủy bỏ khi Dev Mode bị tắt hoặc khi Space chuyển sang trạng thái ngủ.

Nếu bạn muốn lưu lại các thay đổi được thực hiện khi Dev Mode đang bật, bạn cần sử dụng `git` từ bên trong container của Space (dùng VS Code hoặc SSH). Ví dụ:

```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
```

Cửa sổ bật lên sẽ hiển thị cảnh báo nếu bạn có các thay đổi chưa được cam kết hoặc chưa được đẩy lên trong Space:

## Bật Chế độ Dev

Bạn có thể bật Dev Mode cho Space của mình từ giao diện web hoặc qua API.

### Thông qua API

Bạn có thể bật/tắt Dev Mode bằng cách lập trình:

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

{
  "enabled": true
}
```

### Thông qua giao diện web

Bạn cũng có thể tạo một Space với chế độ dev được bật:

## Hạn chế

Dev Mode hiện không khả dụng cho các Spaces tĩnh. Các Spaces Docker cũng có một số yêu cầu bổ sung.

### Docker Spaces

Dev Mode được hỗ trợ cho Docker Spaces. Tuy nhiên, Space của bạn cần tuân thủ các quy tắc sau để Dev Mode hoạt động đúng cách.

1. Các gói sau đây phải được cài đặt:

- `bash` (cần thiết để thiết lập kết nối SSH)
- `curl`, `wget` và `procps` (bắt buộc cho tiến trình máy chủ VS Code)
- `git` và `git-lfs` để có thể commit và push các thay đổi từ môi trường Dev Mode của bạn

2. Mã ứng dụng của bạn phải được đặt trong thư mục `/app` để tiến trình nền Dev Mode có thể phát hiện các thay đổi.

3. Thư mục `/app` phải do người dùng có uid `1000` sở hữu để bạn có thể thực hiện các thay đổi đối với mã.

4. Dockerfile phải chứa chỉ thị `CMD` để khởi động. Xem [tài liệu của Docker](https://docs.docker.com/reference/dockerfile/#cmd) về chỉ thị `CMD` để biết thêm chi tiết.

Dev Mode hoạt động tốt khi image gốc dựa trên debian (ví dụ: ubuntu).

Các bản phân phối Linux kỳ lạ hơn (ví dụ, alpine) không được kiểm thử và Dev Mode không được đảm bảo hoạt động trên chúng.

### Ví dụ về Dockerfile tương thích

Đây là một ví dụ về Dockerfile tương thích với Spaces Dev Mode.

Nó cài đặt các gói cần thiết bằng `apt-get`, cùng với một vài gói khác để tiện cho việc phát triển (cụ thể là: `top`, `vim` và `nano`). Sau đó, nó khởi động một ứng dụng NodeJS từ `/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"]
```

Có một số ví dụ về Docker Spaces tương thích với Dev Mode trong tổ chức này. Bạn có thể tự do sao chép chúng vào namespace của mình!

Ứng dụng Python mẫu (máy chủ HTTP FastAPI): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-python

Ứng dụng JavaScript mẫu (máy chủ HTTP Express.js): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-javascript

## Phản hồi

Bạn có thể chia sẻ phản hồi về Spaces Dev Mode trực tiếp trên HF Hub: https://huggingface.co/spaces/dev-mode-explorers/README/discussions

