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 whileneo4jis 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 on0.0.0.0:5432and0.0.0.0:6543. With thesupabaseprofile the pooler warning is expected on every install (Supabase's upstream compose publishes it), and withdifyso are nginx 8080/9443 and the plugin daemon's 5003: restrict them at your cloud provider's firewall, asdocs/security.mddescribes, which now also covers the Dify ports. The Supabase API gateway keeps its own check (issue #146).
Fixed
- Supabase -
make updatefailed withBind for 0.0.0.0:8000 failed: port is already allocatedon the first update after Supabase replaced its Kong gateway with Envoy: the oldsupabase-kongcontainer was no longer in the pulled compose file, sodownleft it running on port 8000. Install,make updateandmake restartnow remove it before Supabase starts; Envoy keeps thekongnetwork alias, so Caddy is unaffected (issue #142). - Supabase - Every
make updateand install handed the whole project directory to the host user, includingsupabase/docker/volumes/db/data, which must belong to the container'spostgresuser: auth, REST and Realtime then failed withcould not open file "global/pg_filenode.map": Permission deniedwhilesupabase-dbstill reported healthy.08_fix_permissions.shnow 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 theirdocker/volumes; the git-tracked files next to them, such as Supabase edge functions, still go to the user. Affected installs recover on the nextmake update: recreatingsupabase-dbgives its files back topostgres, and 08 no longer takes them away afterwards. Ifsupabase-dbkeeps running with files it does not own, 08 restores them to the container'spostgresuser, and reports an error if it cannot (issue #143). - Supabase -
IMGPROXY_ENABLE_WEBP_DETECTIONin.env.exampleis renamed toIMGPROXY_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 onmake update(issue #145). - RAGFlow - Broken since
infiniflow/ragflow:latestmoved tov1.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 tov0.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 themake updateto 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, thenmake restart(issue #144). - Open WebUI -
WEBUI_SECRET_KEYchanged on everymake updateandmake 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 withStored MFA secrets cannot be decrypted. The key is now generated into.envand passed to the container. Themake updatethat 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 restartrefuses to run withopen-webuienabled, because itsdownwould 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. WithOPEN_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