-
Notifications
You must be signed in to change notification settings - Fork 1
Docker Deployment
Lastest ships with two production deploy targets and a Docker-Compose-based home server flow. Both production targets share the same multi-stage Dockerfile.
| Target | Script | Stack |
|---|---|---|
| ZimaBoard / CasaOS | pnpm deploy:zima |
Docker Compose -- single host |
| Olares / Kubernetes | pnpm deploy:olares |
Two-pod app split (envoy + envoy-less) on k8s |
git clone https://github.com/las-team/lastest.git
cd lastest
docker compose up -dThe bundled compose stack starts:
-
PostgreSQL on
:5432(data persists in the named volumelastest-pgdata) -
Lastest app on
:3000
Open http://localhost:3000.
Embedded Browser pods are provisioned dynamically by the app. In a single-host Docker Compose deployment they are launched via the kubernetes provisioner against your cluster (
EB_PROVISIONER=kubernetes, see Environment Variables); there is no Compose-only EB fallback.
docker compose up -d # Start in background
docker compose logs -f # View logs
docker compose down # Stop (data persists in `lastest-pgdata`)
docker compose down -v # Stop and wipe the database
docker compose pull # Pull latest image- Based on the official Playwright base image (
mcr.microsoft.com/playwright) - Node.js 20
- Multi-stage build for smaller final image
- Health check via
GET /api/health - Runs as non-root user
- Entrypoint runs
drizzle-kit push --forceon startup (auto-migrates schema)
| Volume | Purpose |
|---|---|
lastest-pgdata |
PostgreSQL data directory |
lastest-screenshots |
Captured screenshots and baselines |
lastest-runs |
Per-build run artefacts (videos, traces, logs) |
SQLite is no longer used. Lastest moved to PostgreSQL with Drizzle ORM in v1.10.
The minimum prod set (see Environment Variables for the complete list):
POSTGRES_PASSWORD=... # Postgres password used by the compose service
DATABASE_URL=postgresql://lastest:${POSTGRES_PASSWORD}@db:5432/lastest
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
SYSTEM_EB_TOKEN=$(openssl rand -hex 32)
EB_PROVISIONER=kubernetes
EB_NAMESPACE=lastest
EB_IMAGE=lastest-embedded-browser:latest
LASTEST_URL=https://your-public-host # URL the EB pods use to reach backpnpm deploy:olares runs two app pods that share state via the database:
| Pod | Purpose |
|---|---|
lastest-dev (envoy-fronted) |
Public traffic via the Olares envoy gateway |
lastest-internal-dev (envoy-less) |
Internal endpoints (EB callbacks, runner WebSocket) without envoy buffering |
Both must be rolled together when deploying. EB pods are scheduled into the same cluster via the lastest namespace -- the manifests live under k8s/ in the repo.
Tests run only inside Embedded Browser pods. Local-Playwright execution on the host is no longer supported -- in any environment (dev or prod) you need:
- A k8s-compatible cluster (k3d for local dev, your real cluster in prod)
- The
lastestnamespace + RBAC fromk8s/ - The
lastest-embedded-browserimage built and reachable to the cluster -
EB_PROVISIONER=kubernetesplus the EB env vars in Environment Variables
For local dev see Getting Started -- the pnpm stack script bootstraps the whole thing.
Lastest Wiki
Getting Started
Core Features
- Visual Diffing
- AI Configuration
- Fix-the-App Advisor
- Agent Monitoring
- Public Shares
- Gamification
- Scheduled Runs
- Bug Reports
- Settings Reference
Integrations
- GitHub Integration
- GitLab Integration
- Google Sheets Integration
- Custom Webhooks
- VSCode Extension API
- MCP Server
Deployment & CI
Administration
Reference