# Spaces Geliştirme Modu: Spaces'te kesintisiz geliştirme

> [!WARNING]
> Spaces Dev Mode, PRO veya Team & Enterprise planlarının bir parçasıdır.

## Spaces Geliştirme Modu

Spaces Dev Mode, uygulamanızın hata ayıklamasını kolaylaştıran ve Spaces üzerinde iterasyon yapmayı hızlandıran bir özelliktir.

Space deposuna her değişiklik yaptığınızda, altta yatan Docker imajı yeniden oluşturulur ve ardından yeni konteyneri barındırmak için yeni bir sanal makine tahsis edilir.

Dev Mode, Docker görüntüsünü geçersiz kılma yoluyla Space'inizi çok daha hızlı güncellemenizi sağlar.

Dev Mode Docker görüntüsü, uygulamanızı bir alt süreç olarak başlatır; böylece Space konteynerinin kendisini durdurmadan uygulamayı yeniden başlatabilirsiniz. Ayrıca, Space'e bağlanabilmeniz için arka planda bir SSH sunucusunu (yerel editörler ve terminaller için) ve bir VS Code sunucusunu (ürün içi VS Code Web için) başlatır.

Çalışan Space'e bağlanabilme özelliği çeşitli kullanım senaryolarını mümkün kılar:

    - Uygulama kodunda değişiklikler yapabilirsiniz; her seferinde Space'in yeniden derlenmesine gerek kalmaz
    - Çalışan bir uygulamayı hata ayıklayabilir ve kaynakları canlı olarak izleyebilirsiniz

Genel olarak, Docker görüntüsü yeniden derleme aşamasını atlayarak Spaces üzerinde geliştirme ve deney yapma sürecini çok daha hızlı hale getirir.

## Arayüz

Space'inizde Dev Mode etkinleştirildiğinde, aşağıdaki gibi bir modal görmelisiniz.

Uygulama, kodu değiştirdiğinizde otomatik olarak yeniden başlatılmaz. Değişikliklerinizin Space'te görünmesi için, uygulamayı yeniden başlatacak olan `Refresh` düğmesini kullanmanız gerekir.

  Gradio SDK kullanıyorsanız veya uygulamanız Python tabanlıysa, gereksinimlerin otomatik olarak kurulmadığını unutmayın. `pip install` komutunu VS Code veya SSH üzerinden manuel olarak çalıştırmanız gerekir.

### Bağlanıyor

Dev Mode, çalışan Space'i standart bir SSH ana makinesi olarak sunar. VS Code ve diğer tüm editörler, aynı SSH uç noktası üzerinden bağlanır.

#### SSH

Dev Mode çalışmaya başladığında, şu komutla bağlanın:

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

Alt alan adı, Dev Mode kontrolleri modalında gösterilir. Ayrıca programatik olarak da alabilirsiniz:

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

Hugging Face CLI, alt alan adını çözebilir ve oturumu sizin için açabilir:

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

Dev Mode zaten çalışmıyorsa, istek sormadan etkinleştirmek için `--auto` parametresini geçirin. Tüm seçenekler için [`hf spaces ssh` CLI referansına](https://huggingface.co/docs/huggingface_hub/package_reference/cli#hf-spaces-ssh) bakın.

SSH ile Space'e bağlanabilmek için makinenizin SSH anahtarını [kullanıcı hesabınıza](https://huggingface.co/settings/keys) eklemeniz gerekir. Daha ayrıntılı talimatlar için [Git over SSH](./security-git-ssh#add-a-ssh-key-to-your-account) belgesine göz atın.

#### VS Code

VS Code'un yerel kurulumunu da Space konteynerine bağlanmak için kullanabilirsiniz. Bunu yapmak için [Remote - SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) uzantısını yükleyin ve aynı `<space-subdomain>@ssh.hf.space` ana bilgisayarına bağlanın.

### Değişiklikleri kalıcı hale getirme

Dev Mode etkinleştirildiğinde yaptığınız değişiklikler, Space deposuna otomatik olarak kaydedilmez. Varsayılan olarak, Dev Mode devre dışı bırakıldığında veya Space uyku moduna geçtiğinde bu değişiklikler silinir.

Dev Mode etkinleştirildiği sırada yapılan değişiklikleri kalıcı hale getirmek istiyorsanız, Space konteynerinin içinden `git` kullanmanız gerekir (VS Code veya SSH ile). Örneğin:

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

Space'te taahhüt edilmemiş veya itilmemiş değişiklikleriniz varsa modal bir uyarı gösterecektir:

## Geliştirici Modunu Etkinleştirme

Dev Mode'ı web arayüzünden veya API üzerinden Space'inizde etkinleştirebilirsiniz.

### API üzerinden

Dev Mode'u programatik olarak açabilirsiniz:

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

{
  "enabled": true
}
```

### Web arayüzü üzerinden

Ayrıca dev modu etkinleştirilmiş bir Space oluşturabilirsiniz:

## Kısıtlamalar

Dev Mode şu anda statik Spaces için mevcut değildir. Docker Spaces'in de bazı ek gereksinimleri vardır.

### Docker Spaces

Dev Mode, Docker Spaces için desteklenmektedir. Ancak Dev Mode'un düzgün çalışabilmesi için Space'inizin aşağıdaki kurallara uyması gerekir.

1. Aşağıdaki paketler kurulmalıdır:

- `bash` (SSH bağlantılarını kurmak için gereklidir)
- `curl`, `wget` ve `procps` (VS Code sunucu süreci tarafından gereklidir)
- Dev Mode ortamınızdan değişiklikleri commit ve push yapabilmek için `git` ve `git-lfs`

2. Dev Mode daemon'ının değişiklikleri algılayabilmesi için uygulama kodunuzun `/app` klasöründe bulunması gerekir.

3. Kodda değişiklik yapabilmek için `/app` klasörünün uid'si `1000` olan kullanıcıya ait olmalıdır.

4. Dockerfile, başlatma için bir `CMD` talimatı içermelidir. `CMD` talimatı hakkında daha fazla ayrıntı için [Docker'ın belgelerini](https://docs.docker.com/reference/dockerfile/#cmd) inceleyin.

Dev Mode, taban görüntüsü debian tabanlı olduğunda (ör. ubuntu) iyi çalışır.

Daha egzotik linux dağıtımları (ör. alpine) test edilmemiştir ve Dev Mode bunlarda çalışması garanti edilmemektedir.

### Uyumlu Dockerfile örnekleri

Bu, Spaces Dev Mode ile uyumlu bir Dockerfile örneğidir.

Gerekli paketleri `apt-get` ile yükler, geliştirici kolaylığı için birkaç ek paket daha ekler (bunlar: `top`, `vim` ve `nano`). Ardından `/app` konumundan bir NodeJS uygulaması başlatır.

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

Bu organizasyonda Dev Mode ile uyumlu Docker Spaces'in birkaç örneği bulunmaktadır. Bunları kendi ad alanınızda çoğaltmaktan çekinmeyin!

Örnek Python uygulaması (FastAPI HTTP sunucusu): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-python

Örnek JavaScript uygulaması (Express.js HTTP sunucusu): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-javascript

## Geri bildirim

Spaces Dev Mode hakkındaki geri bildirimlerinizi doğrudan HF Hub üzerinden paylaşabilirsiniz: https://huggingface.co/spaces/dev-mode-explorers/README/discussions

