Indeks dziennikaDockup / notatka terenowa
Note / self-host-anythingllm

Jak samodzielnie hostować AnythingLLM w 2026 roku: dokumenty, embeddingi i trwałość danych

Samodzielnie hostuj AnythingLLM z poprawnymi portami, trwałym storage, HTTPS, sekretami, kopiami zapasowymi i kontrolą aktualizacji. Dowiedz się, jak naprawić brak mounta storage.

Kontener AnythingLLM może mieć status green, mimo że nie działa funkcja, na której zależy użytkownikom. W przypadku AnythingLLM ukryta awaria zwykle oznacza brak mounta storage albo zmianę modelu embeddingowego po indeksowaniu. W tym poradniku za test akceptacyjny uznajemy następującą czynność: „wczytać dokument, poczekać na embedding, zadać pytanie, którego odpowiedź zależy od tego dokumentu, i zweryfikować cytowany fragment źródłowy”. Całe wdrożenie budujemy od końca, zaczynając właśnie od tego rezultatu.

AnythingLLM pełni w stacku określoną funkcję: zapewnia chat z dokumentami i retrieval bez konieczności budowania pipeline’u od podstaw. Pytanie produkcyjne nie brzmi więc: czy port 3001 odpowiada raz, lecz czy state, zależności i publiczny adres nadal są ze sobą zgodne po restarcie, aktualizacji i odtworzeniu.

Porty, procesy i prywatne usługi

Przydatny diagram AnythingLLM powinien pokazywać publiczną trasę, prywatny port 3001, granicę state oraz wszystkie wymagania pomocnicze. Zaznacz, które strzałki przenoszą credentials, a które zwykły ruch użytkowników. Kontrakt sieciowy AnythingLLM obejmuje embedding provider, LLM provider oraz wystarczającą ilość storage na dokumenty. Prywatne endpointy trzymaj w internal DNS, zezwalaj wyłącznie na wymagane połączenia wychodzące i nadaj AnythingLLM ograniczony service credential.

Zweryfikuj diagram za pomocą jednej rzeczywistej czynności: wczytaj dokument, poczekaj na embedding, zadaj pytanie, którego odpowiedź zależy od tego dokumentu, i sprawdź cytowany fragment źródłowy. Największe obciążenie prawdopodobnie będzie wynikać z parsowania dokumentów, przepustowości embeddingu, rozmiaru vector store oraz kontekstu wysyłanego do wybranego modelu. Monitoruj tę ścieżkę, zamiast traktować wszystkie żądania HTTP jednakowo.

Spraw, aby odtwarzanie AnythingLLM było mierzalne

Zainwentaryzuj każdy trwały artefakt: dokumenty, indeksy wektorowe, workspace’y i ustawienia aplikacji. Zamontuj /app/server/storage przed bootstrapem, zapisz nieszkodliwe przykładowe dane i wymień kontener, aby potwierdzić, że ta ścieżka rzeczywiście jest persistent. Uwzględnij konfigurację, która zmienia sposób interpretowania przechowywanych danych, a nie tylko największy katalog.

Ustal retention, kopiuj backupy poza hosta i przeprowadź restore w clean room. Ćwiczenie odtwarzania AnythingLLM jest zakończone, gdy dokumenty, embeddingi, członkostwo w workspace’ach i ustawienia providerów zostaną odtworzone razem i pozwolą udzielić tej samej odpowiedzi na pytanie oparte na dowodach. Jeśli snapshoty są częścią planu, skorzystaj ze wskazówek PITR kontra snapshoty, aby opisać, co można odzyskać za pomocą każdego mechanizmu.

Wybierz granicę zaufania AnythingLLM

Po pierwszym logowaniu sprawdź, co może zrobić anonimowy użytkownik, zwykły użytkownik i administrator. Błędem, którego należy unikać w AnythingLLM, jest traktowanie logowania do workspace’a jako zamiennika izolowania kluczy providerów. Docelowa polityka powinna ograniczać członków do workspace’ów, a credentials LLM, embeddingu i vector database przechowywać na serwerze.

Wygeneruj JWT_SECRET jako długą losową wartość. Jego rotacja zwykle unieważnia sesje lub tokeny, dlatego zaplanuj wpływ tej operacji na użytkowników, zamiast określać ją jako migrację szyfrowania. Konta zależności trzymaj oddzielnie od kont użytkowników, w miarę możliwości blokuj nieużywany egress i ograniczaj pracę wynikającą z parsowania dokumentów, przepustowości embeddingu, rozmiaru vector store oraz kontekstu wysyłanego do wybranego modelu.

Co musi przejść przed pojawieniem się rzeczywistych danych AnythingLLM

Rejestr wydania AnythingLLM powinien zawierać fakty, a nie informację „wygląda dobrze”. Zapisz digest wybranego image, checksum konfiguracji, publiczny hostname oraz oznaczony timestampem wynik następującego testu: wczytać dokument, poczekać na embedding, zadać pytanie, którego odpowiedź zależy od tego dokumentu, i zweryfikować cytowany fragment źródłowy. Używaj przykładowych danych nieprodukcyjnych, aby test można było uruchamiać po każdym wdrożeniu.

Zweryfikuj osobno dwa zdarzenia cyklu życia. Wymiana kontenera musi zachować prawidłowe działanie, a clean recovery musi pokazać, że dokumenty, embeddingi, członkostwo w workspace’ach i ustawienia providerów zostają odtworzone razem i pozwalają udzielić tej samej odpowiedzi na pytanie oparte na dowodach. Podczas testów mierz parsowanie dokumentów, przepustowość embeddingu, rozmiar vector store oraz kontekst wysyłany do wybranego modelu i zachowaj wynik jako oczekiwany envelope dla tej wersji.

Przetestuj również warunek odmowy lub nieprawidłowy stan: tymczasowo odbierz testowej tożsamości dostęp do embedding providera, LLM providera oraz wystarczającej ilości storage na dokumenty. AnythingLLM powinien zakończyć działanie w sposób ułatwiający diagnozę i nie powinien nadpisywać poprawnego state. Przywróć prawidłowy warunek, ponownie uruchom test na danych przykładowych i dołącz odpowiednie, zredagowane logi. Te artefakty dostarczą konkretnych dowodów potrzebnych przy podejmowaniu przyszłej decyzji o rollbacku.

Zbuduj wymienny kontener AnythingLLM

Minimalna komenda jest przydatna, gdy pokazuje, czym platforma będzie później zarządzać.

docker run -d \
  --name anythingllm \
  --restart unless-stopped \
  -p 127.0.0.1:3001:3001 \
  -v anythingllm-data:/app/server/storage \
  -e JWT_SECRET=replace-with-a-long-random-value \
  mintplexlabs/anythingllm:latest

Port 3001 pozostaje tutaj prywatny dla hosta, a każda wymagana ścieżka jest jawnie określona. Dodaj sprawdzone ustawienia połączeń z embedding providerem, LLM providerem oraz wystarczającą ilością storage na dokumenty; dla prywatnych usług używaj prywatnych nazw. Zweryfikuj uruchomienie zarówno za pomocą logów, jak i testu właściwego dla aplikacji: wczytaj dokument, poczekaj na embedding, zadaj pytanie, którego odpowiedź zależy od tego dokumentu, i sprawdź cytowany fragment źródłowy. Po pomyślnej weryfikacji przypnij wersję image, aby zwykła wymiana kontenera nie zmieniła po cichu zachowania aplikacji.

Przetestuj AnythingLLM spoza serwera

Unikaj tymczasowych i stałych publicznych originów dla AnythingLLM. Zamiast tego użyj zewnętrznego originu HTTPS do dostępu przez przeglądarkę i API, skieruj wybraną nazwę DNS na trasę platformy i proxy’uj wyłącznie do portu 3001.

Wykonaj tę czynność spoza hosta: wczytaj dokument, poczekaj na embedding, zadaj pytanie, którego odpowiedź zależy od tego dokumentu, i sprawdź cytowany fragment źródłowy. Jeśli ingress nie działa, poradnik rozwiązywania problemu 502 opisuje błędy portów i listenerów. Jeśli AnythingLLM odbiera żądanie, ale brakuje mounta storage albo model embeddingowy zmienił się po indeksowaniu, dowody wskazują już na problem poza proxy.

Ćwiczenia awarii dla AnythingLLM

Buduj dashboardy wokół parsowania dokumentów, przepustowości embeddingu, rozmiaru vector store oraz kontekstu wysyłanego do wybranego modelu. Wykres CPU bez kontekstu tego obciążenia nie wyjaśni, dlaczego AnythingLLM działa wolno. Dodaj syntetyczny lub cykliczny test, który próbuje wczytać dokument, poczekać na embedding, zadać pytanie, którego odpowiedź zależy od tego dokumentu, i zweryfikować cytowany fragment źródłowy przy użyciu nieszkodliwych danych testowych.

Przed aktualizacją uwzględnij następujące zagrożenie specyficzne dla aplikacji: zmiana modelu embeddingowego może wymagać ponownego indeksowania, a wydania aplikacji mogą migrować metadane workspace’ów i vector store. Odtwórz najnowszy backup w odizolowanym wdrożeniu, uruchom tam migracje i porównaj działanie. Jeśli brakuje mounta storage albo model embeddingowy zmienił się po indeksowaniu, sprawdź właściwą granicę — publiczny origin, storage lub zależność — zanim zmienisz niezwiązane z problemem ustawienia.

Co Dockup powinien automatyzować dla AnythingLLM

W przypadku AnythingLLM Dockup może utworzyć trasę i certyfikat TLS, zachować mounty, dostarczać sekrety oraz umieścić embedding providera, LLM providera i wystarczającą ilość storage na dokumenty w prywatnej sieci, wdrażając aplikację w Dockup lub na dołączonych serwerach.

Bramką wydania nadal pozostaje konkretna transakcja AnythingLLM: wczytać dokument, poczekać na embedding, zadać pytanie, którego odpowiedź zależy od tego dokumentu, i zweryfikować cytowany fragment źródłowy. Sprawdź również warunek odtworzenia — dokumenty, embeddingi, członkostwo w workspace’ach i ustawienia providerów muszą zostać odtworzone razem i pozwolić udzielić tej samej odpowiedzi na pytanie oparte na dowodach. Te dwa testy pokazują, czy wdrożenie działa i czy można je odzyskać.

Najczęściej zadawane pytania

Czego AnythingLLM potrzebuje do wdrożenia produkcyjnego?

Skieruj kontener AnythingLLM na porcie 3001 przez jeden origin HTTPS. Wymagania sieciowe obejmują embedding providera, LLM providera oraz wystarczającą ilość storage na dokumenty. Nie uznawaj AnythingLLM za gotowy, dopóki nie możesz wczytać dokumentu, poczekać na embedding, zadać pytania, którego odpowiedź zależy od tego dokumentu, i zweryfikować cytowanego fragmentu źródłowego.

Które dane AnythingLLM powinny znajdować się w backupie?

Utrwal /app/server/storage i uwzględnij dokumenty, indeksy wektorowe, workspace’y oraz ustawienia aplikacji w tym samym manifeście odtwarzania. Czyste odtworzenie AnythingLLM kończy się sukcesem tylko wtedy, gdy dokumenty, embeddingi, członkostwo w workspace’ach i ustawienia providerów zostaną odtworzone razem i pozwolą udzielić tej samej odpowiedzi na pytanie oparte na dowodach.

Czy AnythingLLM wymaga HTTPS za reverse proxy?

Użyj HTTPS dla publicznego originu AnythingLLM i pozostaw port 3001 na trasie wewnętrznej. Zastosuj poprawnie ustawienie AnythingLLM: używaj zewnętrznego originu HTTPS do dostępu przez przeglądarkę i API. W przypadku AnythingLLM HTTPS chroni credentials lub treści użytkowników przesyłane przez sieć i zapewnia spójne działanie klienta zależne od originu.

Jak testować aktualizację AnythingLLM?

Odtwórz bieżący state AnythingLLM w odizolowanym wdrożeniu, zastosuj kandydującą wersję i ponownie wykonaj transakcję akceptacyjną. Zwróć szczególną uwagę na to, że zmiana modelu embeddingowego może wymagać ponownego indeksowania, a wydania aplikacji mogą migrować metadane workspace’ów i vector store. Zachowaj poprzedni image AnythingLLM do czasu zrozumienia granicy migracji danych i rollbacku.