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
Launch the automated installation
On a clean Ubuntu, run the official script as root:
curl -sSL https://get.easypanel.io | shThe 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 withdocker psbefore moving to the next step.Create the administrator account
Open
http://VPS_IP:3000in 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.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.
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 (
postgresby 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.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 | shBacking 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 /dataApplication 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
| Criterion | Easypanel | Coolify | Dokploy |
|---|---|---|---|
| License | Proprietary (generous free plan) | Open source (Apache 2.0) | Open source (MIT) |
| Minimum recommended RAM | 2 GB | 2 GB | 1 GB |
| Internal database | SQLite (built-in) | SQLite / PostgreSQL | PostgreSQL (required) |
| Buildpacks | Nixpacks + Dockerfile + Docker image | Nixpacks + Dockerfile + Heroku | Nixpacks + Dockerfile + Docker image |
| App templates | 100+ (WordPress, n8n, Ghost, Plausible…) | 80+ (Appwrite, Supabase, n8n…) | 50+ (WordPress, n8n, Directus…) |
| Multi-server | Yes (beta, Swarm workers) | Yes (stable, Swarm + SSH) | Yes (stable, multi-node) |
| Free / self-hosted plan | Self-hosted free, paid cloud plan | 100% self-hosted free | 100% 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.