
This article provides an outline for self-hosting Easypanel and n8n on Ubuntu VPS.
What is Easypanel?
Easypanel is a modern, developer-friendly server control panel for hosting and deploying web applications on your own VPS or dedicated server. It provides a graphical interface similar to Plesk or cPanel, but with a focus on simplicity and modern development workflows.
🔧 Key Features
- Docker-based app management – Each application runs in an isolated Docker container for security and portability.
- One-click deployments – Quickly deploy apps like WordPress, Laravel, Node.js, Next.js, etc.
- Automatic SSL certificates – Easypanel integrates with Let’s Encrypt to automatically provision and renew HTTPS.
- Git integration – Deploy directly from Git repositories (GitHub, GitLab, Bitbucket).
- Database management – Supports PostgreSQL, MySQL, and Redis with built-in admin tools.
- Multi-user control panel – You can create projects, manage environments, and add team members.
- Resource monitoring – Includes dashboards for CPU, RAM, and disk usage.
💡 Use Cases
- Self-hosting SaaS or web apps.
- Running a PaaS-like environment on your own infrastructure.
- Simplifying DevOps for small teams or freelancers.
In short, Easypanel is like a lightweight, self-hosted Heroku or Plesk alternative — giving you modern app deployment and management tools without the complexity of manual Docker and server configuration.
What is n8n?
n8n (pronounced “n-eight-n”) is an open-source workflow automation tool that lets you connect different apps, APIs, and services — much like Zapier or Make (Integromat) — but with full control, flexibility, and the option to self-host.
⚙️ Core Purpose
n8n automates repetitive tasks and data flows by linking services through workflows made of nodes (each node performs an action, like “get new Gmail emails” or “create Trello card”).
🚀 Key Features
- Visual workflow builder – Drag-and-drop interface to design complex automations.
- Hundreds of integrations – Connects to apps like Slack, Notion, MySQL, GitHub, Google Sheets, APIs, etc.
- Custom API connections – You can integrate any REST or GraphQL API using HTTP nodes.
- Conditional logic and branching – Add if/else paths, loops, and merges for advanced logic.
- Self-hosted and private – Unlike SaaS tools, you can run n8n on your own server (ideal for data privacy).
- JavaScript expressions – Customize workflows using code snippets and variable handling.
- Triggers and schedules – Start workflows automatically (e.g., cron jobs, webhooks, event listeners).
🧠 Example Use Cases
- Sync CRM contacts between HubSpot and Google Sheets.
- Send Slack alerts when new GitHub issues are opened.
- Automate invoice creation when Stripe payments are received.
- Scrape or enrich data from APIs and push to databases.
🏗️ Deployment Options
- Self-host via Docker, Easypanel, or manual Node.js install.
- Cloud version: n8n Cloud (managed by the developers).
In short, n8n is your programmable automation hub — think of it as Zapier + Node-RED + API scripting, all open-source and under your control.
Overview and Assumptions
- You have a fresh Ubuntu server (VPS) with SSH access.
- You have at least 2 GB RAM (recommended) and free ports 80, 443, etc.
- Domain names / DNS (optional, but recommended for SSL).
- The plan is to install Easypanel first (as a server control panel) and then deploy n8n under it (or alongside).
- We’ll use Docker, because Easypanel runs on Docker. Easypanel itself will manage Docker services for you (apps, SSL, etc.).
- For n8n, I’ll show how to deploy it via Docker (or via Docker Compose) and then integrate it behind a domain / SSL.
- Root-equivalent user access
- Basic knowledge of command-line
Self-Hosting Easypanel and n8n on Ubuntu VPS
Follow the steps below for self-hosting Easypanel and n8n on Ubuntu VPS:
-
Install Easypanel (on Ubuntu)
Easypanel is a lightweight control panel (Docker-based) for deploying apps, managing domains, SSL, etc.
-
Prepare the server / update packages
- SSH into your server:
ssh youruser@your_server_ip
- Update and upgrade:
sudo apt update sudo apt upgrade -y
- (Optional) Install helpful utilities:
sudo apt install -y curl wget git vim
- SSH into your server:
-
Install Docker
Because Easypanel relies on Docker, you need to install Docker first. The official Docker install script works well:
curl -sSL https://get.docker.com | sh
After installation:
- Add your user (if not root) to
docker
group:sudo usermod -aG docker $USER
- Reload your shell (log out/in or
newgrp docker
) so your user has Docker permissions. - Check Docker is working:
docker version docker run hello-world
Make sure Docker is active and running on boot:
sudo systemctl enable docker sudo systemctl status docker
- Add your user (if not root) to
-
Run Easypanel setup
With Docker installed, run the Easypanel setup container:
docker run --rm -it \ -v /etc/easypanel:/etc/easypanel \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ easypanel/easypanel setup
This command:
- Mounts
/etc/easypanel
to persist config - Mounts the Docker socket so Easypanel can manage Docker
- Runs the
setup
script which bootstraps the panel and services
The setup may install Docker Swarm and other internal services. It’s recommended to use a fresh server (empty system) for Easypanel to avoid conflicts.
- Mounts
-
Access Easypanel
Once setup finishes, you can access the panel in your browser:
http://your_server_ip:3000
You’ll be prompted to create an admin account (username + password).
From there, you can use the GUI to deploy applications, configure domains, manage SSL (Let’s Encrypt), etc.
-
(Optional) Update / reset password
- To manually update Easypanel:
docker image pull easypanel/easypanel docker service update easypanel --force
- To reset the admin password via CLI:
docker run --rm -it \ -v /etc/easypanel:/etc/easypanel \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ easypanel/easypanel reset-password
- To manually update Easypanel:
-
-
Deploy n8n
Now that Easypanel is running, you can deploy n8n either under Easypanel (if it supports Docker apps) or separately. The cleanest method is using Docker Compose or a Docker service, with a reverse proxy to expose it via domain + SSL. Below is a robust method using Docker Compose + reverse proxy (which you can integrate with Easypanel’s reverse proxy features).
-
Option A (preferred): Docker Compose + Reverse Proxy (Let’s Encrypt)
This approach is well documented.
-
Prepare firewall / prerequisites
- Ensure ports 80 (HTTP) and 443 (HTTPS) are open and accessible.
- (Optional but recommended) install UFW and allow these ports:
sudo apt install -y ufw sudo ufw allow ssh sudo ufw allow http sudo apt allow https sudo ufw enable
Be cautious: Docker may bypass UFW, so double-check.
-
Create a directory for n8n
mkdir ~/n8n cd ~/n8n
-
Create
docker-compose.yml
Here’s a sample
docker-compose.yml
:version: "3.8" services: n8n: image: n8nio/n8n:latest environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=yourpassword - N8N_RUNNERS_ENABLED=true - WEBHOOK_URL=https://n8n.yourdomain.com - VUE_APP_URL_BASE_API=https://n8n.yourdomain.com/ ports: - "5678:5678" volumes: - n8n_data:/home/node/.n8n restart: always volumes: n8n_data:
You’ll want to customize:
WEBHOOK_URL
to your domain (with https)- Enable basic auth or set up more secure auth
- Use persistent volume for data
-
Setup reverse proxy and SSL
You can use Nginx, Caddy, or another reverse proxy to forward domain traffic to n8n’s port 5678.
Example using Caddy (automatic HTTPS):
- Install Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \ | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \ | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy -y
- Edit
/etc/caddy/Caddyfile
:n8n.yourdomain.com { reverse_proxy localhost:5678 }
- Restart Caddy:
sudo systemctl restart caddy
Caddy will automatically fetch and renew Let’s Encrypt certificates.
Alternatively, with Nginx + Certbot, you can set up an Nginx site that proxies to
localhost:5678
, enable HTTPS via Certbot, etc. (common method). - Install Caddy:
-
Launch n8n
Inside your n8n directory:
docker compose up -d
Check logs:
docker compose logs -f
If all is good, you should be able to browse to:
https://n8n.yourdomain.com
You can then login with basic auth (if enabled) or as the owner user.
-
Backup, security, environment settings
- Back up the
n8n_data
volume regularly. - Use environment variables to enable authentication, webhook URL, etc. See n8n docs for full list.
- Consider adding firewall rules, limiting access, rate limiting, etc.
- Monitor your Docker containers, update n8n image with caution (backup first).
- Back up the
-
-
Option B: Install n8n via npm / system (less recommended for production)
You can install
n8n
globally via npm on Ubuntu, but this requires more manual process management and doesn’t isolate dependencies as cleanly. Many guides cover this.High level steps:
- Install Node.js / npm
npm install -g n8n
- Configure environment variables (e.g.
WEBHOOK_URL
,N8N_BASIC_AUTH_*
, etc.) - Use process manager (pm2, systemd) to run
n8n
in background - Use Nginx (or another reverse proxy) + SSL to front it
This method is okay for dev / small use, but Docker gives more reproducibility.
-
-
Integrating n8n with Easypanel
Once both Easypanel and n8n are running, you have a few options:
- Deploy n8n as a Docker app through the Easypanel interface, if supported. (Check whether Easypanel allows deploying custom Docker containers / custom images.)
- Or treat n8n as an “external” service and manage DNS / SSL via Easypanel, pointing a subdomain to your n8n reverse proxy.
- Use Easypanel’s domain / SSL features to manage certificate issuance, then proxy to n8n.
The exact steps depend on how Easypanel structures app deployment. The general idea:
- In Easypanel, create a “project” or application slot for
n8n
. - Point the domain (e.g.
n8n.example.com
) or subdomain to your server (A record). - In Easypanel, set up SSL (Let’s Encrypt) for that domain.
- Configure Easypanel (or a reverse proxy layer) to forward requests to
localhost:5678
(the n8n container).
If Easypanel doesn’t allow arbitrary Docker apps, you may skip that part and just manage n8n outside via Docker Compose + reverse proxy.
-
Post-Install Checks & Maintenance
- Test that
https://n8n.yourdomain.com
works and loads the n8n UI. - Test webhooks / workflows to confirm the URL / domain is set correctly.
- Update n8n and Easypanel carefully (backup first).
- Backups: periodically backup your n8n data volume (e.g.
docker cp
, volume snapshots). - Security: restrict access, use strong passwords / basic auth or n8n’s built-in authentication, enable firewall, monitor logs.
- Monitoring: watch disk usage, container health, certificate expiry.
- Test that
Conclusion
You now know the process for self-hosting Easypanel and n8n on Ubuntu VPS.