Persistent Storage
API Key Persistence
Satellites automatically save their registration credentials to persistent storage to avoid re-registration on restart: Storage Location:Registration Token Usage
Single-Use Registration Flow:- First startup: Uses registration token β Saves API key to file
- Subsequent startups: Uses saved API key β No token needed
- Token expiration: Only affects first-time registration
- No re-registration: Satellites restart without consuming new tokens
- Server restarts: Automatic recovery after system reboots
- Development workflow: Frequent restarts donβt require new tokens
Storage Management
Automatic Operations:- Save: Credentials saved after successful registration
- Load: Credentials loaded on startup before attempting registration
- Verify: API key verified with backend heartbeat
- Clear: Invalid credentials automatically cleared
Important: The
persistent_data/ directory must be writable by the satellite process. In production deployments, ensure proper volume mounting and permissions.Registration Overview
Automatic Registration Flow
Satellites register automatically during startup following this sequence:Secure Token-Based Registration
The registration system requires valid JWT registration tokens for security:- Token Required: All satellites must provide valid registration tokens during startup
- Single-Use: Registration tokens are consumed after successful pairing
- Admin-Controlled: Only administrators can generate registration tokens
- No Open Registration: Satellites cannot register without proper authorization
Environment Variables
Required Configuration
Satellite URL Configuration (Optional)
DEPLOYSTACK_SATELLITE_URL Environment Variable: This optional environment variable configures the publicly accessible URL of the satellite instance. Behavior:- If set: Satellite sends explicit URL to backend during registration
- If not set: Backend uses default
http://127.0.0.1:3001or auto-detects from request headers - Important: URL is sent only during registration, NOT in heartbeats
- Production deployments with known public URLs
- OAuth 2.0 Protected Resource Metadata requirements
- Satellites behind reverse proxies or load balancers
- Base URL without path suffix
- Example:
https://satellite.example.com(NOThttps://satellite.example.com/mcp)
- Database default:
http://127.0.0.1:3001 - Used when
DEPLOYSTACK_SATELLITE_URLis not set during registration - Can be overridden by setting the environment variable
Region Configuration (Backend-Only)
Region Field: Theregion field is a backend-configurable field for organizational purposes. Satellites do not send region data - it must be set by backend administrators.
Purpose:
- Geographic grouping of satellites
- Capacity planning and analytics
- Regional routing strategies
- AWS-style regions:
us-east-1,eu-central-1,ap-southeast-1 - Geographic labels:
north-america,europe,asia-pacific - Custom labels:
on-premise,data-center-1,cloud
Registration Token Requirements
Token Types and Sources
Satellites require registration tokens generated by administrators: Global Satellite Tokens:- Format:
deploystack_satellite_global_eyJhbGc... - Generated by:
global_adminusers via backend API - Scope: Can register global satellites serving all teams
- Expiration: 1 hour (configurable)
- Format:
deploystack_satellite_team_eyJhbGc... - Generated by:
team_adminusers for specific teams - Scope: Can register team satellites for specific team only
- Expiration: 24 hours (configurable)
Security Model
All satellites register with secure defaults controlled by the backend:- Token-Based Pairing: Valid JWT registration token required
- Satellite Type: Determined by token scope (global or team)
- Status: Always
inactive(requires admin activation) - Single-Use Tokens: Registration tokens consumed after successful pairing
Satellite Name Validation
Validation Rules
TheDEPLOYSTACK_SATELLITE_NAME environment variable must meet strict requirements:
Length Constraints:
- Minimum: 10 characters
- Maximum: 32 characters
- Allowed: lowercase letters (a-z), numbers (0-9), hyphens (-), underscores (_)
- Forbidden: uppercase letters, spaces, special characters
Fail-Fast Validation
Satellite validates the name before any other operations and exits immediately with clear German error messages:Registration Data Structure
System Information Collection
Satellites automatically collect and send system information during registration:satellite_type: Always set to'global'by backendteam_id: Always set tonullby backend (admin can change later)status: Always set to'inactive'by backend (requires admin activation)
MCP Server Capabilities
Satellites report their supported MCP server types:- stdio: Local MCP servers as child processes
- http: HTTP MCP servers (planned)
- sse: SSE MCP servers (planned)
Database Integration
Satellite Tables
The Backend maintains satellite state across five database tables:- satellites: Core satellite registry and configuration
- satelliteCommands: Command queue for satellite management
- satelliteProcesses: MCP server process tracking
- satelliteUsageLogs: Usage analytics and audit trails
- satelliteHeartbeats: Health monitoring and status updates
services/backend/src/db/schema.ts for complete schema definitions.
Registration Database Operations
New Satellite Registration:- All satellites are created with
satellite_type='global',team_id=NULL,status='inactive' - Admin activation required before satellite can be used
- Team assignment controlled via backend admin interface
Development Setup
Local Registration Testing
Expected Registration Output
Token Expiration and Re-Registration
Registration tokens are single-use and expire:Security Considerations
API Key Management
- Generation: 32-byte cryptographically secure random keys
- Storage: Backend stores argon2 hash, satellite receives plain key
- Rotation: New API key generated on every registration
- Scope: API keys are scoped to satellite type (global vs team)
Centralized Security Model
All Satellites are Global:- Name uniqueness enforced globally across all satellites
- All satellites start as
inactiveand require admin activation - Team assignment controlled exclusively by backend administrators
- No client-side configuration of security-sensitive parameters
- Satellites can be assigned to teams via backend admin interface
- Team assignment changes satellite behavior and resource access
- Resource isolation enforced at runtime based on team assignment
Troubleshooting
Common Registration Issues
Missing Environment Variable:Debug Endpoints
Use these endpoints to troubleshoot registration issues:Implementation Status
Current Implementation:- β Automatic registration during startup
- β Mandatory DEPLOYSTACK_SATELLITE_NAME validation
- β Upsert registration logic for restarts
- β System information collection
- β API key generation and management
- β Database integration with 5 satellite tables
- β Fail-fast validation with clear error messages
- β Centralized security model (no client-controlled type/team assignment)
- β Default inactive status requiring admin activation
- β JWT-based registration token system prevents unauthorized satellites
- β Single-use tokens with cryptographic validation
- β Admin-controlled token generation with proper scope enforcement
- β
All satellites register as
inactiverequiring admin activation
- β JWT-based registration token system
- β Bearer token authentication for Backend communication
- β Admin interface for registration token management
- β Satellite client registration token support
- π§ API key rotation and renewal
- π§ Registration status monitoring and alerts
The satellite registration system implements secure JWT-based pairing to prevent unauthorized satellite connections. Once registered with a valid token, satellites receive permanent API keys for ongoing communication. See Backend API Security for complete token management details.

