OpenAI-compatible AI gateway with admin UI, multi-provider routing, usage & licensing
826
OpenAI-compatible AI gateway by OneSystems GmbH.
OneAI sits in front of your LLM providers with a clean admin UI, customer portal, usage tracking, and an OpenAI-compatible /v1 API. One Docker image covers the HTTP API, admin UI, and optional batch worker.
| Vendor | OneSystems GmbH |
| Product | onesystems.ch/produkte/onetools/oneai |
| License / shop | my.onesystems.ch/store/onetools/oneai |
| Support | Submit a ticket |
| Image | onesystems/oneai on Docker Hub |
OneAI ships as one Docker image. Without a license key the instance runs as Community. Activate a Pro key under System → License to unlock additional features.
| Community | Pro | |
|---|---|---|
| Admin UI & customer portal | ✓ | ✓ |
OpenAI-compatible /v1 gateway | ✓ | ✓ |
| Ollama provider (1 provider / 1 model) | ✓ | ✓ |
| Users, MFA, local login | ✓ | ✓ |
| Health check & Prometheus metrics | ✓ | ✓ |
| Multi-provider (OpenAI, Anthropic, Ollama, OpenAI-compatible) | ✓ | |
| Unlimited providers & models, aliases, fallback | ✓ | |
| Usage tracking, billing & sell prices | ✓ | |
| WHMCS / provisioning API | ✓ | |
System API tokens (oas_…) | ✓ | |
| Usage reports by email | ✓ | |
| OpenID Connect (SSO) | ✓ |
Order or renew Pro at the shop.
During license verification the following are sent:
ONEAI_PUBLIC_URL (full URL; localhost is allowed)https://tools.onesystems.ch/api/tools/my-ipdocker pull onesystems/oneai:1.0.0
Tags: <version> and 1.0 (releases do not use latest).
The image includes the HTTP API, admin UI, customer portal, and the batch worker binary (serve / worker).
Same product and image — only persistence and background jobs change.
| Mode | Typical use | Database | Redis / worker |
|---|---|---|---|
| Standard | Gateway + UI | PostgreSQL | Optional |
| Batch | Async OpenAI Batch API | PostgreSQL | Redis + worker command |
Images and audio run synchronously without Redis. The Batch API (/v1/batches) requires Redis and a second container with command: ["worker"].
services:
postgres:
image: postgres:17-alpine
environment:
POSTGRES_USER: oneai
POSTGRES_PASSWORD: "change-me"
POSTGRES_DB: oneai
volumes:
- postgres_data:/var/lib/postgresql/data
oneai:
image: onesystems/oneai:1.0.0
user: "1000:1000"
command: ["serve"]
depends_on:
- postgres
environment:
TZ: Europe/Zurich
ONEAI_ENV: production
ONEAI_PUBLIC_URL: https://ai.example.com
ONEAI_MASTER_KEY: "change-me-to-a-long-random-secret!!"
ONEAI_ADMIN_EMAIL: [email protected]
ONEAI_ADMIN_PASSWORD: "change-me-strong-password"
ONEAI_ADMIN_NAME: Administrator
ONEAI_TRUSTED_PROXIES: "10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
POSTGRES_HOST: postgres
POSTGRES_PORT: "5432"
POSTGRES_USER: oneai
POSTGRES_PASSWORD: "change-me"
POSTGRES_DB: oneai
POSTGRES_SSLMODE: disable # use require when TLS is available
volumes:
- oneai_data:/data
ports:
- "8090:8080"
volumes:
oneai_data:
postgres_data:
docker compose up -d
| URL | Description |
|---|---|
/admin/ | Admin UI |
/api/health | Health check |
/v1/ | OpenAI-compatible API |
/docs | OpenAPI / Swagger |
/metrics | Prometheus metrics |
The bootstrap admin from ONEAI_ADMIN_* is created only when no users exist. Changing those variables later does not update an existing account.
ONEAI_REDIS_ENABLED=true and a strong REDIS_PASSWORD on the oneai service.command: ["worker"]: redis:
image: redis:7-alpine
command: ["redis-server", "--requirepass", "change-me-redis"]
volumes:
- redis_data:/data
oneai-worker:
image: onesystems/oneai:1.0.0
user: "1000:1000"
command: ["worker"]
depends_on:
- redis
- oneai
environment:
ONEAI_ENV: production
ONEAI_MASTER_KEY: "same-as-server"
ONEAI_REDIS_ENABLED: "true"
REDIS_HOST: redis
REDIS_PORT: "6379"
REDIS_PASSWORD: "change-me-redis"
POSTGRES_HOST: postgres
POSTGRES_USER: oneai
POSTGRES_PASSWORD: "change-me"
POSTGRES_DB: oneai
Point the oneai service at the same Redis settings. Without Redis AUTH outside development, the app refuses to start.
| Command | Purpose |
|---|---|
serve (default) | HTTP API + admin UI + portal |
worker | Asynq worker for Batch API jobs (requires Redis) |
help | Usage |
docker compose exec oneai oneai help
/v1/chat/completions, /v1/embeddings, /v1/responses/v1/images/generations|edits|variations/v1/audio/speech|transcriptions|translations/v1/files, /v1/batches (Batch needs Redis + worker)Authenticate with project API keys (sk-… style) issued in the admin UI or portal.
/v1 for apps that already speak the OpenAI protocoloas_…)ONEAI_MASTER_KEY)| Variable | Description | Default |
|---|---|---|
TZ | Timezone | Europe/Zurich |
ONEAI_ENV | development / production | development |
ONEAI_HOST | Listen address | 0.0.0.0 |
ONEAI_PORT | Listen port inside the container | 8080 |
ONEAI_PUBLIC_URL | Public base URL (license domain, links, OIDC redirect base) | — |
ONEAI_DATA_DIR | Persistent data directory | /data |
ONEAI_MASTER_KEY | Encryption key for secrets (required, non-default in production; min. 32 characters) | — |
ONEAI_TRUSTED_PROXIES | Comma-separated CIDRs trusted for X-Forwarded-* | empty |
ONEAI_COOKIE_SECURE | Secure session cookie | true when ONEAI_ENV=production |
ONEAI_SESSION_TTL | Session lifetime (sliding) | 24h |
ONEAI_SESSION_ABSOLUTE_TTL | Hard session lifetime cap | 24h |
ONEAI_SESSION_COOKIE | Cookie name | oneai_session |
ONEAI_MAX_UPLOAD_BYTES | Max /v1/files upload size | 104857600 (100 MiB) |
ONEAI_API_KEY_RATE_LIMIT | API key requests per window | 60 |
ONEAI_API_KEY_RATE_WINDOW | Rate-limit window | 1m |
ONEAI_OIDC_ONLY | Disable password login (SSO only; Pro) | false |
| Variable | Description |
|---|---|
ONEAI_ADMIN_EMAIL | Admin email |
ONEAI_ADMIN_PASSWORD | Admin password (must not be a known default in production) |
ONEAI_ADMIN_NAME | Display name |
| Variable | Description | Default |
|---|---|---|
POSTGRES_HOST | Database host | postgres |
POSTGRES_PORT | Port | 5432 |
POSTGRES_USER | Username | oneai |
POSTGRES_PASSWORD | Password (required outside development) | — |
POSTGRES_DB | Database name | oneai |
POSTGRES_SSLMODE | SSL mode | disable |
| Variable | Description | Default |
|---|---|---|
ONEAI_REDIS_ENABLED | Enable Redis | false |
REDIS_HOST | Redis host | redis |
REDIS_PORT | Port | 6379 |
REDIS_PASSWORD | Password (required outside development when Redis enabled) | — |
REDIS_DB | DB index | 0 |
ONEAI_WORKER_CONCURRENCY | Worker concurrency | 10 |
ONEAI_WORKER_QUEUES | Queue weights | critical=6,default=3,low=1 |
| Variable | Description |
|---|---|
ONEAI_SMTP_ENABLED | true to enable |
ONEAI_SMTP_HOST | SMTP host |
ONEAI_SMTP_PORT | Port (default 587) |
ONEAI_SMTP_USERNAME | Username |
ONEAI_SMTP_PASSWORD | Password |
ONEAI_SMTP_FROM | Sender, e.g. OneAI <[email protected]> |
ONEAI_SMTP_TLS | TLS (true / false) |
Configure issuer, client ID/secret (and options) in System → SSO. Redirect URI:
{ONEAI_PUBLIC_URL}/api/auth/oidc/callback
Local admin password login remains available as break-glass unless ONEAI_OIDC_ONLY=true.
/admin/ and sign in with the bootstrap admin (or complete setup if prompted)./v1/chat/completions.ONEAI_ENV=production and a unique ONEAI_MASTER_KEY (long random string, ≥ 32 characters). Losing the key means encrypted secrets cannot be recovered./data on a volume; back up the volume and the master key together.ONEAI_TRUSTED_PROXIES to your edge CIDRs.POSTGRES_SSLMODE=require when the database supports TLS.REDIS_PASSWORD when Redis is enabled.oas_…) and project API keys if leaked.ONEAI_OIDC_ONLY=true only after OIDC is configured and Pro is active.curl -fsS https://ai.example.com/api/health
A healthy response includes "status":"ok" and database connectivity (and Redis when enabled).
OneSystems GmbH
[email protected]
© OneSystems GmbH. Distributed as container images via Docker Hub.
Community edition is free to run; Pro unlocks additional features via a license key from the OneSystems shop.
For OEM or special licensing, contact OneSystems GmbH.
Content type
Image
Digest
sha256:e4f870c3b…
Size
43.5 MB
Last updated
about 1 month ago
docker pull onesystems/oneai:1.0