# AnythingLLM Docker ile nasıl kurulur: HTTPS ve Ollama bağlantısı

> AnythingLLM'i Ubuntu veya Debian üzerinde Docker ile barındırın: kalıcı depolama, çok kullanıcılı giriş, Caddy ile HTTPS, yerel Ollama bağlantısı ve yedekler.

Zorluk: Orta\
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13

AnythingLLM hepsi bir arada bir yapay zeka uygulamasıdır: belgeleri çalışma alanlarında (workspace) toplar, seçtiğiniz dil modeliyle bu belgeler üzerinden sohbet eder ve web'de gezinebilen veya araç çağırabilen ajanlar çalıştırırsınız. Docker sürümü, sunucular için tasarlanmış çok kullanıcılı sürümdür; roller, parola koruması ve bir API içerir.

Bu rehber resmi `mintplexlabs/anythingllm` imajını Ubuntu veya Debian üzerinde Docker Compose ile çalıştırır. Tüm verileri ana makinedeki bir klasörde tutar, kendi imzalama anahtarlarınızı belirler, uygulama internetten erişilebilir hale gelmeden önce çok kullanıcılı modu bir SSH tüneli üzerinden açar, Caddy ile HTTPS üzerinden yayınlar ve aynı makinedeki bir Ollama sunucusuna bağlarsınız. Rehber yedekleme, güncelleme ve en sık karşılaşılan hataların çözümleriyle biter.

## Ön koşullar

- Docker Engine ve Compose eklentisi kurulu, **Ubuntu 24.04 LTS**, **Ubuntu 26.04 LTS**, **Debian 12** veya **Debian 13** çalıştıran bir sunucu. Önce [Ubuntu'ya Docker kurulumu](/guides/install-docker-ubuntu) veya [Debian'a Docker kurulumu](/guides/install-docker-debian) rehberini izleyin.
- `sudo` yetkisi ve SSH anahtarıyla girişi olan, root olmayan bir kullanıcı; bkz. [Yeni bir Linux sunucusunu güvenli hale getirin](/guides/secure-a-new-linux-server) ve [SSH anahtarlarını ayarlayın](/guides/ssh-keys).
- Sunucuyu gösteren bir A (isteğe bağlı olarak AAAA) kaydına sahip `anythingllm.example.com` gibi bir alan adı ve [Caddy reverse proxy](/guides/caddy-reverse-proxy) rehberindeki gibi kurulmuş Caddy.
- Bir dil modeli: barındırılan bir sağlayıcıdan API anahtarı veya [Ollama kurulumu](/guides/install-ollama) rehberiyle kurulmuş Ollama.

AnythingLLM belgeleri Docker sürümü için şu en düşük değerleri yayınlar:

| Kaynak | En düşük (resmi) | Önerilen başlangıç |
|---|---|---|
| CPU | 2 çekirdek, x86'da AVX2 ile | 2–4 vCPU |
| RAM | 2 GB | 4 GB, artı yerel modellerinizin ihtiyacı |
| Disk | 5 GB | 20 GB veya daha fazla; belgelerinizle büyür |

Önerilen sütun ihtiyatlı bir başlangıç noktasıdır, ölçüm sonucu değildir. Ollama aynı sunucuda çalışacaksa modelin kendi bellek ihtiyacını da ekleyin.

x86 sunucularda CPU'nun AVX2 desteği **zorunludur**; varsayılan LanceDB vektör veritabanı onsuz çöker. ARM64 sunucular ayrı bir derleme kullanır ve bundan etkilenmez. Başlamadan önce kontrol edin:

```bash
lscpu | grep -o avx2
```

Komut `avx2` yazıyorsa hazırsınız. Hiçbir şey yazmıyorsa CPU'su AVX2 sunan bir sunucu seçin.

## Adım 1 — Proje klasörünü ve gizli anahtarları oluşturun

Bu uygulamaya ait her şeyi `/opt/anythingllm` altında tutun. `storage` klasörü konteynerin veri dizini olur. AnythingLLM kendi ayarlarını da bu klasördeki bir `.env` dosyasına yazar; bu dosyanın ilk başlatmadan önce dosya olarak var olması gerekir, aksi halde Docker onun yerine bir dizin oluşturur.

```bash
sudo mkdir -p /opt/anythingllm/storage
sudo chown -R $USER:$USER /opt/anythingllm
cd /opt/anythingllm
touch storage/.env
```

Ardından Compose dosyasının yanında ikinci bir `.env` dosyası oluşturun. Compose bu dosyayı okur ve konteynere üç gizli değer aktarır: `JWT_SECRET` oturumları imzalar; `SIG_KEY` ve `SIG_SALT` ise örnek yapılandırmanın en az 32 karakterlik rastgele dizeler olarak ayarlanmasını istediği imzalama değerleridir.

```bash
cat > .env <<EOF
JWT_SECRET=$(openssl rand -hex 32)
SIG_KEY=$(openssl rand -hex 32)
SIG_SALT=$(openssl rand -hex 32)
EOF
chmod 600 .env
sudo chown -R 1000:1000 storage
```

Konteyner UID ve GID değeri 1000 olan kullanıcıyla çalışır; bu yüzden `storage` klasörünün sahibi o olmalıdır. Kestirme olarak `chmod -R 777` kullanmayın: klasör veritabanınızı, belgelerinizi ve uygulamaya girdiğiniz API anahtarlarını içerir.

## Adım 2 — Compose dosyasını yazın

`/opt/anythingllm/compose.yaml` dosyasını oluşturun:

```yaml
services:
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped
    ports:
      - "127.0.0.1:3001:3001"
    cap_add:
      - SYS_ADMIN
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - STORAGE_DIR=/app/server/storage
      - JWT_SECRET=${JWT_SECRET}
      - SIG_KEY=${SIG_KEY}
      - SIG_SALT=${SIG_SALT}
      - DISABLE_SWAGGER_DOCS=true
    volumes:
      - ./storage:/app/server/storage
      - ./storage/.env:/app/server/.env
```

Her parçanın görevi:

- `127.0.0.1:3001:3001` web arayüzünü yalnızca loopback adresinde yayınlar. Docker yayınlanan portlarda ufw'yi atlar; 3001 numaralı portu internetten uzak tutan şey localhost'a bağlamaktır. Herkese açık tek giriş noktası Caddy olacaktır.
- `cap_add: SYS_ADMIN` resmi çalıştırma komutunu izler. Belgeler bunu web sayfalarını kazımak için zorunlu sayar; çünkü kazıyıcı Chromium'u sandbox içinde çalıştırır. Web sitelerini hiçbir zaman belge olarak eklemeyecekseniz bu iki satırı silebilirsiniz.
- `extra_hosts`, `host.docker.internal` adını ana makineye yönlendirir; böylece konteyner Adım 6'da aynı sunucudaki Ollama'ya ulaşabilir.
- `DISABLE_SWAGGER_DOCS=true`, örnek yapılandırmanın üretim için önerdiği şekilde `/api/docs` sayfasını kapatır.

> **İpucu**
>
> Resmi talimatlar `latest` etiketini kullanır. Yükseltme zamanını kendiniz belirlemek için `latest` yerine [AnythingLLM sürümler sayfasından](https://github.com/Mintplex-Labs/anything-llm/releases) bir sürüm etiketi yazın, örneğin `1.17.0`, ve güncelleme yaparken bu etiketi bilinçli olarak değiştirin.

## Adım 3 — AnythingLLM'i başlatın ve kontrol edin

```bash
docker compose up -d
docker compose ps
docker compose logs --tail 50 anythingllm
```

`docker compose ps` çıktısında `anythingllm` konteyneri `127.0.0.1:3001->3001/tcp` ile çalışır görünmelidir. Ardından başlangıç sayfasını sunucunun kendisinden isteyin:

```bash
curl -I http://127.0.0.1:3001
```

`HTTP/1.1 200 OK` görmelisiniz. Konteyner sürekli yeniden başlıyorsa logları okuyun ve aşağıdaki sorun giderme bölümüne bakın.

## Adım 4 — Kurulumu bir SSH tüneli üzerinden tamamlayın

İlk başlatmadan hemen sonra AnythingLLM'i açabilen herkes onu yapılandırabilir. Uygulamanın parolasız olarak hiç açığa çıkmaması için ilk kurulumu bir SSH tüneli üzerinden yapın. Kendi bilgisayarınızda şunu çalıştırın:

```bash
ssh -L 3001:127.0.0.1:3001 youruser@203.0.113.10
```

Bu oturumu açık tutun ve tarayıcıda `http://localhost:3001` adresine gidin. Karşılama ekranları LLM sağlayıcınızı, embedding modelini (başlangıç için yerleşik embedder yeterlidir) ve vektör veritabanını (LanceDB'de kalın) sorar. Bunların hepsini daha sonra değiştirebilirsiniz.

Ardından ayarları açın ve **Enable multi-user mode** seçeneğini etkinleştirin. İlk yönetici hesabı için bir kullanıcı adı ve güçlü bir parola girin; AnythingLLM oturumunuzu kapatır, yeni hesapla yeniden giriş yaparsınız. Üç rol vardır:

- **Admin** tüm sisteme tam erişime sahiptir.
- **Manager** tüm çalışma alanlarını ve çoğu ayarı görür, ancak LLM, embedder veya vektör veritabanı ayarlarını değiştiremez.
- **Default** yalnızca bir admin veya manager tarafından eklendiği çalışma alanlarında sohbet edebilir.

> **Uyarı**
>
> Çok kullanıcılı mod yeniden kapatılamaz. Kurulumu yalnızca siz kullanacaksanız tek kullanıcılı alternatif **Password Protect Instance** seçeneğidir; ancak bu parolaya sahip herkes tüm ayarları değiştirebilir ve tüm sohbetleri okuyabilir.

## Adım 5 — AnythingLLM'i Caddy ile HTTPS üzerinden yayınlayın

`/etc/caddy/Caddyfile` dosyasına alan adınız için bir site bloğu ekleyin:

```caddyfile
anythingllm.example.com {
    reverse_proxy 127.0.0.1:3001
}
```

Caddy'yi yeniden yükleyin ve herkese açık adresi test edin:

```bash
sudo systemctl reload caddy
curl -I https://anythingllm.example.com
```

Caddy sertifikayı ilk istekte alır ve `HTTP/2 200` döndürür. WebSocket bağlantılarını kendiliğinden aktarır ve varsayılan olarak okuma zaman aşımı uygulamaz; bu da AnythingLLM'in ajan oturumlarına ve uzun yanıtlarına uygundur. Nginx'i tercih ederseniz [Nginx ve Certbot](/guides/nginx-reverse-proxy-certbot) rehberini izleyin ve AnythingLLM bulut rehberinde gösterildiği gibi `Upgrade` ve `Connection` başlıklarını iletin; [Traefik](/guides/traefik-reverse-proxy) de çalışır.

Güvenlik duvarının yalnızca SSH ve web trafiğine izin verdiğinden emin olun:

```bash
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
```

## Adım 6 — Aynı sunucudaki Ollama'ya bağlanın

[Ollama kurulumu](/guides/install-ollama) rehberini izlediyseniz Ollama `127.0.0.1:11434` adresini dinler ve bir konteyner bu adrese ulaşamaz. AnythingLLM belgelerinin açıkladığı gibi konteyner içindeki `localhost` konteynerin kendisidir. Ollama SSS sayfasında anlatıldığı gibi bir systemd drop-in dosyasıyla Ollama'nın tüm adreslerde dinlemesini sağlayın:

```bash
sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo tee /etc/systemd/system/ollama.service.d/override.conf <<'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF
sudo systemctl daemon-reload
sudo systemctl restart ollama
ss -tln | grep 11434
```

Son komut Ollama'yı `0.0.0.0:11434` veya `*:11434` üzerinde göstermelidir. `override.conf` zaten varsa dosyayı değiştirmek yerine `Environment` satırını ona ekleyin.

> **Uyarı**
>
> Ollama'nın kimlik doğrulaması yoktur. Docker'ın yayınladığı portların aksine doğrudan ana makinede çalışan bir servis ufw tarafından korunur; ufw'yi açık tutun ve 11434 numaralı portu herkese açan bir kural asla eklemeyin.

ufw, Docker ağlarından ana makineye gelen trafiği de varsayılan olarak engeller. Compose ağının alt ağını bulun ve Ollama'ya yalnızca bu alt ağın erişmesine izin verin:

```bash
docker network inspect anythingllm_default | grep Subnet
sudo ufw allow from 172.18.0.0/16 to any port 11434 proto tcp
sudo ufw status
```

`172.18.0.0/16` değerini ilk komutun yazdığı alt ağla değiştirin. Bu kural Ollama'yı yalnızca ufw varsayılan reddetme politikasıyla etkinken korur; `sudo ufw status verbose` çıktısında `Status: active` ve `deny (incoming)` göründüğünü ve başka bir makineden `nc -vz sunucu-ip-adresiniz 11434` komutunun başarısız olduğunu doğrulayın. Şimdi AnythingLLM'in LLM ayarlarını açın, **Ollama** seçin ve temel adresi (base URL) `http://host.docker.internal:11434` olarak girin. Model listesi `ollama pull` ile indirdiğiniz modellerle dolar; birini seçip kaydedin. Embedder'ı da Ollama'ya geçirebilirsiniz (örneğin `nomic-embed-text` gibi bir embedding modeliyle), ancak yerleşik embedder ek kurulum olmadan çalışır. Büyük modeller için bir [GPU sunucusu](/gpu-servers) düşünün.

## Yedekleme ve geri yükleme

Tüm durum `/opt/anythingllm` içindedir: `storage` klasörü (SQLite veritabanı, belgeler, vektör verileri, uygulama ayarları) ile `compose.yaml` ve `.env` içindeki gizli değerler. Veritabanı ve vektör dosyalarının tutarlı olması için konteyneri kısa süreliğine durdurun, ardından klasörü arşivleyin:

```bash
sudo mkdir -p /opt/backups
cd /opt/anythingllm
docker compose stop
sudo tar czf /opt/backups/anythingllm-$(date +%F).tar.gz -C /opt anythingllm
docker compose start
```

Aynı sunucuya veya Docker kurulu yeni bir sunucuya geri yüklemek için arşivi açın ve yığını başlatın:

```bash
sudo tar xzf /opt/backups/anythingllm-2026-10-09.tar.gz -C /opt
cd /opt/anythingllm
docker compose up -d
```

Geri yüklemeyi aynı veya daha yeni bir imaj sürümüyle yapın, asla daha eskisiyle yapmayın. Arşiv gizli anahtarlarınızı ve tüm belgeleri içerir; sunucudan çıkacaksa şifreleyin ve yedekleri sunucunun dışına, örneğin bir nesne depolama alanına veya başka bir makineye kopyalayın.

## AnythingLLM güncelleme

Önce [sürüm notlarını](https://github.com/Mintplex-Labs/anything-llm/releases) okuyun ve yedek alın. Ardından yeni imajı çekin ve konteyneri yeniden oluşturun; `storage` içindeki veriler korunur:

```bash
cd /opt/anythingllm
docker compose pull
docker compose up -d
docker image prune -f
```

Bir sürüm etiketi sabitlediyseniz `docker compose pull` öncesinde `compose.yaml` içinde değiştirin. Sonrasında `docker compose logs --tail 50 anythingllm` çıktısını kontrol edin; veritabanı geçişleri başlangıç sırasında çalışır.

## Sorun giderme

### Konteyner Illegal instruction hatasıyla kapanıyor

CPU, x86'da varsayılan LanceDB vektör veritabanının ihtiyaç duyduğu AVX2'yi sunmuyor. `lscpu | grep -o avx2` ile doğrulayın. CPU'su AVX2 sunan bir sunucuya geçin veya AnythingLLM yapılandırmasında farklı bir vektör veritabanı ayarlayın; bunlar sizin barındırmanız gereken ayrı servisler olarak çalışır.

### unable to open database file

Konteyner storage klasörüne yazamıyor; genellikle klasörün sahibi UID 1000 olmadığı için. Sahipliği düzeltin ve yeniden başlatın:

```bash
sudo chown -R 1000:1000 /opt/anythingllm/storage
docker compose restart
```

### 11434 portuna ECONNREFUSED veya boş Ollama model listesi

Ollama hâlâ `127.0.0.1` üzerinde dinliyor ya da ufw Docker alt ağını engelliyor. Ana makinede `ss -tln | grep 11434` komutunu çalıştırın, `docker network inspect anythingllm_default | grep Subnet` çıktısındaki alt ağı `sudo ufw status` ile karşılaştırın ve temel adresin `localhost` değil `http://host.docker.internal:11434` olduğundan emin olun.

### Web sitesi kazıma No usable sandbox hatasıyla başarısız oluyor

Kazıyıcının Chromium'u `SYS_ADMIN` yetkisine ihtiyaç duyar. Adım 2'deki `cap_add` satırlarını `compose.yaml` dosyasına geri ekleyin ve `docker compose up -d` çalıştırın.

### Caddy 502 Bad Gateway döndürüyor

Konteyner durmuş veya başka bir portta dinliyor. `docker compose ps` ve `curl -I http://127.0.0.1:3001` çalıştırın; site bloğu `compose.yaml` dosyasının yayınladığı portu göstermelidir.

## Sonraki adımlar

- Kendi modellerinizi [Ollama kurulumu](/guides/install-ollama) ile çalıştırın veya [Open WebUI ve Ollama](/guides/open-webui-ollama) ile bir sohbet arayüzü ekleyin.
- Compose dosya biçimini [Docker Compose temelleri](/guides/docker-compose-basics) rehberinde daha ayrıntılı öğrenin.
- Ajanlar, geliştirici API'si ve sayfaya gömülebilir sohbet pencereleri için resmi [AnythingLLM belgelerini](https://docs.anythingllm.com/) okuyun.
- Bu uygulama için sunucu seçeneklerini [AnythingLLM hosting](/anythingllm-hosting) sayfasında inceleyin.

## Sık sorulan sorular

### AnythingLLM için GPU gerekir mi?

Hayır. AnythingLLM'in kendisi CPU üzerinde çalışır, asıl yükü dil modeli taşır. OpenAI veya Anthropic gibi barındırılan bir sağlayıcı kullanabilir ya da Ollama'yı aynı veya başka bir sunucuda çalıştırabilirsiniz. Büyük yerel modeller desteklenen NVIDIA GPU'lu bir sunucuda çok daha hızlı yanıt verir.

### Konteyner neden SYS\_ADMIN yetkisine ihtiyaç duyuyor?

AnythingLLM belgeleri, web sayfalarını kazımak (scrape) istediğinizde --cap-add SYS_ADMIN seçeneğini zorunlu sayar; çünkü kazıyıcı sandbox içinde bir Chromium çalıştırır. Web sitelerini hiçbir zaman belge olarak eklemeyecekseniz bu yetkiyi kaldırabilirsiniz; uygulamanın geri kalanı onsuz çalışır.

### Çok kullanıcılı modu açtıktan sonra tek kullanıcılı moda dönebilir miyim?

Hayır. AnythingLLM belgelerine göre çok kullanıcılı mod bir kez açıldıktan sonra kapatılamaz. Kişileri davet etmeden önce yönetici, manager ve varsayılan kullanıcılarınızı planlayın.

### AnythingLLM konteyneri neden Illegal instruction hatasıyla kapanıyor?

x86 sunucularda varsayılan LanceDB vektör veritabanı AVX2 komut setini destekleyen bir CPU ister. Sunucuda lscpu | grep -o avx2 çalıştırın; hiçbir şey yazmıyorsa CPU'su AVX2 sunan bir sunucu seçin veya farklı bir vektör veritabanı yapılandırın.

### AnythingLLM belgeleri, sohbetleri ve ayarları nerede tutar?

Her şey /app/server/storage konumuna bağlanan storage klasöründedir: SQLite veritabanı, yüklenen ve işlenen belgeler, vektör verileri ve uygulamanın yönettiği .env dosyası. Bu klasörü yedeklerseniz tüm kurulumu yeniden oluşturabilirsiniz.

---

Kaynak: <https://hyperdc.com/tr/guides/tutorials/install-anythingllm>\
Son güncelleme: 2026-10-09
