github kossakovsky/selfhost-ai v1.18.0

latest release: v1.18.1
4 hours ago

Added

  • make doctor - Warns about every running container that publishes a port on all interfaces (0.0.0.0 / [::]), apart from Caddy's 80/443 and Bolt 7687 while neo4j is active. Docker-published ports bypass ufw, so these are reachable from the internet on a public-IP host; before, only the Supabase API gateway was checked and doctor reported HEALTHY with the Supabase pooler on 0.0.0.0:5432 and 0.0.0.0:6543. With the supabase profile the pooler warning is expected on every install (Supabase's upstream compose publishes it), and with dify so are nginx 8080/9443 and the plugin daemon's 5003: restrict them at your cloud provider's firewall, as docs/security.md describes, which now also covers the Dify ports. The Supabase API gateway keeps its own check (issue #146).

Fixed

  • Supabase - make update failed with Bind for 0.0.0.0:8000 failed: port is already allocated on the first update after Supabase replaced its Kong gateway with Envoy: the old supabase-kong container was no longer in the pulled compose file, so down left it running on port 8000. Install, make update and make restart now remove it before Supabase starts; Envoy keeps the kong network alias, so Caddy is unaffected (issue #142).
  • Supabase - Every make update and install handed the whole project directory to the host user, including supabase/docker/volumes/db/data, which must belong to the container's postgres user: auth, REST and Realtime then failed with could not open file "global/pg_filenode.map": Permission denied while supabase-db still reported healthy. 08_fix_permissions.sh now skips the data directories Supabase (db/data, storage) and Dify (database, Redis, storage, plugin daemon, sandbox dependencies and the data of each optional vector store) keep under their docker/volumes; the git-tracked files next to them, such as Supabase edge functions, still go to the user. Affected installs recover on the next make update: recreating supabase-db gives its files back to postgres, and 08 no longer takes them away afterwards. If supabase-db keeps running with files it does not own, 08 restores them to the container's postgres user, and reports an error if it cannot (issue #143).
  • Supabase - IMGPROXY_ENABLE_WEBP_DETECTION in .env.example is renamed to IMGPROXY_AUTO_WEBP, the name Supabase's compose file now reads; every Supabase compose call warned that the variable was unset and imgproxy ran without WebP. An existing value is carried over to the new name on make update (issue #145).
  • RAGFlow - Broken since infiniflow/ragflow:latest moved to v1.0.0-rc2, which needs a kvrocks service the stack does not provide: the backend restarted in a loop, so the UI loaded but every API call failed with a 502. The image is now pinned to v0.27.2, the last stable release. If your RAGFlow already started on the release candidate, it migrated its MySQL schema to the 1.0 format and 0.27.2 may not start on it. Resetting RAGFlow deletes all its knowledge bases and uploaded documents; run it after the make update to 1.18.0, so the pinned image is already pulled: docker rm -f ragflow ragflow-mysql ragflow-elasticsearch ragflow-minio ragflow-redis && docker volume rm localai_ragflow_mysql_data localai_ragflow_elasticsearch_data localai_ragflow_minio_data localai_ragflow_redis_data, then make restart (issue #144).
  • Open WebUI - WEBUI_SECRET_KEY changed on every make update and make restart: Open WebUI generated it into the container layer, outside its volume, so every recreate signed all users out and, with MFA enabled (Open WebUI 0.12), the container stopped starting with Stored MFA secrets cannot be decrypted. The key is now generated into .env and passed to the container. The make update that installs 1.18.0 copies the key the existing container uses into .env, so sessions and enrolled MFA keep working; if the container exists but its key cannot be read, or Docker is not reachable, the update stops before anything is restarted and says how to set the key by hand. Until that update has run, make restart refuses to run with open-webui enabled, because its down would lose the key once more. If the key was already lost (the container is crash-looping after an earlier update), clear the stored MFA secrets; with MFA enforced the accounts enroll again on their next sign-in, otherwise they sign in without MFA and re-enable it themselves. With OPEN_WEBUI_DATABASE=postgres: docker exec postgres psql -U postgres -d openwebui -c "UPDATE auth SET mfa = NULL WHERE mfa IS NOT NULL;" && docker restart open-webui. With SQLite: docker stop open-webui && docker run --rm -v localai_open-webui:/data alpine sh -c "apk add -q sqlite && sqlite3 /data/webui.db 'UPDATE auth SET mfa = NULL WHERE mfa IS NOT NULL;'" && docker start open-webui (issue #147).

Upgrade

Run make update.

Open WebUI: the update copies the key the running open-webui container uses into .env (WEBUI_SECRET_KEY), so sessions and enrolled MFA keep working. Run make update before any make restart: until it has run, make restart refuses to start with open-webui enabled. If the update stops with "Could not read the Open WebUI secret key" or "Docker is not reachable", nothing has been restarted yet; fix the cause (or set WEBUI_SECRET_KEY in .env by hand) and run make update again. If Open WebUI already crash-loops with Stored MFA secrets cannot be decrypted after an earlier update, use the MFA reset from the Open WebUI entry above.

Supabase: a leftover supabase-kong container is removed automatically, and a Postgres data directory an earlier update handed to the host user recovers with this update.

RAGFlow: the image goes back to v0.27.2. If RAGFlow still does not start because the release candidate already migrated its database, use the reset from the RAGFlow entry above (it deletes RAGFlow's knowledge bases).

make doctor may now warn about published ports. With supabase (pooler 5432/6543) or dify (8080/9443/5003) these warnings are expected; restrict those ports at your cloud provider's firewall, see docs/security.md.

Full Changelog: v1.17.0...v1.18.0

Don't miss a new selfhost-ai release

NewReleases is sending notifications on new releases.