Manual Deployment
Write your own compose.yml and .env, then run docker compose up. Use this path when you need full control: external MongoDB, custom networking, or organization-specific compose conventions. For a guided install that asks for each setting, see Automatic Deployment.
On-Premises Installation
The Operaide container image is distributed through a customer-specific registry. Operaide provides the registry URL and credentials as part of customer onboarding. Authenticate Docker once before installing:
docker login <your-registry>
You set the registry URL as OPERAIDE_IMAGE in your .env file (Step 2 below).
Step 1: Prepare Docker Compose
Create a compose.yml file. This uses Operaide's embedded MongoDB — a single container runs both the application and the database.
name: operaide
services:
app:
image: ${OPERAIDE_IMAGE}:${TAG}
ports:
# IMPORTANT: the host and container port MUST be the same.
- "${PORT:-7077}:${PORT:-7077}"
restart: always
deploy:
resources:
limits:
cpus: "2"
memory: 4096M
volumes:
- app:/app/bundle/programs/server/assets/app/
- uploads:/srv/uploads
- data:/data
- mongodb:/mongodb
environment:
ROOT_URL: ${ROOT_URL}
PORT: ${PORT:-7077}
NO_REGISTRATION: ${NO_REGISTRATION:-false}
MAIL_URL: ${MAIL_URL}
ENVCFG_MAIL_SENDER: ${MAIL_SENDER}
METEOR_APP_ROOT: /srv
# Audit Service
OPERAIDE_AUDITING_TOKEN: ${OPERAIDE_AUDITING_TOKEN}
OPERAIDE_AUDITING_URL: https://audit.operaide.ai
# MONGO_URL is not set — Operaide uses its embedded MongoDB.
# To use an external MongoDB instead, see "External MongoDB" below.
# Proxy (optional — uncomment if behind a corporate proxy)
# HTTP_PROXY: ${HTTP_PROXY}
# HTTPS_PROXY: ${HTTPS_PROXY}
# NO_PROXY: ${NO_PROXY:-localhost,127.0.0.1}
volumes:
app:
uploads:
data:
mongodb:
The application listens on port 7077 by default. The host and container port must match, because ROOT_URL is used to generate absolute URLs served to clients.
The Operaide image is published as a multi-architecture manifest (linux/amd64 and linux/arm64). Docker selects the matching architecture automatically on x86_64 and ARM hosts, so no platform: override is needed.
Step 2: Configure Environment Variables
Create a .env file next to compose.yml:
# Required
OPERAIDE_IMAGE=<your-registry>/op-no-gravity-operaide
TAG=operaide-v3.0.5
ROOT_URL=https://operaide.your-domain.com
PORT=7077
MAIL_URL=smtp://user:password@smtp.your-domain.com:587
MAIL_SENDER=Operaide <noreply@your-domain.com>
# Audit Service
OPERAIDE_AUDITING_TOKEN=oprd_your-token-here
# Optional
NO_REGISTRATION=false # Set to 'true' to disable self-registration
# First-user admin bootstrap (required for first install)
# Lets the first user matching this regex self-promote to Super Admin via
# the Profile menu (Step 4). Without it, the toggle is hidden and no one
# can become admin. May be cleared after the first admin exists.
MAKE_FIRST_USER_ADMIN_REGEX=^.*@your-company\.com$
# Proxy (optional — uncomment if behind a corporate proxy)
# HTTP_PROXY=http://proxy.company.com:8080
# HTTPS_PROXY=http://proxy.company.com:8080
# NO_PROXY=localhost,127.0.0.1,.internal.company.com
AI provider credentials (OpenAI, Azure OpenAI, Anthropic, etc.) and external connections (Firecrawl, ERP systems) are configured through the Operaide UI after installation — no environment variables needed.
Step 3: Start the Application
docker compose up -d
Step 4: Initial Setup
- Open your browser and navigate to your
ROOT_URL. - Register with an email matching
MAKE_FIRST_USER_ADMIN_REGEX(set in Step 2). - Open the Profile menu (top right). Toggle yourself to System Admin and Super Admin. The toggles are visible because your email matched the regex.
- Open Settings, then Registration. Set the email-domain regex so subsequent users attach to your organization (see Auto-Attach New Sign-Ins to an Organization).
Step 5: Configure AI Provider
- Navigate to AI Provider in the sidebar
- Click Add Provider
- Select your provider (Azure OpenAI, OpenAI, Anthropic, etc.)
- Enter your API credentials
- Test the connection and save
Step 6: Configure Connections (Optional)
Set up external system connections under Connections:
- Web scraping services (e.g., Jina AI)
- ERP systems
- Custom APIs
Registration Settings
Control user registration via the NO_REGISTRATION environment variable:
| Value | Behavior |
|---|---|
false | Users can self-register (default) |
true | Users must be invited by an admin |
For fine-grained control, use the Automatic Registration regex pattern in organization settings.
First-User Admin Promotion
MAKE_FIRST_USER_ADMIN_REGEX is a one-shot bootstrap mechanism. It applies only to the very first user in the database. That first user, if matching the pattern, gets the Profile-menu toggle to self-promote to System Admin and Super Admin (Step 4).
Subsequent registrations are unaffected by this regex, even if their email matches. Manage all further admin assignments through the Operaide UI (User Management), not by changing this variable. After the first admin exists, you may clear the variable from your .env.
Auto-Attach New Sign-Ins to an Organization
Set an email-domain regex on each organization so new registrations can be attached. Without it, sign-ins succeed at the identity provider but stall on the login page because no organization claims the user.
- Open the organization, then Settings, then Registration (path:
/settings/automatic-registration). - Set the email-domain regex to match your users' emails, for example
^.*@your-company\.(de|com)$. - Save.
See Auto-Provisioning for the full rule and failure modes. To give every new user their own organization instead of attaching them to an existing one, set CREATE_NEW_ORGANIZATION_FOR_EVERY_NEW_USER=true (see Per-user organizations).
Optional Settings
Additional environment variables with working defaults. Set them only to change the default behavior.
| Variable | Purpose | Default |
|---|---|---|
CONTACT_EMAIL | Support address shown to users in account emails. | info@<company domain> |
EMAIL_VALIDATION_RGEX | Overrides the email-format check in the sign-in, registration, and password-reset forms. Empty uses the built-in email regex. | built-in regex |
For runtime tuning (health checks, Content Security Policy, embedded MongoDB cache, Studio session timeout), see Runtime Configuration.
Updating Operaide
To update to a newer version:
- Run a backup. See Backup and Restore
- Update the
TAGin your.envfile - Pull the new image:
docker compose pull - Restart:
docker compose up -d