SteerDock currently uses a monolithic architecture with a single backend service and frontend application.
┌─────────────────────────────────────────────────────┐
│ Frontend │
│ (React + TypeScript) │
│ Port: 5151 │
└──────────────────┬──────────────────────────────────┘
│ HTTP(s)/WebSocket
▼
┌─────────────────────────────────────────────────────┐
│ Backend (Go) │
│ - REST API │
│ - WebSocket │
│ - Authentication │
│ - Docker Management │
│ Port: 8383 │
└──────────────────┬──────────────────────────────────┘
│
┌──────────┼──────────┐
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│Database│ │ Redis │ │ Docker │
│ │ │ Cache │ │ Daemon │
└────────┘ └────────┘ └────────┘
- Technology: React 18+ with TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS
- State Management: React Query
- Port: 5151 (development), embedded in backend (production)
- Technology: Go 1.24+ with Gin framework
- Database: PostgreSQL / MySQL / MongoDB (configurable)
- Cache: Redis (optional)
- Port: 8383
- Features:
- JWT authentication
- Role-based access control (RBAC)
- Docker management (containers, images, networks, volumes)
- Multi-host support
- Real-time updates via WebSocket
- Audit logging
- Supported: PostgreSQL, MySQL(Default), MongoDB
- ORM: GORM
- Auto-migration: Yes
- Technology: Redis
- Optional: Yes (falls back to in-memory cache)
- Use Cases: Session storage, API response caching
# Generate configuration
./generate-passwords.sh # Linux/macOS
.\generate-passwords.ps1 # Windows
# Start all services
docker compose up -d- MySQL: localhost:3306
- Redis: localhost:6379
- Frontend: http://localhost:5151 (served by backend)
- Backend API: http://localhost:8383/api/v1
Services:
mysql- MySQL 8 databaseredis- Redis 7 cachesteerdock- Main application (frontend + backend)
# Build and run single container (requires external database)
docker build -t steerdock:latest .
docker run -d --name steerdock \
-p 8383:8383 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-e DATABASE_URL="mysql://user:pass@host:3306/db" \
steerdock:latest- Frontend: http://localhost:5151 (served by backend)
- Backend API: http://localhost:8383/api/v1
- Note: Requires external MySQL database
# Linux/macOS
./start-dev.sh
# Windows
.\start-dev.ps1- Frontend: http://localhost:5151 (Vite dev server with hot-reload)
- Backend: http://localhost:8383 (go run)
# Linux/macOS
./start-prod.sh
# Windows
.\start-prod.ps1- Backend API: http://localhost:8383/api/v1
- Single binary deployment
- Frontend served by backend (when static files available)
SteerDock uses a monolithic architecture for the following reasons:
- Simplicity: Easier to develop, test, and deploy
- Performance: No inter-service communication overhead
- Resource Efficiency: Lower memory and CPU usage
- Easier Debugging: Single codebase, single process
- Faster Development: No need to manage multiple services
steerdock/
├── backend/ # Go backend application
│ ├── config/ # Configuration files
│ ├── handlers/ # HTTP handlers
│ ├── middleware/ # Middleware (auth, CORS, etc.)
│ ├── models/ # Database models
│ ├── routes/ # API routes
│ └── main.go # Entry point
├── frontend/ # React frontend application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ ├── hooks/ # Custom hooks
│ │ └── config/ # Configuration
│ └── package.json
├── sql/ # Database initialization scripts
├── docker-compose.yml # Docker Compose configuration
└── .env # Environment variables
All API endpoints are served from the backend on port 8383:
/api/v1/
├── auth/ # Authentication
│ ├── login
│ ├── logout
│ └── refresh
├── containers/ # Container management
├── images/ # Image management
├── networks/ # Network management
├── volumes/ # Volume management
├── hosts/ # Docker host management
├── users/ # User management
└── system/ # System information
All configuration is centralized in:
.envfile (environment variables)
Generate configuration:
# Linux/macOS
./generate-passwords.sh
# Windows
.\generate-passwords.ps1While the current architecture is monolithic, it can be scaled:
- Horizontal Scaling: Run multiple backend instances behind a load balancer
- Database Scaling: Use read replicas, connection pooling
- Caching: Redis for session and API response caching
- CDN: Serve static frontend assets via CDN
Last Updated: January 2026