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

Team SizeCPURAMStorage
5-10 devs4 cores16GB100GB
~50 devs8 cores32GB200GB
100 devs32 cores128GB500GB
OS: Ubuntu 20.04+, Amazon Linux 2023, Debian 11+, RHEL 8+
  • Container registry credentials (CONTAINER_REGISTRY, GREPTILE_TAG)
  • Contact [email protected]
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

git clone https://github.com/greptileai/akupara.git
cd akupara/docker
2

Configure environment

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

Generate secrets

./bin/generate-secrets.sh
Creates .env.greptile-generated with JWT_SECRET, TOKEN_ENCRYPTION_KEY, LLM_PROXY_KEY.
4

Login to registry

./bin/login-registry.sh
Authenticates with Docker Hub or AWS ECR based on REGISTRY_PROVIDER in .env.
5

Start Hatchet

./bin/start-hatchet.sh
Wait ~30 seconds for Hatchet to be healthy.
6

Generate Hatchet token

./bin/generate-hatchet-token.sh
Creates .env.hatchet-generated with HATCHET_CLIENT_TOKEN.
7

Start Greptile

./bin/start-greptile.sh
8

Verify

docker compose ps
All services should show running or healthy.

Access

ServiceURL
Web UIhttp://<IP_ADDRESS>:3000
Hatchet Adminhttp://<IP_ADDRESS>:8080

Configuration

Required Settings

# Container registry (from Greptile)
REGISTRY_PROVIDER='dockerhub'  # or 'ecr'
CONTAINER_REGISTRY='xxx'
GREPTILE_TAG='xxx'

# Server IP (for webhook callbacks)
IP_ADDRESS='your.server.public.ip'

LLM Provider

ANTHROPIC_BASE_URL='https://api.anthropic.com'
ANTHROPIC_KEY='sk-ant-...'
OPENAI_API_BASE_URL='https://api.openai.com/v1/'
OPENAI_KEY='sk-...'
AZURE_OPENAI_URL='https://your-resource.openai.azure.com/'
AZURE_OPENAI_KEY='xxx'
AZURE_OPENAI_API_VERSION='2024-07-18'
AWS_ACCESS_KEY_ID='AKIA...'
AWS_SECRET_ACCESS_KEY='xxx'
AWS_REGION='us-east-1'

GitHub

GITHUB_ENABLED='true'
GITHUB_ENTERPRISE_ENABLED='false'
GITHUB_APP_ID='123456'
GITHUB_CLIENT_ID='Iv1.xxx'
GITHUB_CLIENT_SECRET='xxx'
GITHUB_PRIVATE_KEY='-----BEGIN RSA PRIVATE KEY-----...'
WEBHOOK_SECRET='xxx'
GITHUB_ENABLED='false'
GITHUB_ENTERPRISE_ENABLED='true'
GITHUB_ENTERPRISE_URL='https://github.yourcompany.com'
GITHUB_ENTERPRISE_API_URL='https://github.yourcompany.com/api/v3/'
GITHUB_APP_ID='123456'
GITHUB_CLIENT_ID='Iv1.xxx'
GITHUB_CLIENT_SECRET='xxx'
GITHUB_PRIVATE_KEY='-----BEGIN RSA PRIVATE KEY-----...'
WEBHOOK_SECRET='xxx'

External Database (Optional)

To use managed PostgreSQL (RDS, Cloud SQL) instead of the bundled container:
DB_HOST='your-database-endpoint'
DB_PORT='5432'
DB_USER='greptile'
DB_PASSWORD='xxx'
DB_NAME='greptile'
DB_SSL_DISABLE='false'
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

cp Caddyfile.example Caddyfile
Edit Caddyfile:
greptile.yourcompany.com {
    reverse_proxy greptile-web:3000
}

greptile.yourcompany.com:3007 {
    reverse_proxy greptile-webhook:3007
}
3

Update environment

IP_ADDRESS='greptile.yourcompany.com'
APP_URL='https://greptile.yourcompany.com'
4

Restart services

docker compose up -d
Caddy automatically obtains TLS certificates via Let’s Encrypt.

Auto-Start (Systemd)

Install systemd services for automatic startup on boot:
sudo cp systemd/*.service /etc/systemd/system/
sudo cp systemd/*.timer /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable greptile-hatchet greptile-app
sudo systemctl start greptile-hatchet greptile-app
ServicePurpose
greptile-hatchet.serviceStarts Hatchet stack
greptile-app.serviceStarts Greptile services
greptile-images.timerPeriodic image updates

Operations

docker compose logs -f                # All services
docker compose logs -f greptile-api   # Specific service
docker compose restart greptile-api
./bin/login-registry.sh
docker compose pull
docker compose up -d
Access http://<IP>:8080 to view workflow status, queue depth, and failures.

Troubleshooting

docker compose config          # Validate compose file
docker compose logs <service>  # Check specific service logs
sudo systemctl status docker   # Check Docker daemon
  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
docker compose logs greptile-llmproxy
Verify API keys and endpoint URLs in .env.
Regenerate token and restart:
./bin/generate-hatchet-token.sh
docker compose restart
docker compose exec greptile-api nc -zv $DB_HOST 5432

Resources