Deployment
Everything runs from one prebuilt image: ghcr.io/diegoparras/escriba:latest.
It bundles ffmpeg, Tesseract OCR, Whisper and an embedded Redis — no extra services.
- Project → + Service → App, then set Source → Docker Image to
ghcr.io/diegoparras/escriba:latest. - Add your environment variables (see Configuration).
- Under Domains, set Container Port
8000, add your domain and enable HTTPS. - Deploy.
git clone https://github.com/diegoparras/escriba.gitcd escribacp .env.example .env # set your secretsdocker compose up -d --buildStacks → Add stack → Repository using
https://github.com/diegoparras/escriba and compose path docker-compose.yml
(or paste the compose file in the web editor). Set the environment variables and
deploy; the app listens on port 8000.
Create Application → GitHub (repo diegoparras/escriba) with Build Type:
Dockerfile, add your environment variables, set the domain to Container Port
8000 with HTTPS, and deploy.
docker build -t escriba .docker run -d --name escriba --restart unless-stopped -p 8000:8000 \-e SECRET_KEY="$(openssl rand -hex 32)" -e GOD_PASSWORD="change-me" escribaFor TLS, put a reverse proxy in front. Example Caddyfile (automatic HTTPS):
example.com { reverse_proxy localhost:8000}With Nginx, proxy to localhost:8000 and raise client_max_body_size for large uploads.
Anonymization service
Section titled “Anonymization service”To enable PII anonymization, run the internal Anonimal
service alongside Escriba and point ANONIMAL_URL at it (e.g.
http://anonimal:8000). Leave ANONIMAL_URL empty to hide the feature entirely.
Performance
Section titled “Performance”By default the app spawns one worker per CPU core, so it adapts to any host
(a 1-core VPS → 1 worker; a 24-thread server → 24). Each worker uses ~250 MB of RAM;
set WEB_CONCURRENCY to a fixed number to cap it.