Self-hosted deployment
Run AAS Studio in your own infrastructure for data residency, regulated workloads, or air-gapped environments. Same code that powers the SaaS, packaged for your VPC.
When self-hosted matters
- Data residency — your AAS files never leave your infrastructure. Required for German Mittelstand, EU defence-adjacent manufacturers, and regulated industries.
- Air-gapped networks — no outbound internet at runtime. Self-hosted images can run with all LLM providers swapped to internal-only inference (e.g. Llama/Mistral on local GPUs).
- Catena-X data spaces — federation members typically deploy AAS Studio inside their own EDC (Eclipse Dataspace Connector) network, calling IDTA-01002 Part 2 API internally.
- Procurement deadlines— RFPs that mandate “cloud-only is excluded” clause exclude SaaS vendors automatically. Self-hosted unlocks that segment.
Architecture
One Next.js Node container + a Postgres database + (optional) S3-compatible blob store for large PDFs (>4.5 MB). Same layout as the production SaaS — minus Vercel-specific edge.
┌──────────────┐
│ Reverse │
│ proxy (TLS) │ e.g. Traefik / Caddy / nginx
└──────┬───────┘
│ :3000
┌──────▼───────┐ ┌──────────────┐
│ AAS Studio │───▶│ Postgres │
│ (Node 20) │ │ (your own) │
└──────┬───────┘ └──────────────┘
│ :9000 (optional)
┌──────▼───────┐
│ S3-compat │ e.g. MinIO; for >4.5 MB PDFs only
└──────────────┘Quick start (Docker Compose)
The repository ships a Dockerfile + docker-compose.yml ready to run. The image is <200 MB, multi-stage, runs as a non-root user.
# 1. Clone git clone https://github.com/MiguelReisRepo/AAS-Studio.git cd AAS-Studio # 2. Configure env cp .env.example .env # Edit .env: set DATABASE_URL, CLERK_*, GEMINI_API_KEY (or alt LLM) # 3. Start docker compose up -d # 4. Run migrations docker compose exec app npx prisma migrate deploy # 5. Visit open https://aas.your-domain.com
Required environment variables
Minimum viable set. Everything else (proxy fallback, datasheet search, OCR keys) is optional — the app degrades gracefully with clear error responses where features need keys you haven’t configured.
Standards conformance
Self-hosted instances are byte-identical to the SaaS — same code, same conformance statement. The build runs prisma migrate deploy which is idempotent and safe across upgrades. Migration history lives in prisma/migrations/.
Air-gapped deployments
For environments without outbound internet:
- Build the Docker image on a connected build host, push to your private registry, pull from inside the air-gap.
- Swap LLM providers for internal endpoints (e.g. Ollama running Llama 3 on local GPU). The LLM client (
lib/ai/llm-client.ts) accepts abaseUrloverride per provider. - Skip the
SCRAPINGBEE_API_KEY+TAVILY_API_KEY— datasheet web-search will return a clear “not configured” error rather than silently fail. - Preview the AAS public viewer (
/aas/[id]) on internal hosts only — setNEXT_PUBLIC_APP_URLto your internal domain.
Helm chart (Kubernetes)
For Kubernetes deployments, contact us for the Helm chart that wraps the Docker image with proper liveness/readiness probes, ingress configuration, and a sidecar for running migrations on rollout.
Status: chart is in private preview. Email contact@aas-studio.comwith your cluster shape and we’ll send you the values.yaml template.
Need help with the deployment?
Two-developer team — when something breaks at 2am you ping the people who wrote the code.