Savannah Cloud

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 }))

Core (Required)

VariableRequiredDescription
JWT_SECRETYesSecret for signing JWTs. Use a long random string in production.
DATABASE_URLAuto (Docker)PostgreSQL DSN. Set by docker-compose.
REDIS_URLAuto (Docker)Redis URL. Set by docker-compose.

Application

VariableDefaultDescription
APP_URLhttps://api.savannahcloud.comBase URL for invite/email links.

Email (Resend)

VariableRequiredDescription
RESEND_API_KEYYes (email)Resend API key for transactional email.
EMAIL_FROMSavannah Cloud <noreply@savannahcloud.com>Sender address.

SMS (Africa's Talking)

VariableRequiredDescription
AT_API_KEYYes (SMS)Africa's Talking API key.
AT_USERNAMEYes (SMS)Africa's Talking username (e.g. allan711).

GitHub

VariableDescription
GITHUB_TOKENGitHub PAT for deployment triggers and repo access.
GITHUB_WEBHOOK_SECRETHMAC secret for validating GitHub webhook payloads.

Cloudflare R2 (Deployment Artefacts)

VariableDefaultDescription
R2_ENDPOINTCloudflare R2 endpoint URL.
R2_ACCESS_KEY_IDR2 access key.
R2_SECRET_ACCESS_KEYR2 secret key.
R2_BUCKETsavannah-cloudR2 bucket name.

Security

VariableDescription
ENCRYPTION_KEYKey for encrypting stored secrets (deployment env vars).

DNS (PowerDNS)

VariableDefaultDescription
PDNS_API_URLhttp://pdns:8081PowerDNS API endpoint. Set by docker-compose.
PDNS_API_KEYPowerDNS REST API key.

Billing (Paystack)

VariableDescription
PAYSTACK_SECRET_KEYPaystack secret key.
PAYSTACK_PUBLIC_KEYPaystack public key.

Production .env Example

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

On this page