mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2026-07-19 14:13:35 -04:00
Closed
opened 2026-02-22 18:22:16 -05:00 by yindo
·
28 comments
No Branch/Tag Specified
master
5846-bug-when-scrolling-up-scrolling-jumps
refactor-remove-workspace-pfp
5969-bug-stopgenerationbutton-disappears-on-the-first-prompt-that-initiates-an-agent-session
2235-bug-how-to-upload-a-folder-with-subfolders-with-files-to-anythingllm
5990-workspace-update-fails-with-unknown-argument-router_id-v1130v1150-intel-mac
opencomputer-examples
pg
feat/image-generation-translations
feat/image-generation
5924-bug-meeting-summary-fails-with-sincludes-is-not-a-function-when-default-llm-is-anthropic-claude
render
feat/uniform-modal-component
5883-bug-unescaped-content-in-json-strings-being-passed-to-document-generator-tools
5901-bug-api-update-embeddings-fails-prisma-argument-filename-is-missing-on-workspace_documentscreate-desktop-windows-v1141
hybrid-search
1981-translations
5752-bug-prompts-to-local-jan-endpoint-unresponsive
feat-disable-native-tool-calling-env-var
5676-bug-non-ollama-agent-providers-do-not-parse-and-present-reasoning-content
feat/markdown-web-scraping
5717-bug-apiv1documentupload-silently-drops-metadata-field-in-desktop-1130-arg-count-mismatch-nested-payload-key
fix/aibitat-context-overflow
5711-bug-erratic-deepseek-v4-flash-the-agent-model-failed-to-respond-400-the-reasoning_content
5631-feat-custom-api-request-timeouts-for-ai-providers
feat-reasoning-control
feat-agent-clarifying-questions-translations
5583-bug-lm-studio-provider-does-not-present-reasoning-output
5313-normalize-translations
feat/memory-translations
5305-lemonade-embedding-engine-swallows-errors-falsely-reports-documents-as-embedded
5060-bug-agent-interactions-agent-are-not-persisted-to-thread-history-via-api
pptx-subagent
feat-render-images-from-mcp-tool-results
stt-provider-expansion-openai-api-compatible
feat-file-search-agent-tool
feat-native-embedder-job-queue
5189-normalize-translations
feat-file-search-agent-tool-translations
i18n-eslint
5140-auto-migration
5112-bug-openrouter-failed-message-bug
3506-feat-parameters-for-openrouter-models
4992-feat-preserve-scroll-position
4973-bug-markdown-numbered-list-display-in-reasoning-pane
desktop
4938-bug-pending-chat-rerendering-ui-bug
quickstart-env
node-llama-cpp-in-container-cuda
node-llama-cpp-in-container
ollama-in-container
4817-feat-set-cooldown-per-mcp-server
4845-keyboard-shortcuts-to-navigate-in-chat
4844-feat-reorder-threads-by-latest-interaction
standardize-username-constraints-normalize-translations
4792-feat-refactor-workspacepfp-image
1382-embed-ip-improvements
1382-bug-embed-api-improvements
refactor-eslint-frontend
4687-feat-refactor-vector-db-providers
4615-feat-disable-apidocs-with-environment-variable
4559-feat-agent-web-search-enable-ordering-of-results
4599-bug-ollama-race-condition-bug
4572-bug-lmstudio-provided-llm-stopped-working-with-anything-llm-after-upgrading-to-190
4508-agent-youtube-transcript-analysis
4497-feat-workspace-names
frontend-eslint
ollama-lmstudio-auto-context-window
4431-validate-vector-database-connectioN
2019-slash-command-keyboard-selection
microsoft-foundry-provider
4431-validate-vector-database-connection
4325-sys-prompt-var-improvements
3209-feat-apiv1workspacestream-chat-sources-citations
4210-bug-voice-to-text-overwrite
4136-feat-jan-as-a-backend-server-option
4172-feat-openai-o3-support
1.8.3-rerelease
web-push-notifications-service
tasks
3955-feat-jinaai-embedder-provider-support
3921-feat-agent-skills-uiux-improvements
3901-bug-validfunccall-checks-optional-arguments
keyboard-dev
1787-custom-roles-and-permissions
add-jira-slack-data-connector
office-extension-wip
lightmode-dropdown-color-update
3586-bug-agent-flow-function-description-provided-by-user-is-not-seen-in-the-llm-query
3463-bug-agent-continues-to-run-if-request-failed-even-after-exit
3439-feat-call-variables-within-the-flow-api-block-url-field
3282-manager-view-models-workspace
3280-token-counting-server-side-truncation-improvements
3147-bug-embedded-chat-widget---not-considering-query-mode-option-always-working-in-chat-mode
2995-feat-disable-temperature-setting-for-deepseek-r1-deepseek-reasoner-model
2827-feat-perplexity-citations
2866-feat-finally-a-gemini-models-endpoint
2647-feat-hpp-header-for-a-c++-code-file-mime-addition
lancedb-revert
1656-feat-implement-tooltip-ui-designs
2011-feat-bump-perplexity-models
1873-feat-auto-add-and-watch-folder-for-document-uploads
1297-feat-gemini-agent-support
1759-bug-ui-bug-fixes
1686-feat-implement-winston-for-logging
1536-bug-toggling-on-users-can-delete-workspaces-does-not-take-effect
agent-ui-mobile-styles
1522-feat-chromadb-support
1595-bug-unable-to-get-live-web-search-and-browsing-agent-working-using-google-custom-search-engine-error-getaddrinfo-enotfound-http-errno-3008
1582-bug-lm-studio-does-not-allow-for-different-model-selection
1312-bug-usernames-should-not-be-case-sensitive-when-logging-in
1029-feat-hf-serverless-inference-api
1086-feat-implement-normalized-input-fields
knowledge-graph-support
644-bug-uploaded-file-name-does-not-match-the-displayed-file-name-after-the-upload
v1.15.0
v1.14.2
v1.14.1
v1.14.0
v1.13.0
v1.12.1
v1.12.0
v1.11.2
v1.11.1
v1.11.0
v1.10.0
v1.9.1
v1.9.0
v1.8.5
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.8
v1.7.6
v1.7.5
v1.7.4
v1.4.0
v1.3.0
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.1.1
v1.1.0
v1.0.0
Labels
Clear labels
Desktop
Docker
Integration Request
Integration Request
OS: Linux
OS: Mobile
OS: Windows
UI/UX
blocked
bug
bug
core-team-only
documentation
duplicate
embed-widget
enhancement
feature request
github_actions
good first issue
investigating
needs info / can't replicate
possible bug
pull-request
question
stage: specifications
wontfix
Mirrored from GitHub Pull Request
No Label
documentation
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Mintplex-Labs/anything-llm#934
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @atljoseph on GitHub (May 20, 2024).
Original GitHub issue: https://github.com/Mintplex-Labs/anything-llm/issues/1463
Description
Thanks for the docs about deploying to various hosting providers. Can you add a little pixie dust outlining some k8s deployment specs? Docker docs help for sure, but would be cool to have a template.
@timothycarambat commented on GitHub (May 20, 2024):
I'd have to delegate this to someone in the community who has more experience with doing this. We can add it to the community templates
@atljoseph commented on GitHub (May 20, 2024):
I'll post something here later today... Figured it out
@atljoseph commented on GitHub (May 21, 2024):
Expect pr today actually. Lost some time to aws ebs drivers.
@atljoseph commented on GitHub (May 21, 2024):
We were able to make it work mostly, but something is driving me absolutely crazy.
If there really is no example in the repo already, then that likely means this hasn't been done yet.
In that case, I'll list the manifest that we have aas well as the symptoms.
Hoping for a quick resolution, as this is a value-add all-around.
============
Symptoms: (Apologies if this is confusing. I am confused LOL)
Have dialed everything in, but getting conflicting outcomes when changing these settings:
In general, when the Persistent Volume is mounted to same dir as STORAGE_DIR (/app/server/storage):
When STORAGE_DIR is not set:
When NODE_ENV=production, no matter the value of STORAGE_DIR:
When NODE_ENV=development & STORAGE_DIR=/data:
comkeydirectory.Lastly, I cannot get this thing to forget the admin setup was performed, even after clearing all data from the persistent volume and doing rollout restart.
This is super frustrating LOL, and that is a lot of info.
But, it seems like some of the build code and structural aspects of the app might not play 100% nicely with k8s.
Anyways, I've spent 2 days on this, and I'm out of energy. Would LOVE to be able to use it.
Help @timothycarambat
@timothycarambat commented on GitHub (May 21, 2024):
@atljoseph How do you use these templates? I don't use Kubernetes so I'm unsure how to even debug. For what it is worth, it may make sense to use modify
to
image: "mintplexlabs/anythingllm:render". This image is special in that it pins all storage to have a mounted EBS attached to/storage. This is how we do persistent storage on Render and Railway because of the STORAGE_DIR flexibility that needs to exist for the Docker image, but cannot be so easily configured in ephemeral storage ecosystems (like K8) where containers spin up/down and get destroyed/created on the fly.@atljoseph commented on GitHub (May 21, 2024):
Thanks @timothycarambat I'll try that.
Curious, how do i reset everything, including the Admin user?
Doesn't seem to ever go back to the onboarding.
It would revert back to onboarding early on, but can't get it to do that anymore.
So, if you could tell me more about where all that is stored, it might help track down the issue.
@atljoseph commented on GitHub (May 21, 2024):
It would be nice to be able to set Admin user through ENV Vars, or at least have the option to.
@timothycarambat commented on GitHub (May 21, 2024):
Remove the
LLM_PROVIDER,EMBEDDING_ENGINEandVECTOR_DBkeys in the storage.env. You can also reset the user db byyarn prisma:resetin the root or in/app/serverwhen in docker container.You can also just
rm -rf /host/storage/anythingllm.db && touch /host/storage/anythingllm.dbto delete and recreate an empty db@atljoseph commented on GitHub (May 21, 2024):
OK, this worked grrrrreat!!!!
The
renderimage tag worked as expected.Final product:
@timothycarambat This is what is known as a kubernetes "manifest".
We don't use Kustomize, so this would have to be adapted for anyone who uses that (I don't understand it).
With Helm, we use the "render" function to apply variables that are loaded per environment.
Our Helm repo is too large just to extract a full working filesystem example here, sorry.
But, essentially... Variables are placed in handlebars, and then replaced at render time.
someK8sConfigValue: "{{ willBeReplacedAtRender }}"So, anyone can fill in their values, and apply this directly to their cluster.
I did not include an ingress, because different folks use different strokes, depending on their needs.
Examples:
@atljoseph commented on GitHub (May 21, 2024):
Hoping this helps someone else !
@atljoseph commented on GitHub (May 21, 2024):
Getting an error and empty scrren when visiting LLM Preferences from Settings.
@atljoseph commented on GitHub (May 21, 2024):
All other screens function. Not ure why this one wouldn't. Maybe because it is the one I need LOL.
@atljoseph commented on GitHub (May 21, 2024):
I think this needs a way for Admin to reset everything from the frontend.
@atljoseph commented on GitHub (May 21, 2024):
Did that... All the chat workspaces were cleared out...
Does that mean the users are not stored in anythingllm.db?
None of these are set currently. At deploy/config time, we load ENV Vars from key-value store, and then apply the changes to kubernetes. We don't have an ENV file. Kubernetes supplies these, and if they are modified, they do not persist across restarts.
Can you tell me more about that, please? Where is this prisma DB stored? Looking to have a solution that does not involve exec-ing to an ephemeral container.
@timothycarambat commented on GitHub (May 21, 2024):
@atljoseph that ENV error is because in
You have
Remove this key and you can onboard and that LLM preference bug wont appear. Onboarding set these vars
@atljoseph commented on GitHub (May 21, 2024):
Thank you sir. Will try that tomorrow!
On Tue, May 21, 2024 at 10:34 PM Timothy Carambat @.***>
wrote:
@atljoseph commented on GitHub (May 23, 2024):
Worked. Everything above in my last message with k8s manifest (minus VECTOR_DB) worked as expected, especially after removing that env var.
@reefland commented on GitHub (Jun 23, 2024):
@atljoseph - In your templates
readinessProbeandlivenessProbeare using port8888, and while the logs reportDocument processor app listening on port 8888I'm unable to get curl to respond to that port, I have to CTRL-C to stop.:I don't see how your probes could be successful. I instead use probes against port 3001:
And path doesn't matter. Seems to get same output no matter what you ask for.
In regards to Prometheus metrics, you have annotations for scrapes to port 9090 and setup that port for the service, but there is nothing within the Anything-LLM container listening to that port that I could find. If it doesn't exist that could be cleaned up.
I'd be curious to know why you needed to grant
allowPrivilegeEscalation: trueand grant SYS_ADMIN capabilities to the container:I find Anything-LLM runs OK, locked down a bit more at the container level:
Then at the Pod level you can do:
For others trying this. The
.envfile concept does not work well with Kubernetes. In Kubernetes this would be stored in a configMap and either mounted into the container's filesystem or the configMap values mapped to ENV variables. Being that some of the values are sensitive then these would be stored in a secret and mapped to ENV variables.Trying to mount the
.envfile from a configMap works whenNODE_ENV='production'is used, unfortunately Anything-llm tries to update its.envfile in development mode which breaks and crashes as configMap is read-only. Otherwise you have to do some silly trickery with an InitContainer where you could mount the.envfile to something like/tmpand then use commands manually copy it to/app/server/directory to make it writeable (but changes not persisted) before the anything-llm container is started.@timothycarambat commented on GitHub (Jun 23, 2024):
@reefland some commentary
This is normal in the docker container. The 8888 port is not supposed to be exposed however, it is your docker container so you can if you like. The default is to now because there is really no reason to have that be the case for the collector currently.
In production build/docker the root path of 3001 runs the frontend and 3001/api runs all backend endpoints for the app. Getting a response on any path is the HTML content being returns from an unmatched path while /api/ping indicates the backend server endpoints are running. In either case, if the backend was not online - not even the frontend would return a response.
This is in the official image for our Docker container. You cannot run a sandbox'd chromium browser without this capability on the base image we have unless you want to run the browser without sandboxing. Obviously, we want sandboxing - so that capability must exist. This is used for scraping websites so that SPA/JS apps can render first and we can scrape that.
As for the other comments, seems to be use case specific settings or tooling so I have nothing to add around that
@atljoseph commented on GitHub (Jun 23, 2024):
Yo. It’s working fine for me.
On Sun, Jun 23, 2024 at 6:05 PM Timothy Carambat @.***>
wrote:
@stguitar commented on GitHub (Jun 25, 2024):
would it make more sense for folks to have the committed/provided sample k8s manifests to work with a standard production build docker image?
/api/pingor/api/utils/metricson port3001I get that its somewhat a personal preference, but it seems that it would help to have the default k8s behavior align with the default docker setup.
Further, while these env settings might work, it would be more straight forward to just have an additional example resource of a
configmapto configure those. then that would be directly applicable as a starting point, and folks could swap to secrets instead of they so choose.I don't say all this without the offer of a PR, but I wanted to make sure before I do that, that it might be something that would be merged.
@timothycarambat commented on GitHub (Jun 26, 2024):
@stguitar if you can produce a manifest/template for K8s that:
then I will merge it in for the
cloud-deploymentsfolder, no question!If there are supplemental "gotchas" or key pieces a reasonable person may overlook and cannot be commented into the template I am happy to make a page and document those details on our documentation page as well.
@atljoseph commented on GitHub (Jun 26, 2024):
Sorry, I didn’t really intend to provide a perfect file others could exactly copy, but one which held the required ideas, and actually functions for a given cluster. Of course some things could be improved. Every cluster is different. And some use this or that tool to configure things. The key points def include container permissions, env vars, volume persistence, and … use of the “render” image. Many hours were spent here learning that lesson the hard way.
@timothycarambat commented on GitHub (Jun 26, 2024):
@atljoseph understandable and I was on the same page as you that this was your specific endeavor and use-case and it may not be portable to others.
The PR still stands though if someone does want to contribute a general-use K8 template
@stguitar commented on GitHub (Jun 26, 2024):
Good to know guys... thank you for the replies and the effort on all this previously. I definitely didn't mean to not be thankful for what you have provided in this PR. I was curious - can either of you expand on the "render" image and what it's configuration is? Maybe it opens ports that the normal image doesn't.
I guess how it felt to me, and im presuming the same for @reefland was that if these files don't actually work at all (which they won't unless the "render" container tag exposes ports that the standard port does not), it seems plausible to just have text docs that list out the suggested resources one might need to deploy, and point folks to the standard (or even random) examples of those resources from the web. You could further call out the "special sauce" (like the shell scripting, and the pod's security context stuff).
I totally agree that people have different deployment needs. Heck, I won't be using AWS. However, these manifests seem to suggest that the ports of 9090 and 8888 are exposed, which I don't think they are. They aren't in the standard image anyway. Maybe they are in the render image? It just felt like the interaction (best word I can think of) of the
podand thecontainercould be a bit tighter. Not so much the rest of the "environmental selection of the day" stuff, like env vars, secrets, config maps, ingresses (which i also don't happen to need). I did mention the latter stuff, but that wasn't as big of a gap for me personally as much as the pod/container cohesion.That being said, I could be totally wrong and the "render" container actually exposes those ports and all is well!
Depending on your thoughts and at this point from my point of view, I am still testing out my version of the k8s manifests and should that go well, I would be happy to share what I have in a PR for consideration.
@timothycarambat commented on GitHub (Jun 26, 2024):
The only public port that should be exposed in the docker container running AnythingLLM in any template is 3001.
Def dont expose 8888 and looking at the current K8 community template 9090 seems to be use-case specific so we can likely omit that as well
I dont specifically use K8's - which is why I lean on the community to publish or amend that template. I truthfully have no experience in that area.
@atljoseph commented on GitHub (Jun 26, 2024):
Don’t get confused by those healthchecks on port 8888. Those can simply be
removed if you don’t utilize them. 9090 is metrics. Again, if you don’t
have a need, then just remove them. These are all somewhat standard k8s
concepts.
I haven’t been able to put my finger on why the render image works for k8s
and the other doesn’t. Feels like it should just be possible to utilize the
functional result that either image provides, but with just one image
instead, and relying on env vars to affect configuration.
We also ended up going with a non-standard port in the end, like 3002,
since 3001 is a standard node port and conflicted with another service.
Works fine though.
On Wed, Jun 26, 2024 at 8:23 PM Timothy Carambat @.***>
wrote:
@reefland commented on GitHub (Jun 26, 2024):
Unless you include a Prometheus Exporter that listens on port 9090 as part of your image, then this port and respective annotations should be removed. It's not use-case specific if it simply does not exist.
[DOCS]: Basic k8s kubernetes manifest.to [GH-ISSUE #1463] [DOCS]: Basic k8s kubernetes manifest.