Sign In

On-Premise Installation

Running Labelixa on your own server: environment variables, Docker deployment, custom fonts and the stateless architecture.

The rendering service is deliberately stateless: incoming ZPL is never written to disk or logged. This matters for data protection (GDPR) and makes horizontal scaling easy — you just add workers or servers.

Environment variables

VariablePurposeDefault
LABELIXA_DBSQLite database path (account/usage)./labelixa.db
DATABASE_URLPostgreSQL connection (instead of SQLite)none
LABELIXA_FONTCustom text font (TTF path)Liberation Sans Bold
STRIPE_SECRET_KEYStripe secret key (subscriptions)none
STRIPE_WEBHOOK_SECRETStripe webhook signing secretnone
STRIPE_PRICE_STARTERStripe price ID for the Starter plannone
STRIPE_PRICE_PROStripe price ID for the Professional plannone
STRIPE_PRICE_ENTERPRISEEnterprise (on-prem) price IDnone
STRIPE_PRICE_*_YEARLYAnnual price IDs for the plansnone
SITE_URLCanonical domain on SEO pagesfrom the request
CORS_ORIGINSAllowed origins (comma-separated)* (everyone)
LABELIXA_VEKILReverse-proxy topology (which identity header is trusted); set to 'genel' unless you run behind Cloudflarecloudflare
LOG_JSONOne JSON object per log line0
LOG_LEVELLog level (DEBUG|INFO|WARNING|ERROR)INFO
METRICS_TOKENEnables the Prometheus /metrics endpoint (closed without it)none
WEB_CONCURRENCYuvicorn worker count2

Running with Docker

The Dockerfile in the repository root builds a single image:

bash
docker build -t labelixa .
docker run -p 8000:8000 \
  -e LABELIXA_DB=/data/labelixa.db \
  -e LABELIXA_FONT=/fonts/MyFont.ttf \
  -v $PWD/data:/data -v $PWD/fonts:/fonts labelixa

Custom font

Zebra's built-in fonts (font 0 = CG Triumvirate Bold Condensed) are proprietary and are not part of the ZPL code; the ZPL only carries the font's number, height and width. By default the closest open font by width, Liberation Sans Bold, is used. If you need the output to match down to the stroke weight, define your licensed font with LABELIXA_FONT and the engine uses it for all text. If the path is wrong the service does not silently fall back — the font.sorun field and the status page warn you.

Health check

GET /health returns the component status as JSON; /durum is a human-readable status page. /health can be used for load-balancer health probes.