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 (the repository is private — access comes with the # self-hosting agreement; write to miguel.reis@aas-studio.eu) git clone git@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 miguel.reis@aas-studio.euwith 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.