Environment Variables
All environment variables used by the Savannah Cloud API server.
Create a .env file at the project root. Docker Compose reads it automatically.
Never commit JWT_SECRET to version control. Generate a new one per environment:
# Linux / WSL / macOS
openssl rand -hex 32
# PowerShell
[Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Max 256 }))
| Variable | Required | Description |
|---|
JWT_SECRET | Yes | Secret for signing JWTs. Use a long random string in production. |
DATABASE_URL | Auto (Docker) | PostgreSQL DSN. Set by docker-compose. |
REDIS_URL | Auto (Docker) | Redis URL. Set by docker-compose. |
| Variable | Default | Description |
|---|
APP_URL | https://api.savannahcloud.com | Base URL for invite/email links. |
| Variable | Required | Description |
|---|
RESEND_API_KEY | Yes (email) | Resend API key for transactional email. |
EMAIL_FROM | Savannah Cloud <noreply@savannahcloud.com> | Sender address. |
| Variable | Required | Description |
|---|
AT_API_KEY | Yes (SMS) | Africa's Talking API key. |
AT_USERNAME | Yes (SMS) | Africa's Talking username (e.g. allan711). |
| Variable | Description |
|---|
GITHUB_TOKEN | GitHub PAT for deployment triggers and repo access. |
GITHUB_WEBHOOK_SECRET | HMAC secret for validating GitHub webhook payloads. |
| Variable | Default | Description |
|---|
R2_ENDPOINT | — | Cloudflare R2 endpoint URL. |
R2_ACCESS_KEY_ID | — | R2 access key. |
R2_SECRET_ACCESS_KEY | — | R2 secret key. |
R2_BUCKET | savannah-cloud | R2 bucket name. |
| Variable | Description |
|---|
ENCRYPTION_KEY | Key for encrypting stored secrets (deployment env vars). |
| Variable | Default | Description |
|---|
PDNS_API_URL | http://pdns:8081 | PowerDNS API endpoint. Set by docker-compose. |
PDNS_API_KEY | — | PowerDNS REST API key. |
| Variable | Description |
|---|
PAYSTACK_SECRET_KEY | Paystack secret key. |
PAYSTACK_PUBLIC_KEY | Paystack public key. |
JWT_SECRET=6a8f2c9b1e7d4a3f0c5b8e2d9a6f3c1b4e7d2a5f8c1b4e7d2a5f8c1b4e7d2a5
DATABASE_URL=postgres://taskqueue:strongpassword@localhost:5432/taskqueue?sslmode=require
REDIS_URL=redis://:redispassword@localhost:6379
APP_URL=https://api.savannahcloud.com
RESEND_API_KEY=re_xxxxxxxxxxxx
EMAIL_FROM=Savannah Cloud <noreply@savannahcloud.com>
AT_API_KEY=atsk_xxxxxxxxxxxx
AT_USERNAME=allan711
GITHUB_TOKEN=ghp_xxxxxxxxxxxx
R2_ENDPOINT=https://xxxx.r2.cloudflarestorage.com
R2_ACCESS_KEY_ID=xxxxxxxxxxxx
R2_SECRET_ACCESS_KEY=xxxxxxxxxxxx
R2_BUCKET=savannah-cloud
ENCRYPTION_KEY=xxxxxxxxxxxx
PDNS_API_KEY=changeme
PAYSTACK_SECRET_KEY=sk_live_xxxxxxxxxxxx
PAYSTACK_PUBLIC_KEY=pk_live_xxxxxxxxxxxx