Docs
grovs.io Start for free

Easypanel

Deploy Grovs on an Easypanel server from the preview service template, with shared object storage.

Get Easypanel template (opens in a new tab)

When to use

You already run Easypanel and want Grovs as native services. The template creates the backend, dashboard, two workers and three databases with persistent volumes.

Preview: the template passes local checks. Live Easypanel validation and an official catalog listing are pending, so you import it manually.

Prerequisites

RequirementNotes
Easypanel server4 vCPU, 8 GB RAM, 80 GB SSD. To install the panel, see Easypanel's setup guide.
Domains you controlApp, production links and test links
Private S3-compatible bucketFor uploads. Keep the credentials ready for the template form.
Workstation with Node.js 22, npm and GitOnly to generate the template. Grovs itself runs from published images.

1. Prepare DNS and proxy

Choose three domains, without a scheme or path:

SettingExample
App base domaingrovs.example.com
Production links domainlinks.example.com
Test links domaintest.links.example.com

Point the DNS records at the Easypanel server. Plan wildcard certificates for both link domains: they need DNS validation or certificates you supply. A wildcard DNS record alone does not enable HTTPS.

2. Create the app

Until Grovs is in Easypanel's catalog, generate its configuration with the upstream template playground. In a fresh directory:

Bash
git clone https://github.com/grovs-io/self-host.git grovs-self-host
git clone https://github.com/easypanel-io/templates.git grovs-easypanel
cp -R grovs-self-host/deploy/catalogs/easypanel/grovs grovs-easypanel/templates/grovs
cd grovs-easypanel
npm ci
npm run build-templates
npm run dev:next -- --port 3010

3. Configure environment

1
Fill in the template

Open http://localhost:3010/?slug=grovs. Enter your domains, administrator email and bucket details. Leave the storage endpoint empty for AWS S3. For another provider, enter its S3-compatible HTTPS endpoint.

2
Generate once

Select Generate, then Copy. The JSON includes generated passwords, encryption keys and the credentials you entered. Keep it private and save a secure copy. Generate it once per installation: generating again creates new secrets.

3
Stop the playground

Press Ctrl+C.

4. Deploy and verify

1
Import

In your Easypanel project, create a template from JSON, paste the configuration and create the services. Keep the default single replica per service and leave zero-downtime replacement disabled.

Web waits for PostgreSQL and ClickHouse, runs migrations and initial setup, then starts the API. The workers wait for the API's health endpoint. Database services have persistent volumes and no public ports.

2
Attach domains

The template attaches these fixed hosts on container port 3000:

ServiceHosts
Dashboarddashboard.<app domain>
Webapi, sdk, mcp, go and preview under the app domain

Add these to web, also on port 3000:

  • links.<production links domain> and links.<test links domain>
  • *.<production links domain> and *.<test links domain> for project links

Configure wildcard routing and certificates in Easypanel's proxy settings.

3
Sign in

Read BOOTSTRAP_ADMIN_EMAIL and BOOTSTRAP_ADMIN_PASSWORD from the web service's environment. Open https://dashboard.<app domain> and sign in.

4
Verify

Check https://api.<app domain>/up, create a project and open a link. Confirm analytics, an uploaded image, and HTTPS on both production and test link hosts. If migrations fail or the API does not become ready, check web's logs.

Upgrades

  1. Back up the environment secrets, database volumes and bucket contents. See Backups.
  2. Stop the workers.
  3. Update both Grovs images to the same release.
  4. Let web complete migrations.
  5. Restart the workers and dashboard.

Platform-specific gotchas

  • Keep worker-1 at one instance.
  • Never generate a replacement template over an existing install. It creates new secrets.
  • See Troubleshooting and the template package.
Last updated 2026-10-26
Was this page helpful?