August 16, 2025

Learn how to install n8n on Rocky Linux 10 step by step—secure, fast, and production-ready. Unlock the power of automation today before your competitors do. Don’t miss out on boosting efficiency with this complete guide! #centlinux #linux #n8n

Table of Contents

    Introduction

    When it comes to workflow automation, n8n has become one of the most powerful open-source tools available today. Think of it as an open-source alternative to Zapier, but with far greater flexibility. It allows you to connect APIs, databases, and services in a seamless way, automating repetitive tasks and giving you back valuable time.

    Now, you might be wondering: Why would I install n8n on Rocky Linux 10? Well, Rocky Linux 10 is quickly gaining popularity as a rock-solid, enterprise-ready alternative to CentOS. With its long-term support and stability, it makes for a perfect operating system to host critical applications like n8n.

    Self-hosting n8n on Rocky Linux doesn’t just give you control over your data; it also ensures you’re not locked into SaaS restrictions or pricing. Plus, with the flexibility to scale and integrate with tools like PostgreSQL, Docker, and Nginx, you get a professional-grade automation engine running on your own infrastructure.

    In this guide, we’ll go step by step through the process of installing and configuring n8n on Rocky Linux 10. By the end, you’ll have a fully functioning n8n instance that’s secured, optimized, and ready for production use.


    Prerequisites for Installing n8n

    Before diving into the installation process, let’s make sure your system is prepared. The last thing you want is to get halfway through only to realize your server doesn’t meet the requirements.

    1. Hardware Requirements

    At minimum, you’ll need:

    • 1 vCPU (2 or more recommended for production)
    • 2 GB RAM (4 GB or more is better)
    • 10 GB Disk Space (depending on workflows and database usage)

    If you plan to scale up workflows or integrate with databases, make sure to allocate extra CPU and memory—using a reliable Linux VPS can make this process seamless. [Get a Linux VPS at Hostinger at a discounted price now]

    2. Software Requirements

    You’ll need the following installed or available for installation:

    • Rocky Linux 10 (freshly installed or updated)
    • Node.js (v18 LTS or later)
    • npm (comes bundled with Node.js)
    • Nginx (for reverse proxy setup)
    • PostgreSQL (optional but recommended for database)
    • Docker & Docker Compose (optional method)

    3. User Permissions

    You should have:

    • non-root user with sudo privileges
    • Ability to open firewall ports (default n8n uses 5678)
    • Access to DNS/domain configuration if using a custom domain

    Making sure you’ve got these prerequisites handled will save you hours of frustration later.


    Step 1 – Updating and Preparing Rocky Linux 10

    The first thing we always do on a fresh Rocky Linux installation is update the system. Security and stability come first, and you don’t want to run into issues with outdated packages.

    Run the following commands:Copy

    sudo dnf update -y
    sudo dnf upgrade -y

    Next, install essential packages you’ll need:Copy

    sudo dnf install -y curl wget nano git unzip tar

    These tools will help us download, edit, and manage configurations.

    Firewall and SELinux Setup

    Rocky Linux comes with firewalld and SELinux enabled by default. To allow n8n traffic, open port 5678:Copy

    sudo firewall-cmd --add-port=5678/tcp --permanent
    sudo firewall-cmd --reload

    If you plan to use Nginx as a reverse proxy with HTTPS, also allow ports 80 and 443:Copy

    sudo firewall-cmd --add-service=http --permanent
    sudo firewall-cmd --add-service=https --permanent
    sudo firewall-cmd --reload

    Regarding SELinux, you can leave it enabled for security, but in case you run into permission issues later with services like Nginx or Docker, you may need to adjust policies. For testing, you can temporarily set it to permissive mode:Copy

    sudo setenforce 0

    But remember, disabling SELinux permanently isn’t recommended for production. Instead, configure policies properly.

    Step 2 – Installing Node.js and npm

    Since n8n is built with Node.js, we need to install it before proceeding. Rocky Linux doesn’t always ship with the latest version of Node.js, so we’ll use the NodeSource repository.

    Run:Copy

    curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
    sudo dnf install -y nodejs

    Verify installation:Copy

    node -v
    npm -v

    You should see Node.js v18.x or later and npm installed successfully.

    At this point, we’ve set up the foundation. With Node.js ready, we’re now prepared to install n8n itself.


    Step 3 – Installing n8n

    Now comes the fun part: installing n8n. Since we’ll be running it system-wide, we’ll install it globally using npm.Copy

    sudo npm install -g n8n

    Depending on your Linux server specs, this may take a few minutes.

    Once done, verify installation:Copy

    n8n --version

    If it returns a version number, congratulations—you’ve successfully installed n8n!

    Creating a Dedicated System User

    It’s always best practice not to run applications as root. Let’s create a new user:Copy

    sudo adduser --system --group --home /var/lib/n8n n8n
    sudo chown -R n8n:n8n /var/lib/n8n

    Switch to this user whenever running n8n manually:Copy

    sudo -u n8n n8n

    By default, n8n will start on port 5678. Open your browser and visit:Copy

    http://your_server_ip:5678

    At this point, you should see the n8n welcome screen.


    Step 4 – Running n8n as a Service

    Running n8n manually is fine for testing, but in production, we want it to run automatically on boot and restart if it crashes. That’s where systemd comes in.

    Creating a Systemd Service File

    We’ll set up a dedicated systemd unit for n8n:Copy

    sudo nano /etc/systemd/system/n8n.service

    Paste the following configuration:Copy

    [Unit]
    Description=n8n workflow automation tool
    After=network.target
    
    [Service]
    Type=simple
    User=n8n
    ExecStart=/usr/bin/n8n
    Restart=on-failure
    Environment=PATH=/usr/bin:/usr/local/bin
    WorkingDirectory=/var/lib/n8n
    
    [Install]
    WantedBy=multi-user.target

    Save and exit (CTRL+OCTRL+X).

    Enable and Start n8n Service

    Reload systemd to recognize the new service:Copy

    sudo systemctl daemon-reexec
    sudo systemctl daemon-reload

    Enable and start the n8n service:Copy

    sudo systemctl enable n8n
    sudo systemctl start n8n

    Check the status to confirm it’s running:Copy

    sudo systemctl status n8n

    If everything is configured properly, you should see n8n active and running in the background.

    Viewing Logs

    To troubleshoot or monitor activity, view logs:Copy

    journalctl -u n8n -f

    Now, every time your Rocky Linux server reboots, n8n will start automatically.


    Step 5 – Configuring Reverse Proxy with Nginx

    While n8n is accessible on port 5678, in a production setup, it’s better to run it behind a reverse proxy like Nginx. This allows you to use a domain name, enable SSL, and handle traffic securely.

    Install Nginx

    On Rocky Linux 10, install Nginx using:Copy

    sudo dnf install -y nginx
    sudo systemctl enable nginx
    sudo systemctl start nginx

    Verify it’s running:Copy

    systemctl status nginx

    Open your browser and visit your server IP—you should see the Nginx default page.

    Nginx Default Page
    Nginx Default Page

    Configure Reverse Proxy

    Create a new Nginx configuration file for n8n:Copy

    sudo nano /etc/nginx/conf.d/n8n.conf

    Paste the following config (replace yourdomain.com with your real domain):Copy

    server {
        listen 80;
        server_name yourdomain.com;
    
        location / {
            proxy_pass http://127.0.0.1:5678;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

    Save and exit. Test the configuration:Copy

    sudo nginx -t

    Reload Nginx:Copy

    sudo systemctl reload nginx

    Now, visiting http://yourdomain.com should take you directly to your n8n instance.

    Enable SSL with Let’s Encrypt

    For production, SSL is mandatory. Install Certbot:Copy

    sudo dnf install -y certbot python3-certbot-nginx

    Obtain and apply a free SSL certificate:Copy

    sudo certbot --nginx -d yourdomain.com

    Certbot will automatically configure Nginx with SSL. Test it by visiting:Copy

    https://yourdomain.com

    Congratulations—you now have a secure, domain-accessible n8n setup.


    Step 6 – Securing n8n with Environment Variables

    By default, n8n has no authentication, which is risky for production. Fortunately, it supports environment variables that add security layers.

    Setting Environment Variables

    We’ll store these variables in a file inside n8n’s home directory.Copy

    sudo nano /var/lib/n8n/.n8n_env

    Add the following:Copy

    # Security
    N8N_BASIC_AUTH_ACTIVE=true
    N8N_BASIC_AUTH_USER=admin
    N8N_BASIC_AUTH_PASSWORD=strongpassword
    
    # Webhook URL
    N8N_HOST=yourdomain.com
    N8N_PORT=5678
    N8N_PROTOCOL=https

    Save and exit.

    Update Systemd Service to Use Env File

    Edit the n8n service file:Copy

    sudo nano /etc/systemd/system/n8n.service

    Update [Service] to include:Copy

    EnvironmentFile=/var/lib/n8n/.n8n_env

    Reload systemd and restart n8n:Copy

    sudo systemctl daemon-reload
    sudo systemctl restart n8n

    Now, when you visit your domain, you’ll be prompted for a username and password before accessing n8n.

    n8n Login Page
    n8n Login Page

    Extra Security Options

    • Restrict IP Access: Configure Nginx to only allow specific IPs.
    • Use Fail2ban: Protect against brute-force attacks.
    • Enable HTTPS-only: Redirect all HTTP traffic to HTTPS.

    This ensures your n8n instance is locked down and production-ready.


    Step 7 – Using PostgreSQL with n8n

    By default, n8n stores its data in SQLite, which works fine for small setups. However, for scalability and reliability, PostgreSQL is the recommended database.

    Install PostgreSQL

    On Rocky Linux 10, run:Copy

    sudo dnf install -y postgresql-server postgresql-contrib
    sudo postgresql-setup --initdb
    sudo systemctl enable postgresql
    sudo systemctl start postgresql

    Create n8n Database and User

    Log in as the postgres user:Copy

    sudo -i -u postgres
    psql

    Run these commands inside PostgreSQL:Copy

    CREATE DATABASE n8n;
    CREATE USER n8nuser WITH ENCRYPTED PASSWORD 'securepassword';
    GRANT ALL PRIVILEGES ON DATABASE n8n TO n8nuser;
    \q
    exit

    Configure n8n to Use PostgreSQL

    Edit your .n8n_env file:Copy

    sudo nano /var/lib/n8n/.n8n_env

    Add the following:Copy

    DB_TYPE=postgresdb
    DB_POSTGRESDB_HOST=localhost
    DB_POSTGRESDB_PORT=5432
    DB_POSTGRESDB_DATABASE=n8n
    DB_POSTGRESDB_USER=n8nuser
    DB_POSTGRESDB_PASSWORD=securepassword

    Restart n8n:Copy

    sudo systemctl restart n8n

    Now, n8n will use PostgreSQL as its database backend—much more robust and reliable than SQLite for production environments.


    Step 8 – Setting Up n8n with Docker (Alternative Method)

    If you prefer containerization, Docker is an excellent way to deploy n8n. It isolates dependencies and makes upgrades easier.

    Install Docker & Docker Compose

    Run:Copy

    sudo dnf install -y dnf-plugins-core
    sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    sudo systemctl enable docker
    sudo systemctl start docker

    Verify installation:Copy

    docker --version
    docker compose version

    Run n8n in Docker

    Create a directory for n8n:Copy

    mkdir ~/n8n-docker && cd ~/n8n-docker

    Create a docker-compose.yml file:Copy

    version: "3.3"
    
    services:
      n8n:
        image: n8nio/n8n
        restart: always
        ports:
          - "5678:5678"
        environment:
          - N8N_BASIC_AUTH_ACTIVE=true
          - N8N_BASIC_AUTH_USER=admin
          - N8N_BASIC_AUTH_PASSWORD=strongpassword
        volumes:
          - ./n8n_data:/home/node/.n8n

    Start n8n:Copy

    docker compose up -d

    Now, n8n is running inside Docker, with persistent data storage in ./n8n_data.

    This method is clean, portable, and easy to update—perfect if you’re managing multiple servers.


    Step 9 – Automating n8n with PM2 (Optional Method)

    While systemd is the standard way to manage services on Rocky Linux, some developers prefer PM2, a Node.js process manager that makes it easy to run, monitor, and restart applications. PM2 is especially useful if you’re running multiple Node.js apps or want an additional layer of control.

    Installing PM2

    First, install PM2 globally using npm:Copy

    sudo npm install -g pm2

    Verify installation:Copy

    pm2 --version

    You should see the PM2 version displayed.

    Running n8n with PM2

    Switch to the n8n user:Copy

    sudo -u n8n -s

    Start n8n with PM2:Copy

    pm2 start n8n --name n8n

    Check the status:Copy

    pm2 status

    You’ll see n8n running under PM2 management.

    Enable PM2 Startup Script

    To ensure n8n restarts on boot, run:Copy

    pm2 startup systemd

    Follow the on-screen instructions to enable auto-start. Then save the process list:Copy

    pm2 save

    Now, n8n will restart automatically even if the server reboots.

    Benefits of Using PM2

    • Easy process monitoring with pm2 logs
    • Auto-restart on crash
    • Built-in load balancing support
    • Easy scaling with pm2 scale

    If you prefer simplicity, stick to systemd. But if you want advanced Node.js process management, PM2 is a great option.

    2-in-1 Nasal Hair Cutter: Our 2-in-1 nose hair trimmer is expertly designed with double-sided blades for efficient and precise trimming, ensuring unsightly nose hairs disappear in an instant. This versatile tool meets the grooming needs of both men a… read more


    Step 10 – Testing n8n Installation

    Now that n8n is running as a service (or via PM2/Docker), it’s time to test if everything works properly.

    Accessing n8n in Browser

    Open your browser and visit:Copy

    https://yourdomain.com

    (or http://your_server_ip:5678 if you didn’t set up a domain). You should be prompted for the username and password you configured earlier.

    After logging in, you’ll see the n8n dashboard.

    Running a Sample Workflow

    Let’s test automation by creating a simple workflow:

    1. Click “New Workflow”.
    2. Add a Cron node that triggers every minute.
    3. Add a Set node that outputs a custom message like "Hello from n8n on Rocky Linux 10!".
    4. Execute the workflow and check the results.

    If the workflow runs successfully, your n8n installation is working perfectly.

    Troubleshooting Common Issues

    • Port already in use → Make sure nothing else is running on port 5678.
    • Nginx 502 Bad Gateway → Check logs with journalctl -u n8n -f.
    • SSL issues → Ensure DNS points to your server and renew certs with certbot renew.
    • Database connection errors → Double-check PostgreSQL credentials in .n8n_env.

    Testing workflows is the best way to confirm everything is set up correctly.


    Step 11 – Optimizing n8n Performance

    If you plan to use n8n in production with multiple workflows, you’ll want to optimize performance.

    1. Allocate More Resources

    • Increase CPU and RAM if workflows are resource-heavy.
    • Consider upgrading to a dedicated VPS for stability.

    2. Use PostgreSQL Instead of SQLite

    As mentioned earlier, PostgreSQL offers better performance and data integrity compared to SQLite.

    3. Enable Caching

    If workflows query APIs often, use Redis or caching mechanisms to reduce repeated requests.

    4. Limit Concurrent Executions

    By default, n8n executes workflows simultaneously. You can set concurrency limits in your .n8n_env file:Copy

    EXECUTIONS_PROCESS=main
    EXECUTIONS_TIMEOUT=3600
    EXECUTIONS_DATA_SAVE_ON_SUCCESS=none

    5. Monitor n8n

    Use tools like:

    • htop → Monitor system usage.
    • pm2 monit → Monitor Node.js processes.
    • Grafana + Prometheus → Full monitoring stack for advanced setups.

    Optimizing performance ensures that n8n runs smoothly even as your automation needs grow.


    Step 12 – Backup and Restore Strategies

    Automation workflows are valuable, and losing them would be a nightmare. That’s why setting up backup and restore procedures is critical.

    Backing Up n8n Data

    If you’re using SQLite:

    • Backup the ~/.n8n directory (or /var/lib/n8n).

    If you’re using PostgreSQL:

    • Use pg_dump to back up the database:

    Copy

    pg_dump -U n8nuser -d n8n > n8n_backup.sql

    For Docker users, simply back up the n8n_data volume.

    Automating Backups

    Set up a cron job to back up daily:Copy

    crontab -e

    Add:Copy

    0 2 * * * pg_dump -U n8nuser -d n8n > /backups/n8n_$(date +\%F).sql

    This creates daily backups at 2 AM.

    Restoring from Backup

    For PostgreSQL:Copy

    psql -U n8nuser -d n8n < n8n_backup.sql

    For SQLite:

    • Stop n8n.
    • Restore the .sqlite file.
    • Restart n8n.

    With backups automated, you’ll never have to worry about losing workflows or critical data.


    Step 13 – Updating n8n on Rocky Linux 10

    n8n is actively developed, and updates often bring new features, nodes, and security patches.

    Updating n8n (npm method)

    Run:Copy

    sudo npm install -g n8n@latest

    Restart the service:Copy

    sudo systemctl restart n8n

    Updating n8n (Docker method)

    If you’re using Docker, simply pull the latest image:Copy

    docker compose pull
    docker compose up -d

    Handling Compatibility Issues

    • Always back up before upgrading.
    • Check the n8n changelog for breaking changes.
    • Test in a staging environment if workflows are mission-critical.

    Keeping n8n updated ensures you benefit from the latest security improvements and automation features.


    • AI Automation: Build LLM Apps & AI-Agents with n8n & APIs


    Conclusion

    You’ve successfully learned how to install, configure, and secure n8n on Rocky Linux 10. From preparing your system, installing Node.js, running n8n as a service, setting up Nginx with SSL, configuring PostgreSQL, and even exploring Docker and PM2—your automation platform is now production-ready.

    With n8n, you gain full control over your automation workflows without being tied to SaaS restrictions. Rocky Linux 10 provides the perfect stable foundation, ensuring reliability and performance for your self-hosted n8n instance.

    Now it’s time to explore the world of workflow automation—connect APIs, automate emails, sync databases, and much more. The possibilities are endless with n8n.

    Need expert AWS and Linux system administration? From cloud architecture to server optimization, I provide reliable and efficient solutions tailored to your needs. Hire me today!


    FAQs

    1. Can I run n8n on Rocky Linux without Docker?
    Yes, n8n can be installed natively using Node.js and npm. Docker is optional but simplifies deployment.

    2. How do I enable HTTPS for n8n?
    Use Nginx as a reverse proxy and install an SSL certificate with Certbot to enable secure HTTPS access.

    3. What ports does n8n use?
    By default, n8n listens on port 5678, but you can change this via environment variables or reverse proxy configuration.

    4. Is PostgreSQL better than SQLite for n8n?
    Yes, PostgreSQL is more reliable and scalable for production. SQLite works for small setups but is not ideal for large workflows.

    5. How do I reset the n8n admin credentials?
    Edit the .n8n_env file and update N8N_BASIC_AUTH_USER and N8N_BASIC_AUTH_PASSWORD. Restart n8n to apply changes.


    Looking for something?

    Search

    Latest Articles

    Leave a Reply

    Leave a Reply