76 lines
2.4 KiB
Markdown
76 lines
2.4 KiB
Markdown
|
|
# Pull relay: no VPN and no inbound GPU port
|
||
|
|
|
||
|
|
The relay topology is:
|
||
|
|
|
||
|
|
```text
|
||
|
|
SpriteForge Studio --short outbound HTTPS--> public relay
|
||
|
|
GPU worker --short outbound HTTPS--> public relay
|
||
|
|
GPU worker --localhost HTTP--------> ComfyUI
|
||
|
|
```
|
||
|
|
|
||
|
|
There is no Tailscale, port forwarding, direct connection between the two PCs,
|
||
|
|
WebSocket or permanently open request. The worker performs a short poll when it
|
||
|
|
is idle. During generation it periodically sends a short heartbeat so a crashed
|
||
|
|
worker's lease can be recovered.
|
||
|
|
|
||
|
|
The relay needs a small public host because two NATed computers cannot discover
|
||
|
|
each other without an intermediary. It does not need a GPU. SQLite and a Docker
|
||
|
|
volume are sufficient. Inputs, workflows and outputs are content-addressed by
|
||
|
|
SHA-256 and expired completed jobs are eligible for cleanup after 72 hours.
|
||
|
|
|
||
|
|
## Deploy the relay on a VPS
|
||
|
|
|
||
|
|
Copy the SpriteForge repository to a server with Docker and a DNS name pointing
|
||
|
|
to it. In `deploy/relay`, create `.env`:
|
||
|
|
|
||
|
|
```dotenv
|
||
|
|
RELAY_DOMAIN=sprite-relay.example.com
|
||
|
|
SF_RELAY_CLIENT_TOKEN=long-random-client-secret
|
||
|
|
SF_RELAY_WORKER_TOKEN=different-long-random-worker-secret
|
||
|
|
```
|
||
|
|
|
||
|
|
Generate secrets locally with `python -c "import secrets; print(secrets.token_urlsafe(48))"`.
|
||
|
|
Start it:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker compose up -d --build
|
||
|
|
curl https://sprite-relay.example.com/health
|
||
|
|
```
|
||
|
|
|
||
|
|
Caddy obtains and renews TLS automatically. Never reuse the client token as the
|
||
|
|
worker token, commit `.env`, or expose the relay over plaintext Internet HTTP.
|
||
|
|
|
||
|
|
## Start the GPU computer
|
||
|
|
|
||
|
|
ComfyUI remains local and should show `http://127.0.0.1:8188`. On the GPU PC,
|
||
|
|
install SpriteForge (a checkout or wheel), then:
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
$env:SF_RELAY_WORKER_TOKEN = "worker secret"
|
||
|
|
sf relay worker `
|
||
|
|
--url https://sprite-relay.example.com `
|
||
|
|
--comfy-url http://127.0.0.1:8188
|
||
|
|
```
|
||
|
|
|
||
|
|
The terminal may stay minimized. It creates no listening port. `--once` leases
|
||
|
|
at most one job and exits, which is useful for diagnostics or Task Scheduler.
|
||
|
|
|
||
|
|
## Connect Studio
|
||
|
|
|
||
|
|
On the development PC:
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
$env:SF_RELAY_CLIENT_TOKEN = "client secret"
|
||
|
|
sf gpu add renderbox `
|
||
|
|
--kind relay `
|
||
|
|
--url https://sprite-relay.example.com `
|
||
|
|
--workflow C:\Users\uuu\Documents\spriteforge\examples\comfyui\txt2img_api.json `
|
||
|
|
--token-env SF_RELAY_CLIENT_TOKEN `
|
||
|
|
--timeout 1800
|
||
|
|
sf gpu test renderbox
|
||
|
|
sf studio C:\art\my_game --gpu-profile renderbox
|
||
|
|
```
|
||
|
|
|
||
|
|
`gpu test` checks only the relay. A real Pipeline/Generate job verifies the GPU
|
||
|
|
worker and local ComfyUI.
|