Индекс журналаDockup / заметка с места
Note / self-host-anythingllm

Как развернуть AnythingLLM самостоятельно в 2026 году: документы, embeddings и сохранность данных

Разверните AnythingLLM самостоятельно: настройте порты, постоянное хранилище, HTTPS, секреты, резервное копирование и проверки обновлений. Узнайте, как устранить проблему с отсутствующим storage mount.

Контейнер AnythingLLM может быть в состоянии green, даже если основная пользовательская функция не работает. Для AnythingLLM скрытая причина сбоя обычно заключается в отсутствии storage mount или в том, что после индексации изменилась embedding model. В этом руководстве приёмочным тестом считается следующая операция: «загрузить документ, дождаться создания embedding, задать вопрос, ответ на который зависит от этого документа, и проверить процитированный фрагмент источника». Архитектура развёртывания строится от этого результата в обратном направлении.

AnythingLLM выполняет в стеке определённую роль: обеспечивает чат по документам и retrieval без ручной сборки pipeline. Поэтому в production важно не то, отвечает ли порт 3001 один раз, а то, продолжают ли state, зависимости и публичный адрес согласованно работать после перезапуска, обновления и восстановления.

Порты, процессы и приватные сервисы

Полезная схема AnythingLLM показывает публичный маршрут, приватный порт 3001, границу state и все необходимые зависимости. Отметьте, какие стрелки передают credentials, а какие используются для обычного пользовательского трафика. Сетевой контракт AnythingLLM включает embedding provider, LLM provider и достаточный объём storage для документов. Держите приватные endpoints во внутреннем DNS, разрешайте только необходимые исходящие вызовы и выдайте AnythingLLM service credential с ограниченной областью доступа.

Проверьте схему реальным действием: загрузите документ, дождитесь создания embedding, задайте вопрос, ответ на который зависит от этого документа, и проверьте процитированный фрагмент источника. Наибольшая нагрузка, скорее всего, придётся на parsing документов, embedding throughput, размер vector store и context, отправляемый выбранной model. Мониторьте этот путь, а не относитесь ко всем HTTP-запросам одинаково.

Сделайте восстановление AnythingLLM измеримым

Составьте inventory всех durable artifacts: документов, vector indexes, workspaces и application settings. Подключите /app/server/storage до bootstrap, запишите безвредные тестовые данные и замените контейнер, чтобы доказать фактическую persistence этого пути. Включите в резервную копию configuration, которая влияет на интерпретацию сохранённых данных, а не только самый большой каталог.

Задайте retention, копируйте backups за пределы host и выполните clean-room restore. Проверка AnythingLLM считается завершённой, когда documents, embeddings, workspace membership и provider settings восстанавливаются вместе и позволяют получить ответ на тот же вопрос, подтверждённый evidence. Если в плане предусмотрены snapshots, используйте рекомендации по PITR и snapshots, чтобы задокументировать, какие данные можно восстановить каждым механизмом.

Определите trust boundary AnythingLLM

После первого входа проверьте, какие действия доступны anonymous visitor, обычному user и administrator. Ошибка, которой следует избегать в AnythingLLM, — считать workspace login заменой изоляции provider keys. Предусмотренная policy должна ограничивать members конкретными workspaces, а credentials для LLM, embeddings и vector database храниться на server.

Сгенерируйте JWT_SECRET как длинное случайное значение; его rotation обычно приводит к invalidation sessions или tokens, поэтому заранее оцените влияние на пользователей и не называйте это encryption migration. Используйте отдельные dependency accounts, не связанные с human accounts, по возможности запрещайте неиспользуемый egress и ограничивайте операции, на которые влияют parsing документов, embedding throughput, размер vector store и context, отправляемый выбранной model.

Что должно пройти до загрузки реальных данных в AnythingLLM

В release record для AnythingLLM нужны факты, а не формулировка «выглядит хорошо». Сохраните выбранный image digest, configuration checksum, public hostname и timestamped result для следующей операции: загрузить документ, дождаться создания embedding, задать вопрос, ответ на который зависит от этого документа, и проверить процитированный фрагмент источника. Используйте sample data не из production, чтобы проверку можно было запускать после каждого deployment.

Отдельно проверьте два lifecycle events. Замена контейнера должна сохранять нормальную работу; clean recovery должна показать, что documents, embeddings, workspace membership и provider settings восстанавливаются вместе и позволяют получить ответ на тот же вопрос, подтверждённый evidence. Пока выполняются проверки, измеряйте parsing документов, embedding throughput, размер vector store и context, отправляемый выбранной model, а результат сохраняйте как expected envelope для этой версии.

Также проверьте denied или invalid condition: временно запретите test identity доступ к embedding provider, LLM provider и достаточному storage для документов. AnythingLLM должен завершиться сбоем, который можно диагностировать, и не должен перезаписывать корректное state. Восстановите valid condition, повторно запустите sample и приложите соответствующие redacted logs. Эти artifacts обеспечат конкретные доказательства для будущего решения о rollback.

Соберите заменяемый контейнер AnythingLLM

Минимальная команда полезна, если она показывает, чем впоследствии будет управлять платформа.

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

Здесь порт 3001 остаётся приватным на host, а каждый необходимый path указан явно. Добавьте проверенные connection settings для embedding provider, LLM provider и достаточного storage для документов; для приватных сервисов используйте приватные имена. Проверьте startup по logs и с помощью application-specific proof: загрузите документ, дождитесь создания embedding, задайте вопрос, ответ на который зависит от этого документа, и проверьте процитированный фрагмент источника. После проверки зафиксируйте image version, чтобы обычная замена не изменила поведение незаметно.

Проверьте AnythingLLM извне server

Не используйте для AnythingLLM временные и постоянные public origins. Вместо этого применяйте внешний HTTPS origin для доступа из browser и API, направьте выбранное DNS-имя на platform route и проксируйте запросы только на порт 3001.

Выполните эту операцию за пределами host: загрузите документ, дождитесь создания embedding, задайте вопрос, ответ на который зависит от этого документа, и проверьте процитированный фрагмент источника. Если ingress не работает, в руководстве по устранению ошибки 502 описаны проблемы с портом и listener. Если AnythingLLM получает запрос, но storage mount отсутствует или embedding model изменилась после индексации, теперь evidence указывает не на proxy, а на другой компонент.

Отработайте сценарии отказа AnythingLLM

Постройте dashboards на основе parsing документов, embedding throughput, размера vector store и context, отправляемого выбранной model. График CPU без контекста этой workload не объяснит, почему AnythingLLM работает медленно. Добавьте synthetic или scheduled check, который загружает документ, дожидается создания embedding, задаёт вопрос, ответ на который зависит от этого документа, и проверяет процитированный фрагмент источника, используя безвредные тестовые данные.

Перед upgrade учтите application-specific hazard: изменение embedding model может потребовать re-indexing, а releases приложения — выполнить migration workspace и vector metadata. Восстановите свежий backup в isolated deployment, выполните migrations там и сравните поведение. Если storage mount отсутствует или embedding model изменилась после индексации, сначала проверьте соответствующую boundary — public origin, storage или dependency, — и только потом изменяйте несвязанные settings.

Что Dockup должен автоматизировать для AnythingLLM

Для AnythingLLM Dockup может создать route и TLS certificate, сохранить mounts, передать secrets и разместить embedding provider, LLM provider и достаточный storage для документов в private networking, развернув их в Dockup или на подключённых servers.

Release gate по-прежнему определяется конкретной transaction в AnythingLLM: загрузить документ, дождаться создания embedding, задать вопрос, ответ на который зависит от этого документа, и проверить процитированный фрагмент источника. Также проверьте restore condition: documents, embeddings, workspace membership и provider settings должны восстанавливаться вместе и позволять получить ответ на тот же вопрос, подтверждённый evidence. Эти две проверки показывают, работает ли deployment и можно ли его восстановить.

Часто задаваемые вопросы

Что нужно AnythingLLM для production deployment?

Направьте контейнер AnythingLLM на порту 3001 через один HTTPS origin. Сетевые зависимости включают embedding provider, LLM provider и достаточный storage для документов. Не объявляйте AnythingLLM готовым, пока не сможете загрузить документ, дождаться создания embedding, задать вопрос, ответ на который зависит от этого документа, и проверить процитированный фрагмент источника.

Какие данные AnythingLLM нужно включать в backup?

Сохраняйте /app/server/storage и включайте documents, vector indexes, workspaces и application settings в один recovery manifest. Clean restore AnythingLLM считается успешным только тогда, когда documents, embeddings, workspace membership и provider settings восстанавливаются вместе и позволяют получить ответ на тот же вопрос, подтверждённый evidence.

Требуется ли AnythingLLM HTTPS за reverse proxy?

Используйте HTTPS для public origin AnythingLLM, а порт 3001 оставляйте во внутреннем route. Корректно применяйте setting AnythingLLM: используйте внешний HTTPS origin для доступа из browser и API. Для AnythingLLM HTTPS защищает credentials и user content при передаче и обеспечивает согласованное поведение client, зависящее от origin.

Как тестировать upgrade AnythingLLM?

Восстановите текущее state AnythingLLM в isolated deployment, примените candidate version и повторите acceptance transaction. Уделите этому особое внимание: изменение embedding model может потребовать re-indexing, а releases приложения — выполнить migration workspace и vector metadata. Сохраняйте предыдущий image AnythingLLM, пока не будут понятны границы data migration и rollback.