Tutorial

Deployment

Deploy your applications with Easypanel on a VPS

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.

10 min read5 steps
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: 2 GB minimum, the requirement stated by the vendor. As soon as you host several applications with their databases, aim for 4 GB: Nixpacks builds temporarily consume a lot of RAM and a small 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: plan for at least 30 GB of SSD. 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. The official script targets Ubuntu: when Docker is missing, it installs it from Docker's Ubuntu repository. 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 and 443 must be free (the script stops if a service already uses them) and open in your firewall. The panel listens on port 3000 for first access; once its domain is configured, disable IP access rather than relying on ufw, which does not filter ports published by Docker.

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), initialises Docker Swarm and starts Easypanel, which deploys Traefik, in a few minutes. The panel is then reachable on port 3000 of the server: 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 open the server settings (Settings) and fill in the custom 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: then disable IP access in that same setting. Do not rely on ufw to close port 3000: Docker publishes its ports ahead of ufw rules.

  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 New Service → App. Provide the GitHub repository (a GitHub token configured on the server is required for a private repository), the production branch and the build path if necessary. Easypanel uses the Dockerfile if present; otherwise Nixpacks detects the stack — Node, Python, PHP, Ruby, Go. Railpack, its successor, is recommended by the vendor for a new application and is selected in the Build tab.

  4. Add a database and environment variables

    In the same project, click New Service and choose Postgres, MySQL, MariaDB, Mongo or Redis. Easypanel generates an internal hostname derived from the project and service names, a user (postgres by default for PostgreSQL) and a random password. Copy the internal connection URL from the Credentials tab, 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. 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. From the tabs of each service, you can:
- add Traefik middlewares to a domain (Domains tab) or HTTP Basic authentication (Security tab);
- mount persistent volumes (Storage tab, useful for data in applications that do not use a dedicated database);
- set the number of replicas and zero-downtime deployments (Advanced tab).

Internal port. Each domain routes to a target port, which must be the port the application listens on inside the container (normally on 0.0.0.0). If your application listens on a non-standard port, set it as the domain's target port (Domains tab) so that Traefik knows where to route requests.

Updates and Easypanel backups

Updating Easypanel. The panel checks for updates itself: when a new release is available, a button appears in the navigation bar. From the command line, the manual update documented by the vendor (stable channel) is:

docker image pull easypanel/easypanel && docker service update easypanel --force

Do not re-run the installation script to update: it is meant for a fresh server, stops when ports 80 and 443 are in use and runs docker swarm leave --force.

Backing up the panel state. Easypanel stores its configuration, the Traefik configuration (certificates included) and service data in the server's /etc/easypanel directory, mounted into its containers. To back up everything:

# Measure Easypanel's state directory
du -sh /etc/easypanel

# Archive it (the archive contains secrets: protect it)
tar czf /root/easypanel-backup-$(date +%Y%m%d).tar.gz -C / etc/easypanel \
  && chmod 600 /root/easypanel-backup-*.tar.gz

Then copy the archive off the server. Files of a database being written may be inconsistent in it: for databases, rely on their logical backups.

Application database backups. Easypanel offers scheduled logical backups for PostgreSQL, MySQL, MariaDB and MongoDB (not Redis). First declare a destination in Settings → Server → Storage Providers: an S3 or S3-compatible bucket (Cloudflare R2, Backblaze B2, Wasabi…), SFTP, Dropbox or Google Drive. Then configure the backup from the Backups tab of each database service: cron schedule, number of backups kept and destination path. Run a first backup manually and test its restore.

Restoring. To restore the state directory archive on the server:

tar xzf /root/easypanel-backup-20261001.tar.gz -C /

Troubleshooting: the most common errors

Port 80 or 443 already in use. If the installation script stops on "something is already running on port 80" (or 443), check which service is listening on those ports: ss -tlnp | grep -E ':(80|443)'. A pre-installed nginx or Apache on the VPS blocks the installation. Stop and disable the competing service (systemctl disable --now nginx) then re-run the installation script.

Docker not installed or version too old. The script only installs Docker when it is missing: on a system that already has an old Docker version, it keeps it as is and you may get compatibility errors. Check the version: docker --version, and compare it with the latest stable Docker Engine release. 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 run the server IP refresh from the server settings, which updates the recorded IP, the generated domain and the certificates.

Nixpacks build fails out of memory. On a small VPS (2 GB of RAM), 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 (free plan limited to 3 projects)Open source (Apache 2.0)Open source (Apache 2.0, except a proprietary directory)
Minimum recommended RAM2 GB2 GB2 GB
Internal databaseNot documentedPostgreSQL (+ Redis)PostgreSQL (required)
BuildpacksRailpack, Nixpacks, Buildpacks, Dockerfile, Docker imageNixpacks, Railpack (beta), Dockerfile, Docker Compose, staticNixpacks, Railpack, Dockerfile, Heroku, Paketo, static
App templates800+ (WordPress, n8n, Ghost, Plausible…)300+ (Appwrite, Supabase, n8n…)500+ (WordPress, n8n, Directus…)
Multi-serverYes (Docker Swarm worker nodes)Yes (remote servers over SSH)Yes (remote servers, Swarm nodes)
Free / self-hosted planFree up to 3 projects, paid per-server licences100% 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, disable IP access (port 3000) after configuring its 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.