Agent skill · Audited from source
n8n-self-hosting
skill · czlonkowski/n8n-skillsMIT licenceAudited 28 Oct 2026 · source e25b729cc88a
Is it safe? With care — CAUTION, grade B (89/100). We read this skill's source at commit e25b729cc88a and found no filesystem, network or shell access and no hard-coded secrets. The audit raised 6 findings, 0 critical or high. What it does: Deploy a production self-hosted n8n end-to-end to a fresh Linux VM over SSH, using Docker Compose behind a Caddy reverse proxy with automatic HTTPS. Use whenever the user wants to self-host, install, provision, or…
Cite
Cite this page
ModelsAtlas. “n8n-self-hosting (czlonkowski/n8n-skills)”. Retrieved 28 Oct 2026. https://modelsatlas.com/skills/czlonkowski/n8n-self-hosting
Trust audit
Audit 0.4.1 · source read 28 Oct 2026
CAUTION means the audit found things worth knowing before you trust this skill. Grade B is shared by 13,985 of 14,816 audited skills.
What the source does
- FilesystemNone observedNo reads or writes in the source
- NetworkNone observedNo outbound calls in the source
- ShellNone observedNo commands run in the source
- DependenciesPinnedNothing floats
- SecretsNone foundNo keys in source
Five audit layers
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | PASS | 2 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | PASS | 0 |
L2 Instructions | Prompt injection, authority framing, hidden directives | WARN | 4 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: no behavioural pass.
Findings (6)
MEDIUMPrompt injectionreview.data_transfer · SKILL.md
Don't echo it into long-lived logs or chat history beyond what's needed to hand it over.
- Why
- It directs the agent to disclose the server's encryption secret through chat, moving it off the target machine.
- Fix
- rewrite it so the instruction says plainly what it does, and asks the user before it acts
LOWPrompt injectionprompt.transfer_instruction · SECURITY.md:78
| Owner account + 2FA | hand-off | Whoever completes the owner-setup form first claims the instance — do it before sharing the URL. Enable 2FA (per-user 2FA is free; org-wide *enforcement* via `N8N_MF
- Why
- an instruction to move sensitive data to an outside destination
- Fix
- remove; a skill never needs the user's secrets off the machine
INFOPrompt injectionprompt.credential_read · CREDENTIAL_OVERWRITES.md:152
history. Read it from `.env` or a file, or type it into a heredoc.
- Why
- asks the agent to read credentials
- Fix
- —
INFOPrompt injectionprompt.credential_read · SECURITY.md:67
| `N8N_BLOCK_ENV_ACCESS_IN_NODE=true` | ✓ | Code-node/expressions can't read `process.env` (your container secrets). Relax only if a workflow genuinely needs an env var. |
- Why
- asks the agent to read credentials
- Fix
- —
Audit 0.4.1 · source sha e25b729cc88a · 28 Oct 2026Report an issue or request a re-scan
Provenance
Who published it, and what the verdict is pinned to
- Publisherczlonkowski GitHub userOwner of the repository this skill is read from
- Source folderczlonkowski/n8n-skills/skills/n8n-self-hostingThe exact folder we audited
- LicenceMITAs the repository states it
- Commit pinned for this verdicte25b729cc88aA new audit runs when the source changes
- Repository statusNot archivedLast push 4 days ago
- Sandboxed runNot runSkills are read, not executed; layer L4 is skipped
What it tells the agent
Full source on GitHub ↗Its description: Deploy a production self-hosted n8n end-to-end to a fresh Linux VM over SSH, using Docker Compose behind a Caddy reverse proxy with automatic HTTPS. Use whenever the user wants to self-host, install, provision, or…
---
name: n8n-self-hosting
description: Deploy a production self-hosted n8n end-to-end to a fresh Linux VM over SSH, using Docker Compose behind a Caddy reverse proxy with automatic HTTPS. Use whenever the user wants to self-host, install, provision, or deploy n8n on their own server/VPS (Hetzner, DigitalOcean, AWS EC2, bare metal) — single/regular mode or queue mode with workers — or to update, back up, restore, or harden such an instance, or make Python Code nodes run on it (task runners). For SELF-HOSTED n8n (Docker), not n8n Cloud and not building workflows. The skill makes the agent ask single-vs-queue first, collect domain/SSH/timezone inputs, generate fresh secrets on the box, and bring the stack up with TLS. Trigger on "deploy n8n", "self-host n8n", "n8n docker compose", "n8n queue mode / workers", "n8n reverse proxy / SSL", "back up / update my n8n", "Python runner unavailable" / "n8nio/runners sidecar", or "we don't want to give every user the OAuth client secret" / "enable Sign in with Google" (credential overwrites).
---
# Deploying self-hosted n8n
This skill takes a **fresh Linux VM** (Ubuntu/Debian, root or sudo SSH) to a **running,
HTTPS, production n8n** via Docker Compose behind **Caddy** (automatic Let's Encrypt TLS).
It is for **self-hosted n8n on Docker** — not n8n Cloud, and not for building workflows
(that's the rest of this pack).
Two deployment modes. The architectures differ, so **pick the mode before doing anything**.
You drive this end-to-end over SSH: preflight → install Docker → lay down the project →
generate secrets → launch → verify TLS → hand off. The template files live in `assets/`;
the per-mode and security depth live in the reference files named below.
## Rule 0 — choose the mode (ask the user)
Do not guess. Ask, then commit to one:
| | **Single / regular** | **Queue** |
|---|---|---|
| Processes | one n8n | main + N workers |
| Extra services | none (SQLite) | Redis (queue) + Postgres (DB) |
| Executes workflows | in the main process | on workers, in parallel |
| Good for | 1 user, light/moderate load, simplest ops | high volume, heavy/long executions, horizontal scale |
| Compose | `assets/docker-compose.single.yml` | `assets/docker-compose.queue.yml` |
| Deep dive | **`SINGLE_MODE.md`** | **`QUEUE_MODE.md`** |
If unsure, start **single** — it's the simplest correct thing and covers most needs. Moving
to queue later means swapping the compose file and migrating SQLite→Postgres, so if the user
already expects real volume, start **queue**.
## Rule 1 — secret hygiene (non-negotiable)
A misstep here leaks client credentials. Be diligent:
1. **Generate every secret fresh, on the target box.** Never copy an encryption key, DB
password, or `.env` from another n8n instance into this one. See `SECURITY.md` for the
`openssl` commands.
2. **Secrets live only in `.env`** (mode 600), referenced by the compose as `${VAR}`. Never
inline a secret into `docker-compose.yml`, the Caddyfile, or anything you commit.
3. **The `N8N_ENCRYPTION_KEY` is sacred.** It encrypts every stored credential. If it's lost
or changes, all saved credentials become undecryptable. Set it explicitly, and tell the
user to back it up **off the box**. Don't echo it into long-lived logs or chat history
beyond what's needed to hand it over.
4. **Never expose internal services.** Only Caddy (80/443) is public. n8n (5678), Postgres
(5432), Redis (6379) stay on the private Docker network — the templates already omit their
host port mappings. Don't add them.
5. **`.env` and Caddy's `caddy_data` volume (the issued certs + ACME account key) are not
artifacts to share.** If you're working inside a git repo, confirm `.env` is git-ignored
before any commit.
## Inputs to collect up front
- **SSH target** — `user@host` and how you authenticate (key path or the user confirms the agent already has access). Root or a sudo user.
- **Domain** — the full hostname n8n will live at, e.g. `n8n.example.com` (→ `SUBDOMAIN=n8n`, `DOMAIN_NAME=example.com`). The user must control its DNS.
- **TLS email** — for Let's Encrypt (`SSL_EMAIL`).
- **Timezone** — IANA name for Schedule/Cron nodes (e.g. `Europe/Warsaw`), else `Etc/UTC`.
- **Mode** — single or queue (Rule 0). Queue → confirm the box has enough RAM (rough floor ~4 GB; each worker wants ~1–2 GB).
- **Optional modules** — some features (currently **Agents**) are backend modules that stay off
unless listed in `N8N_ENABLED_MODULES`. Ask only if the user brings one up; if they do, read
the modules section of `QUEUE_MODE.md` before enabling it, because in queue mode it has to
reach the workers as well.
- **Python Code nodes / who edits workflows** — ask *"Will workflows use Python Code nodes, or
will anyone besides you edit workflows?"* A yes to either means task runners in **external
mode**: a `n8nio/runners` sidecar (one per worker in queue mode). The stock `n8nio/n8n` image has
no Python 3, so in the default internal mode every Python Code node fails with `Python runner
unavailable: Python 3 is missing from this system`. Read `TASK_RUNNERS.md` before step 3.
## The deploy flow
Work through these in order. `SINGLE_MODE.md` / `QUEUE_MODE.md` give the mode-specific command
detail; `SECURITY.md` covers secret generation and hardening; `DAY2.md` covers update/backup/restore.
### 1. Preflight (the cheapest failure is the one you catch here)
- SSH in; confirm the OS is Debian/Ubuntu-like (`. /etc/os-release`).
- **DNS must already point at the box.** Compare the box's public IP (`curl -s ifconfig.me`)
with `dig +short <fqdn>` (run it from the box AND ideally your laptop). If they don't match,
**stop** — Caddy's ACME challenge will fail. Have the user create the A record, wait for it
to propagate, then continue.
- Ports **80 and 443** must be reachable from the internet. Check the host firewall AND any
cloud security group / network firewall (Hetzner Cloud, AWS SG, etc.) — these are outside
the box and a Excerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.
Install
Pinned to the audited commit e25b729
git clone https://github.com/czlonkowski/n8n-skills git -C n8n-skills checkout e25b729cc88a
The author documents no install command, so this uses the repository directly. Our verdict covers commit e25b729cc88a only.
Works in
The author has not said which agents this skill supports, and we have not tested it in any.
Audit history
Every audit, every source change
- !CAUTION B 89 / 100
first audit · source
e25b729cc88a
README badge
For maintainers · shows the latest audit
[](https://modelsatlas.com/skills/czlonkowski/n8n-self-hosting/)
The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.
Similar skills
All automation skills →czlonkowski/n8n-skills
Build reusable, composable n8n sub-workflows. Use when extracting shared logic, building anything multi-step or reused across workflows, or any workflow over ~10 nodes — and whenever the user mentions sub-workflows,…
czlonkowski/n8n-skills
Interpret validation errors and guide fixing them. Use when encountering validation errors, validation warnings, false positives, operator structure issues, or need help understanding validation results. Also use when…
czlonkowski/n8n-skills
Operation-aware node configuration guidance. Use when configuring nodes, understanding property dependencies, determining required fields, choosing between get_node detail levels, or learning common configuration…
czlonkowski/n8n-skills
Use when an n8n-mcp account targets more than one n8n instance — i.e. the `n8n_instances` tool is available, the user mentions multiple n8n instances or environments (prod vs staging, several teams or clients), several…
czlonkowski/n8n-skills
Expert guide for using n8n-mcp MCP tools effectively. Use when searching for nodes, validating configurations, accessing templates, managing workflows, organizing workflows into folders, managing credentials, auditing…
czlonkowski/n8n-skills
Validate n8n expression syntax and fix common errors. Use when writing n8n expressions, using {{}} syntax, accessing $json/$node variables, troubleshooting expression errors, mapping data between nodes, or referencing…
Add this badge to your README
[](https://modelsatlas.com/skills/czlonkowski/n8n-self-hosting/)
<a href="https://modelsatlas.com/skills/czlonkowski/n8n-self-hosting/"><img src="https://modelsatlas.com/skills/czlonkowski/n8n-self-hosting/badge.svg" alt="ModelsAtlas: CAUTION B"></a>
Questions about n8n-self-hosting
What does the n8n-self-hosting skill do?
Is n8n-self-hosting safe to install?
What can n8n-self-hosting access on my machine?
How current is this page?
Sources
- github.com/czlonkowski/n8n-skills/tree/main/skills/n8n-self-host — the audited source at commit e25b729cc88a and every finding aboveObserved · 28 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What does the n8n-self-hosting skill do?
- Is n8n-self-hosting safe to install?
- What can n8n-self-hosting access on my machine?