Skip to content

Commit d41f018

Browse files
authored
Merge pull request #282 from deploystackio/main
prod-release
2 parents 90e84f6 + 8181578 commit d41f018

File tree

3 files changed

+124
-40
lines changed

3 files changed

+124
-40
lines changed

self-hosted/docker-compose.mdx

Lines changed: 72 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ For **production deployments with multiple teams** or external users, see [Produ
1818

1919
## Overview
2020

21-
This guide provides step-by-step instructions to install and configure DeployStack using Docker Compose. The setup includes frontend, backend, and **required satellite service** with persistent data storage and proper networking.
21+
This guide provides step-by-step instructions to install and configure DeployStack using Docker Compose. The setup includes frontend and backend with persistent data storage and proper networking.
2222

2323
<Warning>
24-
**Satellites are required**: DeployStack cannot manage MCP servers without at least one satellite. This guide includes satellite deployment as a mandatory step.
24+
**Satellites are required**: DeployStack cannot manage MCP servers without at least one satellite. After completing the Docker Compose setup, you must deploy a satellite separately (instructions included below).
2525
</Warning>
2626

2727
**Important:** Only modify settings explicitly mentioned in this guide. Altering other configurations may lead to issues.
@@ -80,13 +80,9 @@ cat > .env << EOF
8080
# DeployStack Configuration
8181
DEPLOYSTACK_ENCRYPTION_SECRET=your-generated-secret-here
8282
83-
# Satellite Registration (required - obtain from admin panel after setup)
84-
DEPLOYSTACK_REGISTRATION_TOKEN=
85-
86-
# Optional: Customize ports (default: frontend=8080, backend=3000, satellite=3001)
83+
# Optional: Customize ports (default: frontend=8080, backend=3000)
8784
# FRONTEND_PORT=8080
8885
# BACKEND_PORT=3000
89-
# SATELLITE_PORT=3001
9086
9187
# Optional: Custom app title
9288
# VITE_APP_TITLE=My DeployStack Instance
@@ -95,10 +91,6 @@ EOF
9591

9692
Replace `your-generated-secret-here` with the secret you generated in Step 2.
9793

98-
<Warning>
99-
**Important**: Leave `DEPLOYSTACK_REGISTRATION_TOKEN` empty for now. You'll add it after completing the admin setup in Step 6.
100-
</Warning>
101-
10294
### Step 4: Launch DeployStack
10395

10496
Start the Docker containers:
@@ -108,11 +100,15 @@ docker-compose up -d
108100
```
109101

110102
This command will:
111-
- Pull the latest DeployStack images
103+
- Pull the latest DeployStack images (frontend and backend)
112104
- Create necessary volumes for persistent data
113-
- Start both frontend and backend services
105+
- Start frontend and backend services
114106
- Set up networking between services
115107

108+
<Info>
109+
**Note**: This deploys the backend and frontend only. The satellite service must be deployed separately after completing the setup wizard (see Step 7 below).
110+
</Info>
111+
116112
### Step 5: Verify Installation
117113

118114
Check that all services are running:
@@ -135,32 +131,65 @@ Open your browser and navigate to:
135131
**Satellites are required** - Without at least one satellite, DeployStack cannot manage MCP servers. Complete this step to make your deployment functional.
136132
</Warning>
137133

138-
The satellite service is **already included** in the docker-compose.yml file. You just need to configure the registration token:
134+
The satellite must be deployed separately after completing the setup wizard:
135+
136+
1. **Complete Setup Wizard First**:
137+
- Access http://localhost:8080/setup
138+
- Create your admin account
139+
- Complete basic platform configuration
139140

140-
1. **Generate Registration Token** (via admin interface after backend setup):
141-
- Log in to DeployStack as admin (complete Step 6 first)
141+
2. **Generate Registration Token**:
142+
- Log in to DeployStack as admin
142143
- Navigate to Admin → Satellites → Pairing
143-
- Click "Generate Token" and copy it
144+
- Click "Generate Token" and copy the full token
145+
- Token format: `deploystack_satellite_global_eyJhbGc...`
144146

145-
2. **Add token to your `.env` file**:
147+
3. **Deploy Satellite with Docker**:
148+
149+
**For local development (connecting from same machine):**
146150
```bash
147-
# Satellite Configuration (required)
148-
DEPLOYSTACK_REGISTRATION_TOKEN=deploystack_satellite_global_eyJhbGc...
151+
docker run -d \
152+
--name deploystack-satellite \
153+
--network deploystack-network \
154+
-p 3001:3001 \
155+
-e DEPLOYSTACK_BACKEND_URL="http://deploystack-backend:3000" \
156+
-e DEPLOYSTACK_SATELLITE_NAME="docker-satellite-001" \
157+
-e DEPLOYSTACK_REGISTRATION_TOKEN="your-token-here" \
158+
-v deploystack_satellite_persistent:/app/persistent_data \
159+
deploystack/satellite:latest
149160
```
150161

151-
3. **Restart services to apply token**:
162+
**For remote access (connecting from MCP clients via domain/IP):**
152163
```bash
153-
docker-compose down
154-
docker-compose up -d
164+
docker run -d \
165+
--name deploystack-satellite \
166+
--network deploystack-network \
167+
-p 3001:3001 \
168+
-e DEPLOYSTACK_BACKEND_URL="http://deploystack-backend:3000" \
169+
-e DEPLOYSTACK_SATELLITE_URL="https://satellite.example.com" \
170+
-e DEPLOYSTACK_SATELLITE_NAME="docker-satellite-001" \
171+
-e DEPLOYSTACK_REGISTRATION_TOKEN="your-token-here" \
172+
-v deploystack_satellite_persistent:/app/persistent_data \
173+
deploystack/satellite:latest
155174
```
156175

157-
4. **Verify satellite registration**:
176+
<Info>
177+
**When to set `DEPLOYSTACK_SATELLITE_URL`:**
178+
- Required when MCP clients (Claude Code, VS Code, etc.) connect via a domain or IP address
179+
- Not needed for local development on localhost
180+
- Use base URL only (e.g., `https://satellite.example.com`) - no `/mcp` or `/sse` paths
181+
- Required for OAuth authentication to work with remote MCP clients
182+
</Info>
183+
184+
4. **Verify Satellite Registration**:
158185
```bash
159186
docker logs deploystack-satellite
160187
# Should show: ✅ Satellite registered successfully: docker-satellite-001
161188
```
162189

163-
**Note**: After initial registration, the satellite saves its API key to persistent storage and doesn't need the registration token for subsequent starts.
190+
<Info>
191+
**Note**: After initial registration, the satellite saves its API key to persistent storage. The registration token is only needed for the first startup. Container restarts will use the saved API key automatically.
192+
</Info>
164193

165194
## Configuration
166195

@@ -234,6 +263,7 @@ server {
234263
DeployStack uses Docker volumes to persist data:
235264

236265
- **deploystack_backend_persistent**: Application database, configuration, and user uploads
266+
- **deploystack_satellite_persistent**: Satellite credentials and process data (created when satellite is deployed separately)
237267

238268
#### Backup Your Data
239269

@@ -243,8 +273,11 @@ Regularly backup your persistent data:
243273
# Create backup directory
244274
mkdir -p backups/$(date +%Y%m%d)
245275

246-
# Backup volume
276+
# Backup backend volume
247277
docker run --rm -v deploystack_backend_persistent:/data -v $(pwd)/backups/$(date +%Y%m%d):/backup alpine tar czf /backup/backend_persistent.tar.gz -C /data .
278+
279+
# Backup satellite volume (if satellite is deployed)
280+
docker run --rm -v deploystack_satellite_persistent:/data -v $(pwd)/backups/$(date +%Y%m%d):/backup alpine tar czf /backup/satellite_persistent.tar.gz -C /data .
248281
```
249282

250283
## Environment Variables Reference
@@ -265,15 +298,23 @@ docker run --rm -v deploystack_backend_persistent:/data -v $(pwd)/backups/$(date
265298
| `FRONTEND_PORT` | Frontend port mapping | `8080` | `80` |
266299
| `BACKEND_PORT` | Backend port mapping | `3000` | `3001` |
267300

268-
### Satellite Variables (Required)
301+
### Satellite Variables
302+
303+
Satellite services are deployed separately using `docker run` commands (not via docker-compose). See [Step 7: Deploy Satellite Service](#step-7-deploy-satellite-service-required) for deployment instructions.
304+
305+
**Required Satellite Environment Variables:**
269306

270307
| Variable | Description | Example |
271308
|----------|-------------|----------|
272-
| `DEPLOYSTACK_REGISTRATION_TOKEN` | JWT registration token from admin (required for initial satellite pairing) | `deploystack_satellite_global_eyJhbGc...` |
309+
| `DEPLOYSTACK_BACKEND_URL` | Backend URL for satellite to connect to | `http://deploystack-backend:3000` |
310+
| `DEPLOYSTACK_SATELLITE_NAME` | Unique satellite name (10-32 chars, lowercase only) | `docker-satellite-001` |
311+
| `DEPLOYSTACK_REGISTRATION_TOKEN` | JWT registration token from admin (required for initial pairing) | `deploystack_satellite_global_eyJhbGc...` |
273312

274-
<Info>
275-
**Note**: The satellite name `docker-satellite-001` is pre-configured in docker-compose.yml. You only need to provide the registration token in your `.env` file.
276-
</Info>
313+
**Optional (Required for Remote Access):**
314+
315+
| Variable | Description | Default | Example |
316+
|----------|-------------|---------|----------|
317+
| `DEPLOYSTACK_SATELLITE_URL` | Public URL of satellite for OAuth metadata (required when MCP clients connect remotely) | `http://localhost:PORT` | `https://satellite.example.com` |
277318

278319
## Troubleshooting
279320

self-hosted/production-satellite.mdx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,12 @@ LOG_LEVEL=info
248248
DEPLOYSTACK_BACKEND_URL=https://cloud.deploystack.io
249249
DEPLOYSTACK_BACKEND_POLLING_INTERVAL=60
250250
251+
# Satellite Public URL (REQUIRED for remote MCP client connections)
252+
# This is the publicly accessible URL where MCP clients connect
253+
# Used for OAuth 2.0 Protected Resource Metadata (RFC 9728)
254+
# Example: https://satellite.example.com (no /mcp or /sse paths)
255+
DEPLOYSTACK_SATELLITE_URL=https://satellite.example.com
256+
251257
# Satellite Identity (10-32 chars, lowercase a-z0-9-_ only)
252258
DEPLOYSTACK_SATELLITE_NAME=prod-satellite-001
253259

self-hosted/quick-start.mdx

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Get DeployStack running in minutes with Docker Compose or individua
44
---
55

66

7-
Get DeployStack up and running in minutes. This guide covers deploying the core platform (frontend + backend) and the required satellite service for MCP server management.
7+
Get DeployStack up and running in minutes. This guide covers deploying the core platform (frontend + backend). After completing the initial setup, you'll deploy a satellite service for MCP server management.
88

99
<Warning>
1010
**Important**: Satellites are required for DeployStack to function. The platform alone cannot manage MCP servers - you must deploy at least one satellite.
@@ -24,29 +24,36 @@ For **production deployments with multiple teams** or external users, see [Produ
2424

2525
## Method 1: Docker Compose (Recommended)
2626

27-
The fastest way to get DeployStack running with proper networking and persistence.
27+
The fastest way to get DeployStack backend and frontend running with proper networking and persistence.
2828

2929
<Steps>
3030
<Step title="Download and Start">
31-
Run these two commands to get DeployStack running:
32-
31+
Run these two commands to get DeployStack backend and frontend running:
32+
3333
```bash
3434
curl -o docker-compose.yml https://raw.githubusercontent.com/deploystackio/deploystack/main/docker-compose.yml
3535
DEPLOYSTACK_ENCRYPTION_SECRET=$(openssl rand -hex 16) docker-compose up -d
3636
```
37+
38+
<Info>
39+
**Note**: This deploys the backend and frontend only. The satellite service must be deployed separately after completing the setup wizard (see [Satellite Service](#satellite-service) section below).
40+
</Info>
3741
</Step>
38-
42+
3943
<Step title="Access DeployStack">
4044
Open your browser and navigate to:
4145
- **DeployStack Interface**: [http://localhost:8080](http://localhost:8080)
4246
- **Backend API**: [http://localhost:3000](http://localhost:3000)
4347
</Step>
44-
45-
<Step title="Complete Setup">
48+
49+
<Step title="Complete Setup Wizard">
4650
Follow the on-screen setup wizard to:
4751
- Create your admin account
4852
- Configure basic settings
49-
- Set up your first MCP Server
53+
</Step>
54+
55+
<Step title="Deploy Satellite">
56+
After completing the setup wizard, proceed to the [Satellite Service](#satellite-service) section below to deploy your first satellite and start managing MCP servers.
5057
</Step>
5158
</Steps>
5259

@@ -203,6 +210,7 @@ After completing the basic backend and frontend setup, deploy at least one satel
203210
</Step>
204211

205212
<Step title="Start Satellite Service">
213+
**For local development (connecting from same machine):**
206214
```bash
207215
docker run -d \
208216
--name deploystack-satellite \
@@ -213,6 +221,27 @@ After completing the basic backend and frontend setup, deploy at least one satel
213221
-v deploystack_satellite_persistent:/app/persistent_data \
214222
deploystack/satellite:latest
215223
```
224+
225+
**For remote access (connecting from MCP clients via domain/IP):**
226+
```bash
227+
docker run -d \
228+
--name deploystack-satellite \
229+
-p 3001:3001 \
230+
-e DEPLOYSTACK_BACKEND_URL="http://YOUR_SERVER_IP:3000" \
231+
-e DEPLOYSTACK_SATELLITE_URL="https://satellite.example.com" \
232+
-e DEPLOYSTACK_SATELLITE_NAME="my-satellite-001" \
233+
-e DEPLOYSTACK_REGISTRATION_TOKEN="your-token-here" \
234+
-v deploystack_satellite_persistent:/app/persistent_data \
235+
deploystack/satellite:latest
236+
```
237+
238+
<Info>
239+
**When to set `DEPLOYSTACK_SATELLITE_URL`:**
240+
- Required when MCP clients (Claude Code, VS Code, etc.) connect via a domain or IP address
241+
- Not needed for local development on localhost
242+
- Use base URL only (e.g., `https://satellite.example.com`) - no `/mcp` or `/sse` paths
243+
- Required for OAuth authentication to work with remote MCP clients
244+
</Info>
216245

217246
<Warning>
218247
**Satellite Name Requirements:**
@@ -263,14 +292,22 @@ The registration token is only required once during initial pairing.
263292
| `VITE_DEPLOYSTACK_BACKEND_URL` | Backend API URL for frontend | `http://localhost:3000` | `https://api.deploystack.company.com` |
264293
| `VITE_APP_TITLE` | Custom application title | `DeployStack` | `Company DeployStack` |
265294

266-
### Satellite Variables (Required)
295+
### Satellite Variables
296+
297+
**Required:**
267298

268299
| Variable | Description | Example |
269300
|----------|-------------|----------|
270301
| `DEPLOYSTACK_BACKEND_URL` | Backend URL for satellite to connect to | `http://localhost:3000` |
271302
| `DEPLOYSTACK_SATELLITE_NAME` | Unique satellite name (10-32 chars, lowercase only) | `my-satellite-001` |
272303
| `DEPLOYSTACK_REGISTRATION_TOKEN` | JWT registration token from admin (required for initial pairing) | `deploystack_satellite_global_eyJhbGc...` |
273304

305+
**Optional (Required for Remote Access):**
306+
307+
| Variable | Description | Default | Example |
308+
|----------|-------------|---------|----------|
309+
| `DEPLOYSTACK_SATELLITE_URL` | Public URL of satellite for OAuth metadata (required when MCP clients connect remotely) | `http://localhost:PORT` | `https://satellite.example.com` |
310+
274311
## Next Steps
275312

276313
Once DeployStack is running with at least one satellite:

0 commit comments

Comments
 (0)