Docker Setup Guide
Run LegoCity in containers with Docker Compose - the fastest way to get started.
Overview
Advantages:
- ✅ One-command setup
- ✅ All services containerized (Next.js, MongoDB, Orion-LD)
- ✅ Consistent across environments
- ✅ Easy to clean up
Disadvantages:
- ⚠️ Less flexible for development
- ⚠️ Requires Docker Desktop (Windows/Mac) or Docker Engine (Linux)
Prerequisites
Install Docker
Windows:
Download and install Docker Desktop for Windows
# Verify installation
docker --version
docker compose versionmacOS:
Download and install Docker Desktop for Mac
# Verify installation
docker --version
docker compose versionLinux:
# Install Docker Engine
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Install Docker Compose
sudo apt install docker-compose-plugin
# Add user to docker group
sudo usermod -aG docker $USER
newgrp docker
# Verify
docker --version
docker compose versionSystem Requirements
- RAM: 4 GB minimum, 8 GB recommended
- Storage: 10 GB free space
- CPU: 2 cores minimum
Quick Start
1. Clone Repository
git clone https://github.com/CTU-SematX/LegoCity.git
cd LegoCity2. Configure Environment
# Copy example environment file
cp dashboard/.env.example dashboard/.envEdit dashboard/.env:
# Database (use Docker service name)
DATABASE_URI=mongodb://mongodb:27017/legocity
# Security
PAYLOAD_SECRET=your-secret-key-min-32-chars
# Server (expose to host)
NEXT_PUBLIC_SERVER_URL=http://localhost:3000
# Mapbox
NEXT_PUBLIC_MAPBOX_TOKEN=pk.your_mapbox_token
# NGSI-LD Broker (use Docker service name)
NGSI_LD_BROKER_URL=http://orion:10263. Start All Services
# Start in detached mode
docker compose up -d
# Or with logs visible
docker compose upThis starts:
- dashboard: Next.js + PayloadCMS (port 3000)
- mongodb: MongoDB 6.x (port 27017)
- orion: Orion-LD context broker (port 1026)
4. Wait for Services
# Check status
docker compose ps
# Follow logs
docker compose logs -f dashboardWait until you see:
dashboard | ✓ Ready in 3.5s
dashboard | ○ Local: http://0.0.0.0:30005. Access Dashboard
Open browser:
- Dashboard: http://localhost:3000
- Admin Panel: http://localhost:3000/admin
- Orion-LD API: http://localhost:1026/ngsi-ld/v1/entities
Docker Compose Configuration
Default docker-compose.yml
version: "3.8"
services:
# Next.js Dashboard
dashboard:
build:
context: ./dashboard
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- DATABASE_URI=mongodb://mongodb:27017/legocity
- PAYLOAD_SECRET=${PAYLOAD_SECRET}
- NEXT_PUBLIC_SERVER_URL=http://localhost:3000
depends_on:
- mongodb
volumes:
- ./dashboard:/app
- /app/node_modules
command: pnpm dev
# MongoDB Database
mongodb:
image: mongo:6
ports:
- "27017:27017"
volumes:
- mongodb_data:/data/db
environment:
- MONGO_INITDB_DATABASE=legocity
# NGSI-LD Context Broker
orion:
image: fiware/orion-ld:latest
ports:
- "1026:1026"
depends_on:
- mongodb
command: -dbhost mongodb
volumes:
mongodb_data:Custom Configuration
Create docker-compose.override.yml for local changes:
version: "3.8"
services:
dashboard:
environment:
- NODE_ENV=development
- DEBUG=payload:*
ports:
- "3001:3000" # Use different portDocker Commands
Starting & Stopping
# Start all services
docker compose up -d
# Stop all services
docker compose stop
# Stop and remove containers
docker compose down
# Stop and remove containers + volumes
docker compose down -vViewing Logs
# All services
docker compose logs -f
# Specific service
docker compose logs -f dashboard
# Last 100 lines
docker compose logs --tail=100 dashboardRebuilding
# Rebuild images
docker compose build
# Rebuild and start
docker compose up -d --build
# Rebuild specific service
docker compose build dashboardAccessing Containers
# Execute command in running container
docker compose exec dashboard sh
# Or bash if available
docker compose exec dashboard bash
# Run one-off command
docker compose run dashboard pnpm lintDevelopment with Docker
Hot Reload
The default setup mounts your code as a volume, enabling hot reload:
volumes:
- ./dashboard:/app # Your code
- /app/node_modules # Don't overwriteEdit files locally → changes appear in container → browser auto-refreshes.
Installing Dependencies
# Add new package
docker compose exec dashboard pnpm add package-name
# Install dev dependency
docker compose exec dashboard pnpm add -D package-name
# Rebuild after package.json changes
docker compose down
docker compose up -d --buildRunning Scripts
# Lint code
docker compose exec dashboard pnpm lint
# Run tests
docker compose exec dashboard pnpm test
# Generate Payload types
docker compose exec dashboard pnpm payload generate:types
# Seed database
docker compose exec dashboard pnpm seedDatabase Management
Access MongoDB Shell
# Connect to MongoDB
docker compose exec mongodb mongosh legocity
# List collections
show collections
# Query data
db.pages.find().pretty()Backup Database
# Export database
docker compose exec mongodb mongodump --db legocity --out /data/backup
# Copy backup to host
docker compose cp mongodb:/data/backup ./backupRestore Database
# Copy backup to container
docker compose cp ./backup mongodb:/data/backup
# Restore
docker compose exec mongodb mongorestore --db legocity /data/backup/legocityReset Database
# Drop all data
docker compose exec mongodb mongosh legocity --eval "db.dropDatabase()"
# Or remove volume
docker compose down -v
docker compose up -dTroubleshooting
Services Won't Start
Check ports are free:
# Windows
netstat -ano | findstr :3000
netstat -ano | findstr :27017
# Linux/macOS
lsof -i :3000
lsof -i :27017Kill conflicting processes or change ports in docker-compose.yml.
Container Keeps Restarting
# Check logs for errors
docker compose logs dashboard
# Common issues:
# - Missing environment variables
# - MongoDB not ready
# - Port conflictsCan't Connect to Database
Verify MongoDB is running:
docker compose ps mongodb
# Should show "Up"Check connection string in .env:
# Use service name, not localhost
DATABASE_URI=mongodb://mongodb:27017/legocityBuild Fails
# Clear build cache
docker compose build --no-cache
# Remove old images
docker image prune -a
# Check Dockerfile syntax
docker compose configSlow Performance
Increase Docker resources:
- Docker Desktop → Settings → Resources
- Allocate more CPU and RAM
Use production build:
# docker-compose.override.yml
services:
dashboard:
command: pnpm start # Instead of pnpm devPermission Issues (Linux)
# Fix file permissions
sudo chown -R $USER:$USER ./dashboard
# Or run as current user
docker compose run --user "$(id -u):$(id -g)" dashboard pnpm devProduction Deployment
For production, use optimized configuration:
docker-compose.prod.yml
version: "3.8"
services:
dashboard:
build:
context: ./dashboard
dockerfile: Dockerfile
args:
- NODE_ENV=production
environment:
- NODE_ENV=production
command: pnpm start
restart: unless-stopped
mongodb:
restart: unless-stopped
volumes:
- mongodb_data:/data/db
orion:
restart: unless-stopped
volumes:
mongodb_data:
driver: localDeploy:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -dCleanup
Remove Everything
# Stop and remove all containers, networks, volumes
docker compose down -v
# Remove images
docker compose down --rmi all
# Prune Docker system
docker system prune -a --volumesKeep Data, Remove Containers
# Stop and remove containers (keep volumes)
docker compose downNext Steps
- Configure: Configuration Guide
- Use: User Guide
- Deploy: Production Deployment
Resources
Docker setup complete? Continue to the Configuration Guide.