Installation
Detailed installation for local development and production.
Installation
This page covers the full install. If you just want to get running, the Quickstart is shorter.
Prerequisites
- Node.js 22 LTS — verify with ~~~node -v~~~
- pnpm 9+ — ~~~corepack enable && corepack prepare pnpm@latest --activate~~~
- Docker and Docker Compose
- Git
Clone and install dependencies
git clone git@github.com:cyb3rwize/soc-solo-os.git
cd soc-solo-os
pnpm installEnvironment files
Three files carry configuration. Each has an example you copy and fill in.
Root .env
Used by scripts and Drizzle Kit.
cp .env.example .envRequired values:
- DATABASE_URL — Postgres connection string
- REDIS_URL — Redis connection string
- MEILI_HOST — Meilisearch HTTP endpoint
- MEILI_MASTER_KEY — Meilisearch admin key
- AUTH_SECRET — Session signing secret
apps/web/.env.local
Used by the web application at runtime.
cp apps/web/.env.local.example apps/web/.env.localThis file holds every runtime variable: database, Redis, MinIO, Meilisearch, Ollama, WebAuthn, and the TOTP encryption key. Every value marked CHANGE_ME must be replaced.
docker/.env
Used by Docker Compose to set service passwords.
cp docker/.env.example docker/.envGenerate strong passwords:
openssl rand -base64 32Use one output for POSTGRES_PASSWORD, another for REDIS_PASSWORD, another for MINIO_ROOT_PASSWORD, another for MEILI_MASTER_KEY. The same values must appear in apps/web/.env.local — the app needs them to connect.
Start the data services
cd docker
docker compose up -dThis starts:
- Postgres 16 with pgvector — port 5433
- Redis 7 — port 6379
- MinIO — ports 9000 and 9001
- Meilisearch — port 7700
Verify all are healthy:
docker compose psApply database migrations
cd ../packages/db
pnpm drizzle-kit migrateTo inspect the created tables:
docker exec -it soc_postgres psql -U soc -d soc_solo -c "\\dt"Create your owner account
ATHELOS is single-user by design. Seed one owner:
cd ../..
SEED_EMAIL=you@example.com SEED_PASSWORD='your-strong-password' pnpm seed:userStart the application
pnpm devOpen http://localhost:3000 and sign in.
The web app runs on port 3000. The background worker runs as a separate process — start it with ~~~pnpm dev:worker~~~ in another terminal if you need report PDF generation or notification jobs.
Production deployment
For a production install:
- Provision a server — Ubuntu 24.04, 4 GB RAM minimum
- Install Docker, Docker Compose, UFW, and Tailscale
- Copy the repo to the server
- Configure the same three env files
- Build and run the production Compose stack
- Put a reverse proxy in front of the web app
- Restrict access via Tailscale — do not expose ATHELOS publicly
Troubleshooting
Postgres container is unhealthy
Check port 5433 is free: ~~~ss -lntp | grep 5433~~~. If occupied, change the port in docker-compose.yml and update DATABASE_URL.
pnpm install fails with network errors
Retry. Check DNS with ~~~ping registry.npmjs.org~~~.
Login fails with valid credentials
Check AUTH_SECRET in apps/web/.env.local matches what was used when the user was seeded. If you changed it after seeding, re-seed the account.