Tutorial

Deploy your applications with Easypanel on a VPS

Deployment9 min read5 steps

Easypanel is a modern control panel that turns your VPS into an elegant deployment platform. With its polished interface, Nixpacks buildpacks and automatic SSL, it rivals commercial PaaS solutions while remaining self-hosted. This guide walks you through the whole journey: exact prerequisites, post-installation configuration, backups and how to fix the most common errors.

Contents· Why deploy Easypanel on your VPS1/8
  1. 01Why deploy Easypanel on your VPS
  2. 02The concrete benefits of Easypanel
  3. 03Exact prerequisites for Easypanel
  4. 04Install Easypanel and deploy an application
  5. 05Post-installation: Traefik and advanced TLS
  6. 06Updates and Easypanel backups
  7. 07Troubleshooting: the most common errors
  8. 08Easypanel, Coolify or Dokploy: which to choose?

Why deploy Easypanel on your VPS

Easypanel positions itself as a modern, visual alternative to CapRover or Dokku. It relies on Docker and Nixpacks to automatically build your applications from a Git repository, without you having to write a Dockerfile. Its interface, more recent and more ergonomic than most open-source panels, lets you manage applications, databases, certificates and domains in a few clicks. Easypanel natively integrates Traefik as a reverse proxy: each deployed application automatically gets its Let's Encrypt certificate and its routing. It's an excellent compromise between the simplicity of a commercial PaaS and the control of a server you own, particularly well suited to agencies that regularly deploy client projects.

The concrete benefits of Easypanel

  • Automatic builds via Nixpacks: deploy Node, Python, PHP or Go without writing a Dockerfile.
  • Modern, intuitive interface to manage apps, domains and databases.
  • Traefik built in: reverse proxy and Let's Encrypt SSL configured automatically.
  • One-click databases: PostgreSQL, MySQL, MongoDB, Redis ready to use.
  • Deployment from GitHub with automatic rebuild on every push.
  • Templates for popular applications (WordPress, n8n, Ghost…) deployable instantly.
  • Project isolation: each client or application in its own Docker network.

Exact prerequisites for Easypanel

Easypanel bundles Traefik and a Nixpacks builder, which requires a bit more memory than Portainer.

RAM: 1 GB minimum for an installation without active builds, 2 GB recommended for regular use. As soon as you host several applications with their databases, aim for 4 GB: Nixpacks builds temporarily consume a lot of RAM and a 1 GB server risks killing the compilation process mid-way.

CPU: 1 vCPU is sufficient to start, 2 vCPU recommended as soon as you run frequent builds or resource-intensive databases.

Disk: 30 GB SSD minimum. Plan for more if you host large databases or heavy Docker images (Node, Java).

OS: Clean Ubuntu 22.04 LTS or Ubuntu 24.04 LTS with root access. Debian 12 also works. Docker is installed automatically by the Easypanel script — no need to pre-install it.

Network / DNS: configure an A record for the panel domain (panel.mydomain.com) pointing to your VPS IP. A wildcard record *.mydomain.com is strongly recommended to avoid manually adding each application subdomain. Ports 80, 443 and 3000 must be open in your firewall for the initial installation (port 3000 can then be closed once the panel domain is configured).

Install Easypanel and deploy an application

  1. Launch the automated installation

    On a clean Ubuntu, run the official script as root:

    curl -sSL https://get.easypanel.io | sh

    The script installs Docker (if absent), Traefik and Easypanel in a few minutes. At the end, it displays the panel access URL: http://VPS_IP:3000. Verify that Docker is running with docker ps before moving to the next step.

  2. Create the administrator account

    Open http://VPS_IP:3000 in your browser. Create your admin account with an email address and a strong password (at least 16 characters). Then go to Settings → General and fill in the panel domain (panel.mydomain.com): Easypanel will immediately request a Let's Encrypt certificate via Traefik. Once the certificate is obtained, the panel is accessible via HTTPS and port 3000 can be closed in your firewall.

  3. Create a project and an application

    In the interface, click New Project: a project groups your services (app + database + cache) in an isolated Docker network. Inside the project, click Create Service → App. Provide the GitHub repository (OAuth access or token), the production branch and the root directory if necessary. Easypanel automatically detects the stack via Nixpacks — Node, Python, PHP, Ruby, Go or a Dockerfile if present.

  4. Add a database and environment variables

    In the same project, click Create Service → Database and choose PostgreSQL, MySQL, MongoDB or Redis. Easypanel generates an internal hostname (postgres by default), a user and a random password. Copy the proposed connection string, then inject it into your application via the Environment tab of your App service. Services within the same project communicate via their service name on the internal Docker network — no need to expose the database to the Internet.

  5. Configure the domain and deploy

    In the application's Domains tab, add my-app.mydomain.com: Easypanel configures Traefik and obtains the SSL certificate automatically. Click Deploy: Nixpacks builds the image and brings the application online. View real-time build logs from the Deployments tab to track progress and catch any errors.

Post-installation: Traefik and advanced TLS

Easypanel exposes Traefik via two entry points: the Traefik dashboard (disabled by default for security reasons) and the internal routing API that the panel manages automatically. You normally do not need to touch the Traefik configuration directly.

Automatic TLS. For each domain added in the Domains tab of a service, Easypanel configures an ACME Let's Encrypt resolver (HTTP-01 on port 80). The certificate is renewed automatically before expiry. If your domain is behind Cloudflare, make sure the SSL/TLS mode is set to Full (strict) — a "Flexible" mode would cause an infinite redirect loop since Traefik already redirects HTTP to HTTPS.

Advanced configurations. Via the Advanced tab of each service, you can:
- inject custom Traefik labels (rate-limiting, authentication middlewares);
- mount persistent Docker volumes (useful for data in applications that do not use a dedicated database);
- define a Docker healthcheck so that Traefik only routes traffic to healthy replicas.

Internal port. Easypanel detects the exposed port via Nixpacks or the EXPOSE directive of the Dockerfile. If your application listens on a non-standard port, declare it explicitly in the Port field of the service so that Traefik knows where to route requests.

Updates and Easypanel backups

Updating Easypanel. The panel updates via the interface: Settings → General → Update. From the command line, simply re-run the installation script — it detects the existing installation and updates the containers without reconfiguring your environment:

curl -sSL https://get.easypanel.io | sh

Backing up Docker volumes. Easypanel stores its data (configuration, certificates, Traefik state) in Docker volumes. To back up the entire panel state:

# List Easypanel volumes
docker volume ls | grep easypanel

# Back up a volume to a tar archive
docker run --rm -v easypanel_data:/data -v $(pwd):/backup \
  alpine tar czf /backup/easypanel-backup-$(date +%Y%m%d).tar.gz /data

Application database backups. Easypanel offers scheduled backup functionality for PostgreSQL, MySQL/MariaDB and MongoDB, with export to an S3-compatible bucket. Configure it from the Backups tab of each database service: choose the frequency (hourly, daily, weekly) and the access information for your S3 or Backblaze B2 bucket.

Restoring. To restore a backed-up Docker volume:

docker run --rm -v easypanel_data:/data -v $(pwd):/backup \
  alpine tar xzf /backup/easypanel-backup-20261001.tar.gz -C /

Troubleshooting: the most common errors

Port 80 or 443 already in use. If Traefik does not start on first launch, check that no other service is listening on those ports: ss -tlnp | grep -E ':(80|443)'. A pre-installed nginx or Apache on the VPS blocks startup. Stop the competing service (systemctl stop nginx) then restart the containers.

Docker not installed or version too old. The installation script handles this, but if you run it on a system that already has an old Docker version, you may get compatibility errors. Check the version: docker --version (Docker 24+ recommended). If necessary, uninstall the old version and re-run the script.

DNS not propagated — SSL certificate not found. If Let's Encrypt cannot verify the domain (DNS record not yet propagated, or long TTL), Traefik will show a certificate error. Check propagation from your terminal: dig +short panel.mydomain.com must return your VPS IP. DNS propagation can take a few minutes to several hours depending on the registrar and TTL.

Certificate error after IP change. If you migrate your VPS to a new IP without updating DNS, the ACME challenge fails. Update your A record, wait for propagation, then force certificate renewal from Settings → Certificates → Renew.

Nixpacks build fails out of memory. On a 1 GB RAM VPS, Node.js builds or multi-stage images may fail silently. Add swap to absorb peaks: fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile. Make swap persistent by adding /swapfile none swap sw 0 0 to /etc/fstab.

Easypanel, Coolify or Dokploy: which to choose?

Scroll the table

CriterionEasypanelCoolifyDokploy
LicenseProprietary (generous free plan)Open source (Apache 2.0)Open source (MIT)
Minimum recommended RAM2 GB2 GB1 GB
Internal databaseSQLite (built-in)SQLite / PostgreSQLPostgreSQL (required)
BuildpacksNixpacks + Dockerfile + Docker imageNixpacks + Dockerfile + HerokuNixpacks + Dockerfile + Docker image
App templates100+ (WordPress, n8n, Ghost, Plausible…)80+ (Appwrite, Supabase, n8n…)50+ (WordPress, n8n, Directus…)
Multi-serverYes (beta, Swarm workers)Yes (stable, Swarm + SSH)Yes (stable, multi-node)
Free / self-hosted planSelf-hosted free, paid cloud plan100% self-hosted free100% self-hosted free

Enable automatic deployment by connecting a GitHub webhook: every push to your production branch triggers a Nixpacks rebuild with no intervention. For client projects, create a separate Project per client in order to isolate networks and databases. On a memory-limited VPS, watch the RAM during Nixpacks builds and add swap: Node compilations or heavy images can saturate a small server and cause the deployment to fail. For panel security, close port 3000 after configuring your domain and consider adding a Traefik authentication middleware in front of sensitive internal services.

Deploy your projects with Easypanel

A ServOrbit Cloud VPS running Ubuntu, with the right resources and wildcard domain, lets you install Easypanel and bring your applications online in a few clicks.

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.

Message us on WhatsAppopens in a new tab