reference/docker-compose.md

Docker Compose — Server (Portainer Copy Block)

Back to DocStart

Copy everything inside the code block into Portainer -> Stacks -> Add stack.

# =============================================================================
# Mino Server — Docker Compose (Portainer-friendly)
#
# Usage:
#   docker compose up -d
#
# Copy-paste this file into Portainer → Stacks → "Add Stack" → Paste YAML.
#
# In relay mode (default), the server connects outbound to the relay —
# no tunnel or open ports needed. Just set MINO_RELAY_URL.
# =============================================================================

services:
  # -------------------------------------------------------------------------
  # Mino Server — The core API + built-in web UI
  # -------------------------------------------------------------------------
  mino:
    image: ghcr.io/tomszenessy/mino-server:${MINO_IMAGE_TAG:-main}
    container_name: mino-server
    restart: unless-stopped
    ports:
      - "${MINO_PORT_BIND:-127.0.0.1}:${MINO_PORT:-3000}:3000"
    volumes:
      - mino-data:/data
    environment:
      - NODE_ENV=production
      - MINO_DATA_DIR=/data
      - MINO_CONNECTION_MODE=${MINO_CONNECTION_MODE:-relay}
      - MINO_RELAY_URL=${MINO_RELAY_URL:-https://relay.mino.ink}
      - MINO_PUBLIC_SERVER_URL=${MINO_PUBLIC_SERVER_URL:-}
      # Optional overrides (set in Portainer env vars):
      # - MINO_PORT=3000
      # - MINO_HOST=0.0.0.0
      # - MINO_AUTH_MODE=api-key
      # - MINO_CORS_ORIGINS=https://mino.ink,https://test.mino.ink
      # - MINO_AGENT_ENABLED=true
      # - MINO_AGENT_PROVIDER=anthropic
      # - MINO_AGENT_MODEL=claude-sonnet-4-20250514
      # - MINO_AGENT_API_KEY=sk-ant-...
      # - MINO_LOG_LEVEL=info
    healthcheck:
      test:
        [
          "CMD",
          "bun",
          "-e",
          "fetch('http://127.0.0.1:3000/api/v1/health').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
        ]
      interval: 30s
      timeout: 5s
      start_period: 10s
      retries: 3

volumes:
  mino-data:
    name: mino-data

Environment Variables

Set these in Portainer's "Environment variables" section:

VariableRequiredDefaultDescription
MINO_CONNECTION_MODENorelayrelay or open-port
MINO_RELAY_URLYes (relay mode)https://relay.mino.inkURL of the relay service
MINO_IMAGE_TAGNomainDocker image tag
MINO_PORTNo3000Server port

Test Domain Example

MINO_CONNECTION_MODE=relay
MINO_RELAY_URL=https://relay.mino.ink