SoxAIDocs
Self-Hosted

Self-Hosted Quickstart

Deploy SoxAI on your own server in under 10 minutes — no registration required for Community edition

Self-Hosted Quickstart

Community edition is free forever — no registration, no license file. Pull the images, configure two environment variables, and start.

Requirements:

  • Linux server with Docker and Docker Compose installed
  • 2 GB RAM minimum, 4 GB recommended
  • Outbound internet access (to reach AI providers)

Step 1 — Create the deployment directory

mkdir ~/soxai && cd ~/soxai

Step 2 — Create docker-compose.yml

Save the following as docker-compose.yml:

services:
  migrate:
    image: ghcr.io/onedotnet/soxai-server:latest
    command: ["migrate", "up"]
    env_file: .env
    restart: on-failure
    depends_on:
      db:
        condition: service_healthy

  server:
    image: ghcr.io/onedotnet/soxai-server:latest
    restart: unless-stopped
    env_file: .env
    ports:
      - "8080:8080"
    # Pro/Enterprise: uncomment to mount your license file
    # volumes:
    #   - ./soxai.lic:/etc/soxai/license.lic:ro
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:8080/healthz || exit 1"]
      interval: 5s
      timeout: 5s
      retries: 12
      start_period: 30s
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
      migrate:
        condition: service_completed_successfully

  console:
    image: ghcr.io/onedotnet/soxai-console:latest
    restart: unless-stopped
    env_file: .env
    ports:
      - "3000:3000"
    depends_on:
      server:
        condition: service_healthy

  gateway:
    image: ghcr.io/onedotnet/soxai-gateway:latest
    restart: unless-stopped
    env_file: .env
    ports:
      - "8081:8081"
    depends_on:
      server:
        condition: service_healthy

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: soxai
      POSTGRES_USER: soxai
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U soxai"]
      interval: 5s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    volumes:
      - redisdata:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5

volumes:
  pgdata:
  redisdata:

Step 3 — Create .env

# Required: set all three before starting
POSTGRES_PASSWORD=change_me_now

# JWT signing secret — generate with: openssl rand -hex 32
JWT_SECRET=

# Public URL of your console (used in email links)
# Example: https://console.yourdomain.com  or  http://YOUR_SERVER_IP:3000
BASE_URL=http://localhost:3000

# Public gateway URL (shown to API users in the console)
NEXT_PUBLIC_GATEWAY_URL=http://localhost:8081

# Internal — keep these pointing at localhost
# Set DATABASE_URL password to match POSTGRES_PASSWORD above
DATABASE_URL=postgres://soxai:change_me_now@db:5432/soxai?sslmode=disable
REDIS_URL=redis://redis:6379
BACKEND_URL=http://server:8080

The only required changes are POSTGRES_PASSWORD, JWT_SECRET, and the password in DATABASE_URL (must match POSTGRES_PASSWORD). Everything else can be left as-is for a local or LAN deployment.


Step 4 — Start

docker compose up -d

The migrate service runs all database migrations before the server starts. Watch progress with:

docker compose logs -f server
# Wait for: "server started on :8080"

Verify everything is up:

docker compose ps
# All services should show "healthy", "Up", or "Exited (0)" for migrate

curl http://localhost:8080/healthz
# {"status":"ok","license":"community"}

Step 5 — Log in and configure

Open the console at http://localhost:3000 (or your server's IP).

The default admin account is created automatically by the first migration:

FieldValue
Email[email protected]
Passwordsox@123456

Change the password immediately after first login: My Account → Security → Change Password.

From the admin console you can:

  1. Add channels — connect to OpenAI, Anthropic, Azure, or any other provider under Admin → Channels
  2. Invite users — under Admin → Users
  3. Set quotas — configure per-user or per-team limits under Admin → Quota

Community tier limits

LimitValue
UsersUnlimited
Channels10
Tenants1
DLP scanning✓ Included
OAuth login (GitHub, Google)✓ Included

Need more channels, multi-tenant support, or OEM branding? Contact sales →


Upgrading

docker compose pull
docker compose up -d

Migrations run automatically on startup.


Pro / Enterprise installation

If you have a paid license file (soxai.lic), place it in the same directory and uncomment the volumes section in docker-compose.yml:

    volumes:
      - ./soxai.lic:/etc/soxai/license.lic:ro

Then restart:

docker compose up -d

The console will show your license tier under Admin → License.


Next steps