Skip to main content
Deploy DeployStack using Docker Compose for a quick and reliable self-hosted installation. This method is recommended for most users as it provides a reliable setup with minimal configuration.
Docker containers are for production hosting or self-hosting. For development contributions, check the Local Setup guide.
Deployment Type: This guide covers development and single-team deployments. The satellite runs without process isolation, suitable for local development or when serving only your own team.For production deployments with multiple teams or external users, see Production Satellite Setup which includes nsjail process isolation for security and team separation.

Overview

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.
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).
Important: Only modify settings explicitly mentioned in this guide. Altering other configurations may lead to issues.

System Requirements

  • RAM: Ensure your environment has at least 4GB of RAM. Insufficient memory can cause processes to crash.
  • Docker & Docker Compose: Make sure both are installed and up-to-date.
  • Storage: At least 2GB of available disk space for images and persistent data.

Beggining the setup for Docker Compose

Follow these steps for a setup with docker compsoe

Step 1: Download Docker Compose File

Download the docker-compose.yml file to your working directory:
Default Database Password: The Docker Compose file uses a default PostgreSQL password (deploystack) for quick demos and local testing. For production or internet-exposed deployments, set a strong password via the POSTGRES_PASSWORD environment variable in your .env file.

Step 2: Generate Encryption Secret

DeployStack requires a secure encryption secret for protecting sensitive data like API keys and credentials.
Important: Keep this secret secure and do not share it. Store it safely as you’ll need it for upgrades.

Step 3: Set Environment Variables

Create a .env file in the same directory as your docker-compose.yml:
Replace your-generated-secret-here with the secret you generated in Step 2.

Step 4: Launch DeployStack

Start the Docker containers:
This command will:
  • Pull the latest DeployStack images (frontend and backend)
  • Create necessary volumes for persistent data
  • Start frontend and backend services
  • Set up networking between services
Note: This deploys the backend and frontend only. The satellite service must be deployed separately after completing the setup wizard (see Step 7 below).

Step 5: Verify Installation

Check that all services are running:
You should see both deploystack-frontend and deploystack-backend containers in “Up” status.

Step 6: Access DeployStack

Open your browser and navigate to:

Step 7: Deploy Satellite Service (Required)

Satellites are required - Without at least one satellite, DeployStack cannot manage MCP servers. Complete this step to make your deployment functional.
The satellite must be deployed separately after completing the setup wizard:
  1. Complete Setup Wizard First:
  2. Generate Registration Token:
    • Log in to DeployStack as admin
    • Navigate to Admin → Satellites → Pairing
    • Click “Generate Token” and copy the full token
    • Token format: deploystack_satellite_global_eyJhbGc...
  3. Find your Docker network name: The satellite must join the same network as the backend. Find your network name:
    You’ll see something like docker-compose_deploystack-network or similar. Use this name in the next step.
  4. Deploy Satellite with Docker:
    The satellite requires a running backend. If the backend is not reachable, the satellite will exit immediately. Make sure docker-compose ps shows the backend as healthy before proceeding.
    Automatic Permission Handling: The satellite container automatically fixes Docker volume permissions on startup. This ensures credentials can be saved even when volumes have root ownership. You may notice a brief delay (~5 seconds) during first startup while permissions are being fixed.
    For local development (connecting from same machine):
    Replace <your-network-name> with the network from step 3. For remote access (connecting from MCP clients via domain/IP):
    When to set DEPLOYSTACK_SATELLITE_URL:
    • The Docker image defaults to http://localhost:3001 which works for local development
    • Override with -e DEPLOYSTACK_SATELLITE_URL="https://satellite.example.com" when MCP clients connect via a domain or IP address
    • Use base URL only — no /mcp or /sse paths
    • Required for OAuth authentication to work with remote MCP clients
  5. Verify Satellite Registration:
    Get the container ID from docker ps.
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.

Configuration

External Access

By default, DeployStack runs on localhost. To access it via an external domain or IP address, you need to configure the environment variables.

Understanding URLs

  • Protocol: Use http or https depending on your setup
  • Domain/IP: The domain name or IP address where your application is accessible
  • Port: Include the port number if not using standard ports (80 for http, 443 for https)

Configuring for External Access

  1. Update your .env file:
  1. Restart the services:

SSL/HTTPS Setup

HTTPS is recommended for production deployments to ensure secure communication and enable all browser features.
For HTTPS setup, we recommend using a reverse proxy like Nginx or Traefik:

Data Persistence

DeployStack uses Docker volumes to persist data:
  • deploystack_backend_persistent: Application database, configuration, and user uploads
  • deploystack_satellite_persistent: Satellite credentials and process data (created when satellite is deployed separately)

Backup Your Data

Regularly backup your persistent data:

Environment Variables Reference

Required Variables

Optional Variables

Satellite Variables

Satellite services are deployed separately using docker run commands (not via docker-compose). See Step 7: Deploy Satellite Service for deployment instructions. Required Satellite Environment Variables: Optional (Required for Remote Access):

Troubleshooting

Common Issues

Services Won’t Start

Getting Help

If you encounter issues not covered here:
  1. Search existing GitHub Issues
  2. Join our Discord community
  3. Create a new issue with detailed logs and system information

Need to upgrade? Check our Upgrade Guide for step-by-step instructions.