How To Install n8n on Fedora 43

Workflow automation is no longer a luxury reserved for enterprise teams with SaaS budgets. If you run a Fedora 43 server and want full control over your automation stack, self-hosting n8n is one of the smartest moves you can make.
This guide walks you through how to install n8n on Fedora 43 from scratch using npm, covering Node.js installation, service configuration, firewall management with firewalld, and first-login setup. Unlike generic Linux tutorials that copy-paste Ubuntu instructions, this guide is written specifically for Fedora 43’s toolchain, including its dnf package manager, firewalld firewall, and SELinux enforcement.
By the end of this tutorial, you will have a fully functional, systemd-managed n8n instance running on your Fedora 43 machine and ready to automate anything you point it at.
What Is n8n and Why Should You Self-Host It?
n8n is an open-source, fair-code workflow automation platform that connects apps, APIs, and databases through a visual, node-based editor. Think of it as a self-hosted Zapier, but with no per-workflow pricing, no usage caps, and full ownership of your data.
When you self-host n8n, you run the entire platform on your own server. Your credentials, workflow logic, and execution history never touch a third-party cloud.
Why Fedora 43 specifically?
- Fedora 43 ships a modern kernel and uses
dnffor fast, dependency-aware package management - It uses
firewalldby default, notufw, which most generic n8n guides completely ignore - SELinux is enabled and enforcing by default, which this guide addresses directly rather than telling you to disable it
- Fedora’s rapid release cycle means you get up-to-date build toolchains that Node.js and npm depend on
n8n vs. cloud alternatives at a glance:
| Feature | n8n (Self-Hosted) | Zapier (Cloud) | Make (Cloud) |
|---|---|---|---|
| Cost | Free, open-source | Monthly subscription | Monthly subscription |
| Data control | Full — stays on your server | Cloud-stored | Cloud-stored |
| Integrations | 400+ | 5,000+ | 1,500+ |
| Custom code | Yes (JavaScript/TypeScript) | Limited | Moderate |
| Execution limits | None | Tier-based | Tier-based |
| Ideal for | Developers, sysadmins, DevOps | Non-technical users | SMBs |
Prerequisites
Before you start, confirm your environment meets these requirements:
- Operating system: Fedora 43 (bare metal, VM, or VPS) with a fresh or updated installation
- User access: A non-root user with
sudoprivileges — do not run n8n as root - Hardware minimums: 1 vCPU, 2 GB RAM, 10 GB free disk space
- Network: Active internet connection for downloading packages
- Terminal access: Local terminal or SSH session
- Skills: Basic Linux CLI familiarity (navigating directories, editing files, running systemctl)
- Installation method: This guide uses npm for a native system install, not Docker
Step 1: Update Your Fedora 43 System
Always start with a full system update. This ensures you have the latest versions of glibc, OpenSSL, and build tools that n8n’s dependencies rely on.
Run the update:
sudo dnf update -y
If the update includes a kernel upgrade, reboot before continuing:
sudo reboot
After rebooting, confirm you are running Fedora 43:
cat /etc/fedora-release
Expected output:
Fedora release 43 (Forty Three)
This single step prevents the majority of cryptic compilation errors that show up later in the npm install process when system libraries are outdated.
Step 2: Install Node.js and npm on Fedora 43
n8n is a Node.js application. It runs entirely on the Node.js runtime and installs through npm. You need Node.js 18.x or 20.x LTS for a stable n8n installation. Avoid odd-numbered Node.js versions (v19, v21) as they are non-LTS releases.
Method A: Install via NodeSource Repository (Recommended)
This method gives you a current LTS version. Fedora’s default repository sometimes ships an older Node.js build that may not meet n8n’s minimum version requirement.
First, install the C++ build tools that native npm modules need:
sudo dnf install -y gcc-c++ make
Next, pull in the NodeSource LTS setup script:
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
Now install Node.js:
sudo dnf install -y nodejs
Method B: Install via Fedora’s Default Repository (Simpler)
If you want the quickest path and are comfortable with a potentially older Node.js version, use Fedora’s built-in repo:
sudo dnf install -y nodejs npm
This works fine for many setups. If n8n later reports a Node.js version incompatibility, switch to Method A.
Verify Your Node.js Installation
Check both versions before moving on:
node -v
npm -v
You should see output similar to:
v20.18.0
10.8.1
n8n requires Node.js v18 or higher. If your output shows anything lower, reinstall using Method A.
Step 3: Install n8n Globally Using npm
With Node.js ready, install n8n as a global npm package. The -g flag places the n8n binary in /usr/bin/n8n, making it accessible from any directory on the system.
Run the install:
sudo npm install -g n8n
This command downloads n8n and all its dependencies. Depending on your connection speed and server hardware, this can take between 2 and 5 minutes. Do not interrupt it.
Verify the installation completed successfully:
n8n --version
You should see a version number printed to the terminal, such as 1.x.x.
Optional quick test: You can run n8n directly to confirm it starts. Press Ctrl+C to stop it once you see the startup output. Do not use this raw invocation for production — the next steps cover running it properly as a managed service.
Step 4: Create a Dedicated System User and Data Directory
Running n8n as root is a security risk. A dedicated, non-login system user isolates the n8n process from the rest of the operating system, limiting the blast radius if something goes wrong.
Create a system user with no home directory and no interactive login shell:
sudo useradd --system --no-create-home --shell /sbin/nologin n8n
Create the data directory. This is where n8n stores its SQLite database, saved workflows, credentials, and execution history. The /var/lib/ path follows the Linux Filesystem Hierarchy Standard (FHS) for persistent application data:
sudo mkdir -p /var/lib/n8n
Assign ownership of that directory to the new n8n user:
sudo chown -R n8n:n8n /var/lib/n8n
SELinux note for Fedora 43: Fedora ships with SELinux in enforcing mode by default. After creating this directory, restore the default SELinux file context to prevent permission-related service failures later:
sudo restorecon -Rv /var/lib/n8n
Step 5: Configure n8n Environment Variables
Environment variables control n8n’s identity, security boundaries, and runtime behavior. Skipping this step in any production or semi-production setup is one of the most common causes of broken webhooks, credential decryption failures, and OAuth redirect loops.
Create a dedicated environment file:
sudo nano /etc/n8n.env
Paste the following configuration, replacing placeholder values with your own:
# Core identity
N8N_HOST=0.0.0.0
N8N_PORT=5678
N8N_PROTOCOL=http
# Data storage
N8N_USER_FOLDER=/var/lib/n8n
# Security
N8N_ENCRYPTION_KEY=REPLACE_WITH_A_RANDOM_32_CHARACTER_STRING
N8N_SECURE_COOKIE=false
# Webhook URL (set this if you have a public domain or IP)
WEBHOOK_URL=http://YOUR_SERVER_IP_OR_DOMAIN:5678
# Timezone
GENERIC_TIMEZONE=Asia/Jakarta
Generate a secure, random encryption key with this command and copy the output into N8N_ENCRYPTION_KEY:
openssl rand -hex 16
Critical note on the encryption key: This key encrypts all stored credentials in your database. If you lose it or change it after your first run, n8n cannot decrypt previously saved API keys and OAuth tokens. Treat this value like a root password and never rotate it casually.
After saving the file, lock down its permissions so only root can read it:
sudo chmod 600 /etc/n8n.env
Here is a quick reference for the most important variables:
| Variable | What It Does | Example |
|---|---|---|
N8N_HOST |
IP address n8n binds to | 0.0.0.0 |
N8N_PORT |
Port n8n listens on | 5678 |
N8N_PROTOCOL |
HTTP or HTTPS | http |
N8N_USER_FOLDER |
Data storage path | /var/lib/n8n |
N8N_ENCRYPTION_KEY |
Encrypts stored credentials | 32-char random string |
N8N_SECURE_COOKIE |
Set to false for plain HTTP | false |
WEBHOOK_URL |
Public URL for webhook callbacks | Your server’s public URL |
GENERIC_TIMEZONE |
Timezone for scheduled workflows | Asia/Jakarta |
Step 6: Create a systemd Service File
A systemd service makes n8n start automatically on every boot and restart automatically if it crashes. This is what separates a proper server deployment from a process you have to manually babysit.
Create the service file:
sudo nano /etc/systemd/system/n8n.service
Paste this Fedora-compatible configuration:
[Unit]
Description=n8n workflow automation
Documentation=https://docs.n8n.io
After=network.target
[Service]
Type=simple
User=n8n
Group=n8n
EnvironmentFile=/etc/n8n.env
ExecStart=/usr/bin/n8n
Restart=on-failure
RestartSec=5s
WorkingDirectory=/var/lib/n8n
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Save and exit with Ctrl+O, Enter, then Ctrl+X.
A few key details about this service file worth understanding:
User=n8nandGroup=n8nensure the process never runs as rootEnvironmentFile=/etc/n8n.envloads your configuration variables cleanlyRestart=on-failurewithRestartSec=5stells systemd to wait 5 seconds before restarting n8n if it exits unexpectedlyStandardOutput=journalandStandardError=journalroute all logs throughjournalctlfor easy debugging
Reload the systemd daemon to register the new service:
sudo systemctl daemon-reload
Enable n8n to start on boot and launch it immediately:
sudo systemctl enable n8n --now
Verify the service is active and running:
sudo systemctl status n8n
Look for the Active: active (running) line in the output. If you see it, n8n is live.
Step 7: Open Port 5678 in Fedora’s Firewall (firewalld)
This is the step that most generic n8n guides get wrong. Fedora 43 uses firewalld, not ufw, and the commands are different. If you follow an Ubuntu-based tutorial and run ufw allow 5678, nothing will happen on Fedora.
First, verify firewalld is active:
sudo systemctl status firewalld
Open port 5678 permanently:
sudo firewall-cmd --permanent --add-port=5678/tcp
Reload the firewall to apply the change:
sudo firewall-cmd --reload
Confirm the port is open:
sudo firewall-cmd --list-ports
You should see 5678/tcp in the output.
If you plan to put n8n behind a reverse proxy like Nginx or Caddy (recommended for HTTPS), open HTTP and HTTPS services instead:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Step 8: Access n8n and Complete First-Time Setup
Open a browser and navigate to your server’s IP address on port 5678:
http://YOUR_SERVER_IP:5678
For a local installation, use:
http://localhost:5678
On the first visit, n8n presents an owner account setup screen. Fill in your email address, first name, last name, and a strong password. This account has full admin access to every workflow, credential, and setting in your instance.
After setup, you land directly on the n8n workflow canvas — your automation editor is ready.
To confirm the service survives reboots, test it now:
sudo reboot
After the server comes back up, check the service status:
sudo systemctl status n8n
If n8n shows active (running) after a full reboot, your n8n on Fedora 43 setup is complete and production-ready.
How To Update n8n in the Future
Keeping n8n updated protects you from security vulnerabilities and gives you access to new integrations and features. The update process is straightforward.
Stop the service:
sudo systemctl stop n8n
Update n8n through npm:
sudo npm update -g n8n
Restart the service:
sudo systemctl start n8n
Verify the new version:
n8n --version
Best practice: Before every major version update, back up your data directory:
sudo cp -r /var/lib/n8n /var/lib/n8n.backup.$(date +%F)
This preserves your workflows and credentials if something goes wrong during the update.
Troubleshooting Common Issues on Fedora 43
n8n Service Fails To Start
Check the logs first — they almost always tell you exactly what went wrong:
sudo journalctl -u n8n -n 50
The most common cause is incorrect ownership on /var/lib/n8n. Fix it with:
sudo chown -R n8n:n8n /var/lib/n8n
Then restart the service:
sudo systemctl restart n8n
SELinux Blocking the Service
Fedora 43 runs SELinux in enforcing mode. If you see AVC denial messages in your logs, SELinux is blocking n8n from accessing its data directory. Check for denials:
sudo ausearch -m avc -ts recent
The proper fix is to restore the default SELinux context to the n8n data directory:
sudo restorecon -Rv /var/lib/n8n
For a quick diagnostic test only (never leave this in place), you can temporarily switch SELinux to permissive mode:
sudo setenforce 0
If n8n starts after that command, SELinux context was the issue. Apply restorecon, then re-enable enforcing mode:
sudo setenforce 1
Port 5678 Not Accessible From Another Machine
First, confirm n8n is actually listening on that port:
ss -tulnp | grep 5678
If the port shows up there but you still cannot reach it remotely, your firewall is blocking it. Recheck your firewalld rules:
sudo firewall-cmd --list-ports
If 5678/tcp is not listed, re-run the firewalld commands from Step 7.
npm EACCES Errors During Installation
This error means you ran npm install -g n8n without sudo. On Fedora, global npm installs require elevated permissions:
sudo npm install -g n8n
Node.js Version Too Old
If n8n refuses to start with a Node.js version error, your current Node.js is below v18. Reinstall using the NodeSource method from Step 2, Method A.
Congratulations! You have successfully installed n8n. Thanks for using this tutorial for installing n8n workflow automation software and tools on Fedora 43 Linux system. For additional help or useful information, we recommend you check the official n8n website.