Files
proxmox/docs/03-deployment/SANKOFA_STUDIO_DEPLOYMENT.md
defiQUG ed85135249 docs: use Gitea for internal repo references (FusionAI, cross-chain-pmm-lps, clone URL)
- Sankofa/FusionAI-Creator: REPO_URL and doc links → gitea.d-bis.org/d-bis/FusionAI-Creator
- cross-chain-pmm-lps doc link → Gitea
- trust-wallet registry source → gitea.d-bis.org/d-bis
- README: clone URL and note that canonical source is Gitea; public refs (GRU policy, token lists) stay on GitHub

Made-with: Cursor
2026-03-02 11:34:56 -08:00

160 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Sankofa Studio (FusionAI Creator) — Proxmox Deployment
**Last Updated:** 2026-02-28
**Status:** Active
**White-label URL:** [https://studio.sankofa.nexus](https://studio.sankofa.nexus)
---
## Overview
**Sankofa Studio** is the white-label SaaS offering of **FusionAI Creator** (multi-modal AI creative production: audio, image, video, UE5 export). It is deployed as a single Proxmox LXC (VMID **7805**) running the full stack via Docker Compose: API (port 8000), worker, Redis, and optional backend services (audio, image, video, UE5 export). The Studio UI is served at `/studio/` and the Phoenix Marketplace landing at `/marketplace/landing.html` on the same API origin.
| Item | Value |
|------|--------|
| **VMID** | 7805 (Sankofa/Phoenix range 78008999) |
| **Hostname** | sankofa-studio |
| **IP** | 192.168.11.72 (`IP_SANKOFA_STUDIO` in `config/ip-addresses.conf`; .55 is VMID 10230 order-vault) |
| **Node** | Default: r630-01 (override with `NODE`) |
| **Public URL** | https://studio.sankofa.nexus |
---
## Architecture
- **Single LXC** runs Docker and the FusionAI Creator stack (orchestrator API, worker, Redis, audio/image/video/ue5_export services).
- **API** listens on `0.0.0.0:8000`; NPMplus proxies `studio.sankofa.nexus``http://192.168.11.72:8000`.
- **Studio UI** at `https://studio.sankofa.nexus/studio/`; **Marketplace landing** at `https://studio.sankofa.nexus/marketplace/landing.html`.
For scaled-out deployment (separate VMs per service), see FusionAI Creator [service-topology](https://gitea.d-bis.org/d-bis/FusionAI-Creator/src/branch/main/docs/specs/service-topology.md) and optional runbook updates.
---
## Prerequisites
- Proxmox host with LXC support; Ubuntu 22.04 template: `local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst`.
- Git and network access from the container for clone (or copy repo into container via `REPO_PATH` on the Proxmox host).
- NPMplus (VMID 10233) and Cloudflare DNS/tunnel as per [E2E_CLOUDFLARE_DOMAINS_RUNBOOK.md](../05-network/E2E_CLOUDFLARE_DOMAINS_RUNBOOK.md).
---
## Deploy (create LXC + Docker + app)
The script uses `pct` (Proxmox Container Toolkit), which exists only on Proxmox nodes. Either run it **on** a Proxmox host or set **PROXMOX_HOST** so the script SSHs there to run `pct`.
From the **proxmox** repo root:
```bash
source config/ip-addresses.conf 2>/dev/null || true
# From another machine: SSH to Proxmox to run pct (use your Proxmox node IP, e.g. 192.168.11.11 or 192.168.11.12)
PROXMOX_HOST=192.168.11.11 REPO_URL=https://gitea.d-bis.org/d-bis/FusionAI-Creator.git ./scripts/deployment/deploy-sankofa-studio-lxc.sh
# Or from the Proxmox host itself (e.g. after cloning the repo or copying the script):
REPO_URL=https://gitea.d-bis.org/d-bis/FusionAI-Creator.git ./scripts/deployment/deploy-sankofa-studio-lxc.sh
# With production .env (secrets, API keys, backends)
REPO_URL=https://gitea.d-bis.org/d-bis/FusionAI-Creator.git \
ENV_FILE=/path/to/fusionai-production.env \
./scripts/deployment/deploy-sankofa-studio-lxc.sh
# From another host via SSH to Proxmox
PROXMOX_HOST=192.168.11.11 REPO_URL=https://gitea.d-bis.org/d-bis/FusionAI-Creator.git \
./scripts/deployment/deploy-sankofa-studio-lxc.sh
```
- **--dry-run:** Print what would be done; no create or install.
- **--skip-create:** Assume container 7805 already exists; only install Docker (if missing), clone/copy app, and run `docker compose up -d`.
### Env overrides
| Variable | Default | Description |
|----------|---------|-------------|
| VMID | 7805 | Container ID |
| HOSTNAME | sankofa-studio | Container hostname |
| IP_SANKOFA_STUDIO | 192.168.11.72 | Static IP (avoid .55: used by VMID 10230 order-vault) |
| PROXMOX_HOST | (none) | SSH here to run `pct` |
| NODE | (none) | Proxmox node for `pct --node` |
| REPO_URL | (none) | Git URL to clone (preferred for remote deploy) |
| REPO_PATH | (none) | Local path to copy into container (must be on Proxmox host when PROXMOX_HOST is set) |
| ENV_FILE | (none) | Path to `.env` for FusionAI (API key, Redis, service URLs, TTS/image backends) |
| MEMORY_MB | 8192 | RAM |
| CORES | 4 | CPU cores |
| DISK_GB | 60 | Root disk |
| APP_DIR | /srv/fusionai-creator | Path inside container for the app |
---
## NPMplus proxy (studio.sankofa.nexus)
1. In NPMplus (https://192.168.11.167 or your NPMplus URL), add **Proxy Host**:
- **Domain:** `studio.sankofa.nexus`
- **Scheme:** HTTP
- **Forward hostname / IP:** `192.168.11.72`
- **Forward port:** `8000`
2. Request **SSL certificate** (Let's Encrypt or Cloudflare Origin) and enable **Force SSL**.
---
## Cloudflare DNS and tunnel (E2E)
1. **DNS:** In Cloudflare (zone `sankofa.nexus`), add **CNAME** `studio``<your-tunnel>.cfargotunnel.com` (Proxied), or **A** `studio``76.53.10.36` if using direct port forward.
2. **Tunnel (if used):** In Cloudflare Zero Trust → Networks → Tunnels, add **Public Hostname:** `studio.sankofa.nexus`**URL** `https://192.168.11.167:443` (or your NPMplus origin; No TLS Verify if backend is HTTP).
3. **E2E check:** Run [verify-end-to-end-routing.sh](../05-network/E2E_CLOUDFLARE_DOMAINS_RUNBOOK.md) and ensure `studio.sankofa.nexus` passes DNS, SSL, and HTTPS (e.g. 200 on `/health` or `/studio/`).
---
## Production .env
Use the template [sankofa-studio.env.example](sankofa-studio.env.example) in this directory. Set in `.env` (or `ENV_FILE` when deploying):
- `FUSIONAI_ARTIFACT_ROOT` — persistent path for artifacts (e.g. `/data/artifacts`; mount volume in compose).
- `FUSIONAI_REDIS_URL``redis://redis:6379/0` (compose service name).
- `FUSIONAI_API_URL``http://api:8000` or public URL for webhooks.
- Service URLs (inside compose): `FUSIONAI_AUDIO_SERVICE_URL=http://audio:8001`, etc.
- Optional: `FUSIONAI_API_KEY`, `FUSIONAI_TTS_BACKEND`, `FUSIONAI_IMAGE_BACKEND`, and keys (ElevenLabs, OpenAI, Replicate) per [FusionAI Creator .env.example](https://gitea.d-bis.org/d-bis/FusionAI-Creator/src/branch/main/.env.example).
---
## Updating the app
```bash
# From Proxmox host
pct exec 7805 -- bash -c 'cd /srv/fusionai-creator && git pull && docker compose up -d --build'
```
Or SSH into the container and run the same.
---
## Health and verification
- **Health:** `curl -s http://192.168.11.72:8000/health`
- **Studio UI:** https://studio.sankofa.nexus/studio/
- **Marketplace landing:** https://studio.sankofa.nexus/marketplace/landing.html
---
## VMID / IP reference
See [ALL_VMIDS_ENDPOINTS.md](../04-configuration/ALL_VMIDS_ENDPOINTS.md) for 7805 and the Sankofa Phoenix table. See [RPC_ENDPOINTS_MASTER.md](../04-configuration/RPC_ENDPOINTS_MASTER.md) for edge/NPMplus context.
---
## E2E flow
For the full sequence (deploy → NPMplus → Cloudflare → verify), see **[SANKOFA_STUDIO_E2E_FLOW.md](SANKOFA_STUDIO_E2E_FLOW.md)**. Run:
```bash
./scripts/deployment/run-sankofa-studio-e2e.sh
```
With `REPO_URL` set, the script deploys then prints NPMplus and Cloudflare steps.
---
## Related
- FusionAI Creator: [README](https://gitea.d-bis.org/d-bis/FusionAI-Creator), [RUNBOOK](https://gitea.d-bis.org/d-bis/FusionAI-Creator/src/branch/main/docs/RUNBOOK.md), [Sankofa Studio doc](https://gitea.d-bis.org/d-bis/FusionAI-Creator/src/branch/main/docs/sankofa-studio.md), [service-topology](https://gitea.d-bis.org/d-bis/FusionAI-Creator/src/branch/main/docs/specs/service-topology.md).
- Proxmox: [VMID_ALLOCATION_FINAL.md](../02-architecture/VMID_ALLOCATION_FINAL.md) (78008999 Sankofa/Phoenix), [DAPP_LXC_DEPLOYMENT.md](DAPP_LXC_DEPLOYMENT.md) (pattern for LXC deploy).