All runtime configuration is injected via environment variables. The backend reads
them at startup from the backend.env file (loaded by Docker Compose via env_file).
The frontend reads a small subset baked in at build time.
Docker Compose variable escaping
In any file loaded with env_file:, literal $ characters must be escaped as $$.
This affects bcrypt hashes ($$2b$$12$$...) and any value containing a dollar sign.
HMAC-SHA256 signing key for JWT tokens. Generate with openssl rand -hex 32. Minimum 32 characters. The application refuses to start in production if this is empty or set to a known-weak default.
JWT_EXPIRE_MINUTES
integer
60
No
Token lifetime in minutes. Tokens expire and must be re-issued after this period. API tokens have their own expiry set at creation time.
ADMIN_USERNAME
string
admin
No
Username of the bootstrap admin account, created automatically on first startup when users.db does not exist.
ADMIN_PASSWORD_HASH
string
β
Yes
bcrypt hash of the admin password. Generate with python -c "from passlib.hash import bcrypt; print(bcrypt.hash('password'))". Escape every $ as $$ in the env file.
TRUSTED_PROXIES
string
127.0.0.1,172.16.0.0/12,192.168.0.0/16
No
Comma-separated list of IP addresses or CIDR ranges trusted to set X-Forwarded-For. Used by the rate limiter (slowapi) to extract the real client IP when behind a reverse proxy.
CORS_ORIGINS
string
http://localhost:3003
No
Comma-separated list of allowed CORS origins. Include your frontend URL in production (e.g. https://repod.example.com).
These variables control where Repod stores its data. The defaults match the Docker
Compose volume mounts and should not be changed unless you know what you are doing.
Variable
Type
Default
Description
POOL_DIR
path
/repos/pool
Directory where validated package binaries are stored. Served read-only by the APT/RPM Nginx container.
MANIFEST_DIR
path
/repos/manifests
Directory for per-package JSON manifests and the central index.json catalog.
STAGING_INCOMING
path
/repos/staging/incoming
Temporary landing zone for uploaded files before validation. Never served over HTTP.
STAGING_QUARANTINE
path
/repos/staging/quarantine
Destination for files that failed validation or were blocked by CVE policy.
AUDIT_DIR
path
/repos/audit
Append-only JSONL audit log files, one per day (YYYY-MM-DD.jsonl).
INDEX_PATH
path
/repos/manifests/index.json
Path to the central package index JSON file.
INDEX_DIR
path
/repos/package-index
Directory for the SQLite package index database (packages.db) used by the import and sync features.
IMPORTS_DIR
path
/repos/imports
Working directory for packages imported from external sources.
AUTH_DB_PATH
path
/repos/auth/users.db
SQLite database for user accounts. Created automatically on first startup.
React environment variables prefixed with REACT_APP_ are embedded in the
JavaScript bundle at docker build time. Changing them after the image is
built has no effect. Pass them as Docker Compose build.args.
Variable
Default
Description
REACT_APP_API_URL
http://localhost:8000
Base URL of the backend API. In production, set this to the public URL of the backend (e.g. https://repod.example.com if Nginx proxies /api/ to the backend). If left empty (""), the frontend uses relative URLs and relies on the Nginx reverse proxy.
REACT_APP_REPO_URL
http://localhost:80
Base URL of the repository server shown to users in client setup instructions.