Skip to main content
Deploy Greptile on any Linux server — AWS, GCP, Azure, on-prem, or air-gapped environments. Uses the docker/ directory from the akupara repository.

Prerequisites

OS: Ubuntu 20.04+, Amazon Linux 2023, Debian 11+, RHEL 8+
  • Container registry credentials (CONTAINER_REGISTRY, GREPTILE_TAG)
  • Contact hello@greptile.com
Inbound ports:
  • 3007 — SCM webhooks (must be publicly accessible)
  • 3000 — Web UI
  • 8080 — Hatchet admin (optional)
Outbound access:
  • LLM provider APIs
  • GitHub/GitLab APIs
  • Container registry

Setup

1

Clone repository

2

Configure environment

Edit .env with required values (see Configuration below).
3

Generate secrets

Creates .env.greptile-generated with JWT_SECRET, TOKEN_ENCRYPTION_KEY, LLM_PROXY_KEY.
4

Login to registry

Authenticates with Docker Hub or AWS ECR based on REGISTRY_PROVIDER in .env.
5

Start Hatchet

Wait ~30 seconds for Hatchet to be healthy.
6

Generate Hatchet token

Creates .env.hatchet-generated with HATCHET_CLIENT_TOKEN.
7

Start Greptile

8

Verify

All services should show running or healthy.

Access

Configuration

Required Settings

LLM Provider

GitHub

External Database (Optional)

To use managed PostgreSQL (RDS, Cloud SQL) instead of the bundled container:
PostgreSQL 15+ with pgvector extension required. Run CREATE EXTENSION IF NOT EXISTS vector;

Custom Domain & TLS

1

Point DNS to server IP

Create an A record for your domain pointing to the server’s public IP.
2

Configure Caddy

Edit Caddyfile:
3

Update environment

4

Restart services

Caddy automatically obtains TLS certificates via Let’s Encrypt.

Auto-Start (Systemd)

Install systemd services for automatic startup on boot:

Operations

Access http://<IP>:8080 to view workflow status, queue depth, and failures.

Troubleshooting

  1. Verify IP_ADDRESS is publicly accessible
  2. Check firewall allows inbound on port 3007
  3. Confirm GitHub App webhook URL: http://<IP>:3007/webhook
Verify API keys and endpoint URLs in .env.
Regenerate token and restart:

Resources