n8n

n8n in queue mode on Docker, with workers, task runners, its own PostgreSQL and Redis, HTTPS and updates with backup.

  • Category: Servers and infrastructure
  • Status: Available
  • Requirements: An active VPS with at least 4 GB of real free RAM (not the plan's nominal RAM); Docker possible on the VPS (new VPS already have the permissions); No npm-installed n8n on that VPS
  • MCP tools (Read only): ver_preflight_app, ver_app, ver_operacion_app
  • MCP tools (Write or modify): instalar_app, controlar_app, reintentar_operacion_app
  • MCP tools (Destructive): desinstalar_app

Markdown

What can you do with it?

ArduMaker installs n8n as a production-ready Docker stack: a main process, workers in queue mode, a task runner per process, its own PostgreSQL and its own Redis. It is one installation per VPS.

  • Install with no questions: internal credentials are generated automatically.
  • Publish the editor with HTTPS; the webhook and editor URL are configured automatically.
  • Restart, update the version (backing up the database first) and scale workers.
  • Edit environment variables from the dashboard, with the critical ones protected.
  • Uninstall keeping the data, or deleting it with confirmation.

When should you use it?

  • Your own automations and webhooks, without the execution limits of a hosted service.
  • Flows with Code nodes that need real isolation (external task runners).
  • High execution volume that should be spread across workers.

How does it work in ArduMaker?

  1. Validate: active VPS, n8n system feature, Docker possible and real free RAM (MemAvailable) of at least 4 GB. If there is already an n8n (Docker or npm), it is adopted as is, without reinstalling or migrating.
  2. Prepare credentials (or reuse those in the .env of a previous attempt: an initialized PostgreSQL does not accept another password).
  3. Generate the Compose from code according to free RAM, pull the images as a long step and start the stack.
  4. Publish the editor (port 5678) with HTTPS and write WEBHOOK_URL and N8N_EDITOR_BASE_URL with the published address, and N8N_PROXY_HOPS=1, into .env.
  5. Verify: running only with the main process active, /healthz and /healthz/readiness returning 200 and every worker active.

If a worker dies halfway, whoever resumes the operation waits for the same installation: it never launches a second stack.

What actually changes?

File or resourceContent
/opt/n8n/docker-compose.ymlCompose generated by the platform (644 root)
/opt/n8n/.envVariables for every container (600 root)
/opt/n8n/stack.jsonVersion, topology, limits and volumes (600 root)
/opt/n8n/backups/Daily database dumps with 7-day retention (n8n-db-backup timer)
n8n-stack.serviceUnit that controls the stack with docker compose
Volumesn8n_data, n8n_pg_data, n8n_redis_data

RAM, workers and topology

The number of workers comes from real free RAM, not from the plan. On top of that, 896 MB are reserved for PostgreSQL and Redis and 512 MB of headroom before granting extra workers; the maximum is 8.

Free RAMWorkersMain runner
Under 4 GBRejected—
4 – 5,9 GB2No
6 – 7,9 GB3No
8 GB or more4 or more (up to 8)Yes

Each container has its memory limit and n8n gets --max-old-space-size at around 75% of that limit, so the garbage collector works before the system kills the process. Logs rotate (10 MB, 3 files) and execution history is pruned after 14 days.

Environment variables

  • Protected (not editable): N8N_ENCRYPTION_KEY, N8N_RUNNERS_AUTH_TOKEN, DB_POSTGRESDB_*, POSTGRES_*, REDIS_PASSWORD, QUEUE_BULL_REDIS_*.
  • Managed by the platform: N8N_WORKERS (scaling), WEBHOOK_URL and N8N_EDITOR_BASE_URL (domain), EXECUTIONS_MODE, N8N_RUNNERS_MODE, N8N_PORT.
  • Secret (shown masked): the protected ones and any ending in PASSWORD, SECRET, TOKEN, KEY or _PWD. Revealing them requires admin and is logged.
  • Values cannot contain quotes, #, $, backtick, backslash or line breaks: such a value does not fail, it means something else.

Updating, scaling and backups

  • Updating pulls the n8n and runner images (same tag), dumps the database, regenerates the Compose and starts it; if verification fails, it goes back to the previous version.
  • Adding workers interrupts nothing; removing them stops the highest-index ones first with a grace period to finish running executions.
  • The weekly VPS backup includes the volumes, but it is taken live; the daily dump in /opt/n8n/backups/ is the consistent database copy.

Diagram

  1. Internet: HTTPS on the published address
  2. VPS nginx: routes to 127.0.0.1:5678
  3. `n8n-main`: editor and webhooks; queues executions
  4. `n8n-redis`: execution queue
  5. `n8n-worker-N`: executes, each with its own runner
  6. `n8n-postgres`: database of workflows, credentials and executions
n8n stack on the VPS — The stack's PostgreSQL and Redis are never published: they live on the Compose project's internal network.

Expected result

The n8n app shows in Apps as a single app (its containers are components) with the editor's HTTPS URL once the link is verified.

docker compose -p n8n ps
docker logs n8n-main --tail 50

Errors and troubleshooting

Error or symptomCause and what to do
recursos_insuficientesLess than 4 GB of real free RAM. Free memory or upgrade the plan.
requiere_reinicio_vpsOlder VPS without Docker permissions: it must be restarted.
n8n_npm_instaladoThere is an npm n8n: Docker is not installed on top.
app_ya_existe / limite_de_tipoThere is already an n8n on that VPS (or an installation in progress).
n8n_instalandose / n8n_instalacion_fallidaStill installing or finished with an error. Retryable: relaunches with the .env credentials.
n8n_webhook_no_configuradoIt was published but .env did not take the URL. Retryable, without reinstalling.
Executions with a Code node queued foreverA runner did not find its worker or has a different image version.
A variable was changed and nothing happenedcompose restart does not reread .env: restart recreating the containers.

MCP access

n8n is installed and operated over MCP with the Apps tools (/mcp/docs, /mcp/servicios).

  • Read: ver_preflight_app (with app_type: n8n it says whether RAM and Docker fit), ver_app, ver_operacion_app.
  • Modify: instalar_app with app_type: n8n and optional config workers (1–8), concurrency (1–50) and version; controlar_app with restart or update; reintentar_operacion_app.
  • Destructive: desinstalar_app (admins only). Keeps volumes unless delete_data=true with confirm_delete_data=true, which deletes the n8n database.

Any other field in config (users, passwords) answers config_invalida. Environment variables and scaling are handled from the dashboard; actions only exist for the Docker runtime (an npm n8n answers runtime_no_soportado).

Related features