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.
- Orta
- 30 dk okuma
- Güncellendi
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13
Bu sayfada
- Ön koşullar
- Adım 1 — Proje klasörünü ve gizli anahtarları oluşturun
- Adım 2 — Compose dosyasını yazın
- Adım 3 — AnythingLLM'i başlatın ve kontrol edin
- Adım 4 — Kurulumu bir SSH tüneli üzerinden tamamlayın
- Adım 5 — AnythingLLM'i Caddy ile HTTPS üzerinden yayınlayın
- Adım 6 — Aynı sunucudaki Ollama'ya bağlanın
- Yedekleme ve geri yükleme
- AnythingLLM güncelleme
- Sorun giderme
- Konteyner Illegal instruction hatasıyla kapanıyor
- unable to open database file
- 11434 portuna ECONNREFUSED veya boş Ollama model listesi
- Web sitesi kazıma No usable sandbox hatasıyla başarısız oluyor
- Caddy 502 Bad Gateway döndürüyor
- Sonraki adımlar
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 veya Debian'a Docker kurulumu rehberini izleyin.
sudoyetkisi ve SSH anahtarıyla girişi olan, root olmayan bir kullanıcı; bkz. Yeni bir Linux sunucusunu güvenli hale getirin ve SSH anahtarlarını ayarlayın.- Sunucuyu gösteren bir A (isteğe bağlı olarak AAAA) kaydına sahip
anythingllm.example.comgibi bir alan adı ve Caddy reverse proxy rehberindeki gibi kurulmuş Caddy. - Bir dil modeli: barındırılan bir sağlayıcıdan API anahtarı veya Ollama kurulumu 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:
lscpu | grep -o avx2Komut 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.
sudo mkdir -p /opt/anythingllm/storage
sudo chown -R $USER:$USER /opt/anythingllm
cd /opt/anythingllm
touch storage/.envArdı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.
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 storageKonteyner 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:
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/.envHer parçanın görevi:
127.0.0.1:3001:3001web 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_ADMINresmi ç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.internaladı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/docssayfasını kapatır.
Adım 3 — AnythingLLM'i başlatın ve kontrol edin
docker compose up -d
docker compose ps
docker compose logs --tail 50 anythingllmdocker 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:
curl -I http://127.0.0.1:3001HTTP/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:
ssh -L 3001:127.0.0.1:3001 youruser@203.0.113.10Bu 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.
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:
anythingllm.example.com {
reverse_proxy 127.0.0.1:3001
}Caddy'yi yeniden yükleyin ve herkese açık adresi test edin:
sudo systemctl reload caddy
curl -I https://anythingllm.example.comCaddy 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 rehberini izleyin ve AnythingLLM bulut rehberinde gösterildiği gibi Upgrade ve Connection başlıklarını iletin; Traefik de çalışır.
Güvenlik duvarının yalnızca SSH ve web trafiğine izin verdiğinden emin olun:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verboseAdım 6 — Aynı sunucudaki Ollama'ya bağlanın
Ollama kurulumu 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:
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 11434Son 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.
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:
docker network inspect anythingllm_default | grep Subnet
sudo ufw allow from 172.18.0.0/16 to any port 11434 proto tcp
sudo ufw status172.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 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:
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 startAynı sunucuya veya Docker kurulu yeni bir sunucuya geri yüklemek için arşivi açın ve yığını başlatın:
sudo tar xzf /opt/backups/anythingllm-2026-10-09.tar.gz -C /opt
cd /opt/anythingllm
docker compose up -dGeri 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ı okuyun ve yedek alın. Ardından yeni imajı çekin ve konteyneri yeniden oluşturun; storage içindeki veriler korunur:
cd /opt/anythingllm
docker compose pull
docker compose up -d
docker image prune -fBir 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:
sudo chown -R 1000:1000 /opt/anythingllm/storage
docker compose restart11434 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 ile çalıştırın veya Open WebUI ve Ollama ile bir sohbet arayüzü ekleyin.
- Compose dosya biçimini Docker Compose temelleri rehberinde daha ayrıntılı öğrenin.
- Ajanlar, geliştirici API'si ve sayfaya gömülebilir sohbet pencereleri için resmi AnythingLLM belgelerini okuyun.
- Bu uygulama için sunucu seçeneklerini 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.