Skip to main content

🐳 HΖ°α»›ng dαΊ«n Deploy UIP vα»›i Docker

Β· 4 min read
Nguyα»…n Việt HoΓ ng
Full-Stack Developer

HΖ°α»›ng dαΊ«n chi tiαΊΏt cΓ‘ch deploy toΓ n bα»™ UIP stack sα»­ dα»₯ng Docker vΓ  Docker Compose. BΓ i viαΊΏt nΓ y sαΊ½ Δ‘i qua tα»«ng bΖ°α»›c tα»« setup mΓ΄i trường Δ‘αΊΏn monitoring.

πŸ“‹ Prerequisites​

TrΖ°α»›c khi bαΊ―t Δ‘αΊ§u, Δ‘αΊ£m bαΊ£o bαΊ‘n cΓ³:

RequirementMinimumRecommended
Docker20.10+24.0+
Docker Compose2.0+2.20+
RAM8GB16GB
Storage50GB100GB SSD
CPU4 cores8 cores

CΓ i Δ‘αΊ·t Docker (nαΊΏu chΖ°a cΓ³)​

# Ubuntu/Debian
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# Verify installation
docker --version
docker compose version

πŸ—οΈ Architecture Overview​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Docker Network β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Frontendβ”‚ β”‚ Backend β”‚ β”‚ MongoDB β”‚ β”‚ Redis β”‚ β”‚
β”‚ β”‚ :3000 β”‚ β”‚ :8000 β”‚ β”‚ :27017 β”‚ β”‚ :6379 β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Stellio β”‚ β”‚ Fuseki β”‚ β”‚ Grafana β”‚ β”‚
β”‚ β”‚ :8080 β”‚ β”‚ :3030 β”‚ β”‚ :3001 β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Quick Start​

1. Clone Repository​

git clone https://github.com/UIP-Urban-Intelligence-Platform/UIP-Urban_Intelligence_Platform.git
cd UIP-Urban_Intelligence_Platform

2. Environment Setup​

# Copy example environment file
cp .env.example .env

# Edit configuration
nano .env

CÑc biến môi trường quan trọng:

# Application
APP_ENV=production
APP_DEBUG=false

# MongoDB
MONGODB_HOST=mongodb
MONGODB_PORT=27017
MONGODB_DATABASE=uip

# Redis
REDIS_HOST=redis
REDIS_PORT=6379

# Stellio (NGSI-LD Context Broker)
STELLIO_URL=http://stellio:8080

# Fuseki (RDF Triple Store)
FUSEKI_URL=http://fuseki:3030

# API Keys (optional)
CAMERA_API_KEY=your_camera_api_key

3. Build vΓ  Start​

# Build all images
docker compose build

# Start all services
docker compose up -d

# Check status
docker compose ps

4. Verify Services​

# Check all containers are running
docker compose ps

# View logs
docker compose logs -f

# Test API endpoint
curl http://localhost:8000/health

πŸ“¦ Docker Compose Services​

docker-compose.yml breakdown​

version: "3.8"

services:
# Frontend - React Dashboard
frontend:
build:
context: ./apps/traffic-web-app/frontend
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- REACT_APP_API_URL=http://localhost:8000
depends_on:
- backend

# Backend - FastAPI Server
backend:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
environment:
- MONGODB_URL=mongodb://mongodb:27017
- REDIS_URL=redis://redis:6379
depends_on:
- mongodb
- redis
volumes:
- ./data:/app/data
- ./logs:/app/logs

# MongoDB - Primary Database
mongodb:
image: mongo:6
ports:
- "27017:27017"
volumes:
- mongodb_data:/data/db
healthcheck:
test: mongosh --eval 'db.runCommand("ping").ok'
interval: 10s
timeout: 5s
retries: 5

# Redis - Caching & Message Queue
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes

# Stellio - NGSI-LD Context Broker
stellio:
image: stellio/stellio-context-broker:latest
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=docker
depends_on:
- postgres
- kafka

# Fuseki - RDF Triple Store
fuseki:
image: stain/jena-fuseki
ports:
- "3030:3030"
volumes:
- fuseki_data:/fuseki
environment:
- ADMIN_PASSWORD=admin

volumes:
mongodb_data:
redis_data:
fuseki_data:

πŸ”§ Advanced Configuration​

Production Settings​

# docker-compose.prod.yml
services:
backend:
deploy:
replicas: 3
resources:
limits:
cpus: '2'
memory: 4G
restart_policy:
condition: on-failure
max_attempts: 3

GPU Support for YOLOX​

# docker-compose.gpu.yml
services:
cv-detector:
build:
context: .
dockerfile: Dockerfile.gpu
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]

πŸ“Š Monitoring​

Grafana Dashboard​

  1. Access Grafana: http://localhost:3001
  2. Default credentials: admin/admin
  3. Import dashboard: config/grafana_dashboard.json

Health Checks​

# Check all services
./scripts/health_check.sh

# Output:
# βœ… Frontend: healthy
# βœ… Backend: healthy
# βœ… MongoDB: healthy
# βœ… Redis: healthy
# βœ… Stellio: healthy
# βœ… Fuseki: healthy

πŸ”„ Common Operations​

Restart Services​

# Restart all
docker compose restart

# Restart specific service
docker compose restart backend

View Logs​

# All logs
docker compose logs -f

# Specific service
docker compose logs -f backend

# Last 100 lines
docker compose logs --tail=100 backend

Scale Services​

# Scale backend to 3 instances
docker compose up -d --scale backend=3

Backup Data​

# Backup MongoDB
docker exec mongodb mongodump --out /backup

# Backup Fuseki
docker exec fuseki /fuseki/bin/s-copy default backup.nq

πŸ› οΈ Troubleshooting​

Common Issues​

IssueSolution
Port already in usedocker compose down then change ports in .env
Out of memoryIncrease Docker memory limit
Permission deniedRun sudo chmod -R 777 ./data ./logs
Container won't startCheck logs with docker compose logs <service>

Reset Everything​

# Stop and remove all containers, volumes, networks
docker compose down -v

# Rebuild from scratch
docker compose build --no-cache
docker compose up -d

πŸ“š Resources​


CΓ’u hỏi? Mở issue trΓͺn GitHub

Nguyα»…n Việt HoΓ ng - Full-Stack Developer @ UIP Team