Docker Run¶
The simplest way to get GitEcho running with a single command.
Basic Setup¶
docker run -d \
--name gitecho \
-p 3000:3000 \
-e MASTER_KEY="$(openssl rand -hex 32)" \
-v gitecho-data:/data \
-v gitecho-config:/config \
-v gitecho-backups:/backups \
ghcr.io/tobihochzwei/gitecho:latest
Then open http://localhost:3000, sign in with admin / admin, and configure providers via the Settings UI.
With Environment Variable Fallbacks¶
If you prefer a fully declarative deployment without using the Settings UI:
docker run -d \
--name gitecho \
-p 3000:3000 \
-e MASTER_KEY="$(openssl rand -hex 32)" \
-e GITHUB_PAT="ghp_xxxxxxxxxxxx" \
-e GITHUB_PAT_EXPIRES="2026-06-01" \
-e BACKUP_MODE="option1" \
-e CRON_SCHEDULE="0 2 * * *" \
-e TZ="Europe/Berlin" \
-v gitecho-data:/data \
-v gitecho-config:/config \
-v gitecho-backups:/backups \
ghcr.io/tobihochzwei/gitecho:latest
With Bind Mounts¶
To use host directories instead of Docker volumes:
docker run -d \
--name gitecho \
-p 3000:3000 \
-e MASTER_KEY="your-64-hex-char-key" \
-e PUID="$(id -u)" \
-e PGID="$(id -g)" \
-v /path/to/data:/data \
-v /path/to/config:/config \
-v /path/to/backups:/backups \
ghcr.io/tobihochzwei/gitecho:latest
Tip
Set PUID and PGID to your host user's UID/GID when using bind mounts so the container can read and write the mounted directories.
Mount Points¶
| Path | Purpose |
|---|---|
/data |
SQLite database (gitecho.db), structured log file (gitecho.log + rotated archives), storage-usage cache, sync metadata |
/config |
repos.txt (repository list), settings.json (non-secret settings), secrets.json (AES-256-GCM-encrypted PATs and SMTP password) |
/backups |
Cloned repositories (option1), ZIP archives (option2), or bare mirror + ZIP snapshots (option3) |
Container Image¶
GitEcho is published as a multi-arch image (amd64 + arm64) on GitHub Container Registry:
Pin your image tags
For production use, pin to a specific version tag (e.g., ghcr.io/tobihochzwei/gitecho:0.2.1) instead of :latest.