So n8n 3.0 is in beta and self-hosted is going Docker-only, no more npm/npx installs. Mine has been npx n8n in a tmux session for, uh, a long time. Time to move it.

My plan, tell me what I'm missing:

  1. Update to the latest 2.x first and run Settings > Migration Report. It flags workflows using nodes that 3.0 removes (Function, Cron, Item Lists, some old ones).
  2. Copy ~/.n8n before touching anything. The encryption key is in there. If the container generates a fresh key, every saved credential turns into garbage. Either mount the old folder or set N8N_ENCRYPTION_KEY to the old value.
  3. Full backup, because 2.x to 3.x is one way. No downgrade.
  4. Bring up the container on a copy first, check a couple of webhooks still fire (WEBHOOK_URL!), then switch over.

Breaking changes list: https://docs.n8n.io/changelog/v30-breaking-changes

Anyone already done this? Did step 2 go as smoothly as it sounds?

 

Been running Open WebUI on a little 2 GB / 1 vCPU VPS, API models only, no local LLM. Sharing because the RAM story wasn't what I expected.

Just chatting? Totally fine. It mostly sits there forwarding requests and streaming replies back.

The thing that bit me was document upload. The default image does embeddings locally (a small MiniLM model), so the moment someone drops a stack of PDFs into a knowledge base the CPU pins and memory climbs. On 2 GB that was where I started seeing the container get OOM-killed.

What helped:

  • pointing embeddings at an API instead of computing them locally
  • just going to 4 GB once uploads became a daily thing
  • setting WEBUI_SECRET_KEY to a fixed value. before that, every redeploy logged everybody out and I thought I'd broken something

Still on SQLite. Has anyone squeezed Postgres onto the same tiny box, or is that asking for trouble?