This monorepo builds a single Docker image that includes both the frontend and backend.
The Docker image includes:
- Frontend (GUI): React app served by Nginx on port 80
- Backend (MCP Server): Node.js app with WebSocket support on port 3000 (proxied through Nginx)
Both services run in the same container for simplicity.
The easiest way to run locally with automatic rebuilds:
# Build and run (rebuilds image every time)
docker-compose up --build
# Run in background
docker-compose up --build -d
# Stop
docker-compose downAccess the application at http://localhost:8080
docker build -t drawdb:local .docker run -p 8080:80 drawdb:localAccess the application at http://localhost:8080
The WebSocket connection is automatically proxied through Nginx at http://localhost:8080/remote-control
The Jenkinsfile builds the image using Kaniko and pushes to Harbor registry:
- Image:
harbor.anatoly.dev/drawdb/drawdb:latest - Tagged:
harbor.anatoly.dev/drawdb/drawdb:{branch}-{commit}
- build: Builds both GUI and Backend using pnpm + Turborepo
- production: Single runtime image with Nginx + Node.js, running both frontend and backend
The backend runs on port 3000 internally, but is only accessible through the Nginx proxy on port 80. No environment variables are needed for basic usage.
- Nginx listens on port 80
- Static files (React app) are served directly by Nginx
- WebSocket requests to
/remote-controlare proxied to the Node.js backend on port 3000 - Both processes run in the same container using a simple startup script