Currently there are some very rough edges around how n8n works with multiple stake holders:
- the import/export command use an API, but you are required to set up a local instance identically configured that can access the production database, in order to import the new workflows
- the export command puts all the code / contents of the nodes as a long JSON string; so for larged bits of JS/logic, it’s a fools’ errand to try to upgrade / change the node specification
- when using docker-desktop and local volume mounts, the sqlite database becomes corrupt when changing branches
- also, it “loses the file descriptor” such that updates inside the container aren’t reflected outside the container
- this wouldn’t be a big problem if I could just export the contents from AN API, but you require me to use the actual database file in this case (see points above)
- there’s no leader election in n8n, so you corrupt the state of whether certain workflows are enabled when there are overlapping n8n instances going towards the same database (because for some reason the “active” flag is changed when n8n is stopped)
- n8n is configured to use a $HOME folder with no method for overriding this — for config
- n8n always takes the encryption password from this home folder, instead of possibly just being stateless and reading an env var (12 factor app style)
If you want some guidance on how to make n8n nice to deploy, look no further than Hasura.