3.2 KiB
3.2 KiB
Secret API Deployment (Staging/Main)
This runbook deploys web/backend/secretapi for wallet-first membership and governance install authorization.
Current edut.dev Runtime
api.edut.dev is currently served by the edut-api Docker service inside /opt/edut/gitea/docker-compose.yml on edut-prod.
Routing policy:
api.edut.dev->edut-api:8080git.edut.dev-> Giteaedut.devandwww.edut.dev-> placeholder response only
Active environment file on host:
/opt/edut/api/.env
Current test-mode settings:
- Base Sepolia (
SECRET_API_CHAIN_ID=84532) - ETH quote mode (
SECRET_API_MINT_CURRENCY=ETH) for low-friction Sepolia smoke validation - Membership contract wired to
0x3EEb3342751D1Cfc0F90C9393e0B1cd5AcE6FfD8 - Wallet session enforcement enabled by default (
SECRET_API_REQUIRE_WALLET_SESSION=true)
Build Targets
- Native binary:
cd /Users/vsg/Documents/VSG\ Codex/web/backend/secretapi
go build -o secretapi .
- Container image:
cd /Users/vsg/Documents/VSG\ Codex/web/backend/secretapi
docker build -t edut/secretapi:latest .
Required Environment
Use web/backend/secretapi/.env.example as baseline.
Critical values before launch:
SECRET_API_CHAIN_ID(84532for Base Sepolia,8453for Base mainnet)SECRET_API_CHAIN_RPC_URLSECRET_API_VERIFYING_CONTRACTSECRET_API_MEMBERSHIP_CONTRACT- Governance package metadata:
SECRET_API_GOV_RUNTIME_VERSIONSECRET_API_GOV_PACKAGE_URLSECRET_API_GOV_PACKAGE_HASHSECRET_API_GOV_PACKAGE_SIGNATURESECRET_API_GOV_SIGNER_KEY_IDSECRET_API_GOV_POLICY_HASH
- Member channel polling:
SECRET_API_MEMBER_POLL_INTERVAL_SECONDS
- Marketplace contract wiring:
SECRET_API_ENTITLEMENT_CONTRACTmust be non-zero for checkout quote issuance
Systemd Deployment (Hetzner/VPS)
- Copy binary to
/opt/edut/secretapi/secretapi. - Copy environment file to
/etc/edut/secretapi.env. - Copy unit file
web/backend/secretapi/deploy/secretapi.serviceto/etc/systemd/system/secretapi.service. - Start service:
sudo systemctl daemon-reload
sudo systemctl enable --now secretapi
sudo systemctl status secretapi
Health Check
curl -s http://127.0.0.1:8080/healthz
Expected:
{"status":"ok"}
Post-Deploy Verification
POST /secret/wallet/intentreturnsintent_idanddesignation_code.POST /secret/wallet/verifyaccepts valid EIP-712 signature and returnssession_token.POST /secret/wallet/session/refreshrotates wallet session token.POST /secret/wallet/session/revokerevokes wallet session token.POST /secret/membership/quotereturns tx payload.POST /secret/membership/confirmmarks membership active.POST /governance/install/tokenenforces owner role and active membership.POST /governance/install/confirmenforces package/runtime/policy match.GET /governance/install/statusresolves deterministic activation state.POST /member/channel/device/registerreturns active channel binding.GET /member/channel/eventsreturns deterministic inbox page.POST /member/channel/events/{event_id}/ackis idempotent per event+device.