Introduction to Temps
Temps is your self-hosted deployment platform that makes it effortless to deploy and manage ANY application - from React frontends to Node.js APIs, Python backends, static sites, and everything in between.
Quick Start
Get Temps up and running with a single command. The provisioning wizard handles everything: Docker, database, SSL certificates, DNS, and the Temps binary.
curl -fsSL https://temps.sh/deploy.sh | bash
The wizard walks you through each step interactively:
- Docker - Installs and verifies Docker Engine
- Database - Sets up TimescaleDB (PostgreSQL) in a Docker container
- Domain & SSL - Provisions your domain and TLS certificates (via Temps Cloud auto-subdomain or your own domain with Let's Encrypt)
- Temps binary - Downloads and configures the Temps server
- Background service - Creates a systemd service so Temps starts on boot
- Verification - Generates an API key and confirms the console is reachable
The wizard supports both Linux (Ubuntu, Debian, RHEL) and macOS. It is idempotent — you can re-run it safely if something fails.
Once complete, open the console URL shown at the end and you're ready to deploy.
Manual Setup (Step by Step)
If you prefer full control, you can install each component yourself.
Prerequisites
- Ubuntu 20.04+ (or any Linux with Docker support)
- Docker installed and running
- A domain pointed to your server (for SSL certificates)
- GitHub token (for deploying from repositories)
- Cloudflare token (optional, for automatic DNS management)
If you don't have Docker installed, run: curl -fsSL https://get.docker.com | sh
Step 1: Start TimescaleDB
Temps requires PostgreSQL with TimescaleDB for analytics. Start it with Docker:
# Create a persistent volume for your database
docker volume create temps-postgres
# Start TimescaleDB (runs on port 16432 to avoid conflicts)
docker run -d \
--name temps-postgres \
--restart unless-stopped \
-v temps-postgres:/var/lib/postgresql/data \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=temps \
-e POSTGRES_DB=temps \
-p 16432:5432 \
timescale/timescaledb:latest-pg18
Wait a few seconds for the database to initialize, then verify it's running:
docker logs temps-postgres
Step 2: Download Temps
Install Temps
curl -LO https://github.com/gotempsh/temps/releases/latest/download/temps-linux-amd64.tar.gz
tar -xzf temps-linux-amd64.tar.gz
sudo mv temps /usr/local/bin/temps
temps --version
Step 3: Run Setup
The setup command configures Temps with your credentials and generates the necessary certificates:
temps setup \
--database-url "postgresql://postgres:temps@localhost:16432/temps" \
--admin-email "[email protected]" \
--wildcard-domain "*.yourdomain.com" \
--github-token "ghp_xxxxxxxxxxxx" \
--dns-provider "cloudflare" \
--cloudflare-token "your-cloudflare-api-token"
- Name
--database-url- Description
PostgreSQL connection string. Temps requires PostgreSQL 14+ with TimescaleDB for analytics.
- Name
--admin-email- Description
Email for the admin account and Let's Encrypt certificate notifications.
- Name
--wildcard-domain- Description
Wildcard domain for your deployments (e.g.,
*.temps.yourdomain.com). Each app gets a subdomain automatically.
- Name
--github-token- Description
GitHub personal access token with
reposcope for cloning repositories.
- Name
--dns-provider- Description
DNS provider for automatic certificate validation. Supported:
cloudflare,route53,digitalocean,manual.
- Name
--cloudflare-token- Description
Cloudflare API token with Zone:DNS:Edit permissions (only needed if using Cloudflare DNS).
Step 4: Start Temps
Start the Temps server:
temps serve \
--database-url "postgresql://postgres:temps@localhost:16432/temps" \
--address 0.0.0.0:80 \
--tls-address 0.0.0.0:443 \
--console-address 0.0.0.0:8081
- Name
--database-url- Description
PostgreSQL connection string. Must match the database URL used in setup.
- Name
--address- Description
HTTP address for redirects and health checks. Default:
0.0.0.0:80
- Name
--tls-address- Description
HTTPS address for secure TLS/SSL traffic. Required for production deployments.
- Name
--console-address- Description
Admin console address. Access the Temps dashboard at this port.
That's it! Open https://temps.yourdomain.com to access the Temps console.
Step 5: Run as a Service (Optional)
To keep Temps running after you log out, create a systemd service:
sudo tee /etc/systemd/system/temps.service > /dev/null <<EOF
[Unit]
Description=Temps Platform
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/temps serve \
--database-url "postgresql://postgres:temps@localhost:16432/temps" \
--address 0.0.0.0:80 \
--tls-address 0.0.0.0:443 \
--console-address 0.0.0.0:8081
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now temps
Troubleshooting
Server hangs on startup
If Temps hangs during startup, it's likely waiting for the screenshot provider to initialize. Disable it with:
export TEMPS_SCREENSHOT_PROVIDER=noop
temps serve --database-url "..." --address 0.0.0.0:80
Database connection issues
Make sure PostgreSQL is running and accessible:
# Test connection
psql "postgresql://postgres:temps@localhost:16432/temps" -c "SELECT 1"
Port already in use
If ports 80 or 443 are already in use (e.g., by nginx or Apache), either stop those services or use different ports:
temps serve \
--database-url "..." \
--address 0.0.0.0:8080 \
--tls-address 0.0.0.0:8443 \
--console-address 0.0.0.0:8081
What Can You Deploy?
Temps supports any application that can run in a container:
| Application Type | Examples | Support |
|---|---|---|
| Frontend Apps | React, Next.js, Vue, Svelte, Angular | Zero-config |
| Backend APIs | Node.js, Python, Go, Rust, Ruby, PHP | Auto-detected |
| Static Sites | Hugo, Jekyll, Gatsby, plain HTML | Optimized serving |
| Full-Stack | Next.js, Nuxt, SvelteKit, Remix | SSR supported |
| Databases | PostgreSQL, Redis, MySQL | Managed services |
| Custom Apps | Anything with a Dockerfile | Full Docker support |
Why Temps?
Self-Hosted - Run on your own infrastructure - Complete data ownership - No vendor lock-in - No usage limits
All-in-One - Analytics built-in - Error tracking (Sentry-compatible) - Session replay - Uptime monitoring
Cost Comparison
Running 5 apps with analytics, error tracking, and monitoring:
| Platform | Monthly Cost |
|---|---|
| Temps (self-hosted) | ~$50 (VPS only) |
| Vercel + Sentry + Analytics | ~$500+ |
| AWS + third-party tools | ~$800+ |