# Try locally

> Run the full stack on your laptop to explore the dashboard and test link tracking, with no public server or DNS.

Source: https://docs.grovs.io/docs/self-hosting/get-started/try-locally

## Prerequisites

| Requirement                   | Notes                                                                   |
| ----------------------------- | ----------------------------------------------------------------------- |
| Docker with Docker Compose v2 | On Windows, run the commands from WSL2 with Docker integration enabled. |
| Free port 80                  | Or choose another port with `GROVS_WEB_PORT`.                           |

## Install

### 1. Run the installer

From the directory where you want the new `grovs` folder:

```bash
curl -fsSL https://raw.githubusercontent.com/grovs-io/self-host/main/install.sh | GROVS_DOMAIN=local bash
cd grovs
```

`GROVS_DOMAIN=local` selects the local trial without asking for a domain. The installer downloads the Compose files, generates your admin login and starts all services. It uses the release version bundled with the installer.

### 2. Open the dashboard

Open **<http://dashboard.lvh.me:3002>** and log in with the admin email and password printed by setup. `lvh.me` and its subdomains resolve to `127.0.0.1`, your own machine. The API uses port 80 by default.

If port 80 is in use, add `GROVS_WEB_PORT=8080` before `bash` in the installer command and run it in a fresh directory. `GROVS_DASHBOARD_PORT` changes the dashboard port. Both are saved in `.env`.

### Manual setup

To clone and inspect the repository yourself, run these in a fresh directory instead of the installer:

```bash
git clone https://github.com/grovs-io/self-host.git grovs
cd grovs
GROVS_RELEASE_URL="$(curl -fsSL -o /dev/null -w '%{url_effective}' https://github.com/grovs-io/self-host/releases/latest)"
GROVS_VERSION="${GROVS_RELEASE_URL##*/}" GROVS_DOMAIN=local ./scripts/setup.sh
docker compose -f docker-compose.yml -f docker-compose.local.yml pull
docker compose -f docker-compose.yml -f docker-compose.local.yml up -d
```

For an existing installation, follow [Upgrades](https://docs.grovs.io/docs/self-hosting/operate/upgrades) instead of rerunning the installer.

## Check startup

```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml ps -a
docker compose -f docker-compose.yml -f docker-compose.local.yml logs --tail=100 migrate web
curl --fail http://api.lvh.me/up
```

Use `http://api.lvh.me:8080/up` if you chose port 8080. `migrate` should finish with exit code 0; it does not stay running. Analytics can take about a minute after startup to become available.

## Limits of a local trial

Local HTTP works for a trial. Universal Links and App Links need a public HTTPS installation: follow [Deploy on a server](https://docs.grovs.io/docs/self-hosting/get-started/deployment). A phone's `127.0.0.1` is the phone, not your laptop.

## Stop and resume

Both commands keep your data:

```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml stop
docker compose -f docker-compose.yml -f docker-compose.local.yml up -d
```

To remove the trial and **delete all its database and upload volumes**:

```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml down --volumes
```
