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 ~/soxaiStep 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:8080The only required changes are
POSTGRES_PASSWORD,JWT_SECRET, and the password inDATABASE_URL(must matchPOSTGRES_PASSWORD). Everything else can be left as-is for a local or LAN deployment.
Step 4 — Start
docker compose up -dThe 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:
| Field | Value |
|---|---|
[email protected] | |
| Password | sox@123456 |
Change the password immediately after first login: My Account → Security → Change Password.
From the admin console you can:
- Add channels — connect to OpenAI, Anthropic, Azure, or any other provider under Admin → Channels
- Invite users — under Admin → Users
- Set quotas — configure per-user or per-team limits under Admin → Quota
Community tier limits
| Limit | Value |
|---|---|
| Users | Unlimited |
| Channels | 10 |
| Tenants | 1 |
| 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 -dMigrations 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:roThen restart:
docker compose up -dThe console will show your license tier under Admin → License.
Next steps
- License Management — upgrade, renew, or rotate your license
- Domain, HTTPS & Reverse Proxy — custom domain with Cloudflare CDN or acme.sh (Let's Encrypt) + nginx
- Multi-Tenant Setup — isolate multiple teams or customers