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
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?
- Validate: active VPS,
n8nsystem 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. - Prepare credentials (or reuse those in the
.envof a previous attempt: an initialized PostgreSQL does not accept another password). - Generate the Compose from code according to free RAM, pull the images as a long step and start the stack.
- Publish the editor (port 5678) with HTTPS and write
WEBHOOK_URLandN8N_EDITOR_BASE_URLwith the published address, andN8N_PROXY_HOPS=1, into.env. - Verify:
runningonly with the main process active,/healthzand/healthz/readinessreturning 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 resource | Content |
|---|---|
/opt/n8n/docker-compose.yml | Compose generated by the platform (644 root) |
/opt/n8n/.env | Variables for every container (600 root) |
/opt/n8n/stack.json | Version, topology, limits and volumes (600 root) |
/opt/n8n/backups/ | Daily database dumps with 7-day retention (n8n-db-backup timer) |
n8n-stack.service | Unit that controls the stack with docker compose |
| Volumes | n8n_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 RAM | Workers | Main runner |
|---|---|---|
| Under 4 GB | Rejected | — |
| 4 – 5,9 GB | 2 | No |
| 6 – 7,9 GB | 3 | No |
| 8 GB or more | 4 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_URLandN8N_EDITOR_BASE_URL(domain),EXECUTIONS_MODE,N8N_RUNNERS_MODE,N8N_PORT. - Secret (shown masked): the protected ones and any ending in
PASSWORD,SECRET,TOKEN,KEYor_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
- Internet: HTTPS on the published address
- VPS nginx: routes to
127.0.0.1:5678 - `n8n-main`: editor and webhooks; queues executions
- `n8n-redis`: execution queue
- `n8n-worker-N`: executes, each with its own runner
- `n8n-postgres`: database of workflows, credentials and executions
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 50Errors and troubleshooting
| Error or symptom | Cause and what to do |
|---|---|
recursos_insuficientes | Less than 4 GB of real free RAM. Free memory or upgrade the plan. |
requiere_reinicio_vps | Older VPS without Docker permissions: it must be restarted. |
n8n_npm_instalado | There is an npm n8n: Docker is not installed on top. |
app_ya_existe / limite_de_tipo | There is already an n8n on that VPS (or an installation in progress). |
n8n_instalandose / n8n_instalacion_fallida | Still installing or finished with an error. Retryable: relaunches with the .env credentials. |
n8n_webhook_no_configurado | It was published but .env did not take the URL. Retryable, without reinstalling. |
| Executions with a Code node queued forever | A runner did not find its worker or has a different image version. |
| A variable was changed and nothing happened | compose 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(withapp_type: n8nit says whether RAM and Docker fit),ver_app,ver_operacion_app. - Modify:
instalar_appwithapp_type: n8nand optionalconfigworkers(1–8),concurrency(1–50) andversion;controlar_appwithrestartorupdate;reintentar_operacion_app. - Destructive:
desinstalar_app(admins only). Keeps volumes unlessdelete_data=truewithconfirm_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).