Hướng dẫn thiết lập Docker
Chạy LegoCity trong containers với Docker Compose - cách nhanh nhất để bắt đầu.
Tổng quan
Ưu điểm:
- ✅ Thiết lập một lệnh
- ✅ Tất cả các dịch vụ được đóng gói trong container (Next.js, MongoDB, Orion-LD)
- ✅ Nhất quán giữa các môi trường
- ✅ Dễ dàng dọn dẹp
Nhược điểm:
- ⚠️ Ít linh hoạt cho phát triển
- ⚠️ Yêu cầu Docker Desktop (Windows/Mac) hoặc Docker Engine (Linux)
Yêu cầu
Cài đặt Docker
Windows:
Tải và cài đặt Docker Desktop for Windows
powershell
# Kiểm tra cài đặt
docker --version
docker compose versionmacOS:
Tải và cài đặt Docker Desktop for Mac
bash
# Kiểm tra cài đặt
docker --version
docker compose versionLinux:
bash
# Cài Docker Engine
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Cài Docker Compose
sudo apt install docker-compose-plugin
# Thêm user vào docker group
sudo usermod -aG docker $USER
newgrp docker
# Kiểm tra
docker --version
docker compose versionYêu cầu hệ thống
- RAM: Tối thiểu 4 GB, khuyến nghị 8 GB
- Storage: 10 GB dung lượng trống
- CPU: Tối thiểu 2 cores
Khởi động nhanh
1. Clone Kho lưu trữ
bash
git clone https://github.com/CTU-SematX/LegoCity.git
cd LegoCity2. Cấu hình Environment
bash
# Copy file environment mẫu
cp dashboard/.env.example dashboard/.envChỉnh sửa dashboard/.env:
bash
# Database (sử dụng tên dịch vụ Docker)
DATABASE_URI=mongodb://mongodb:27017/legocity
# Bảo mật
PAYLOAD_SECRET=your-secret-key-min-32-chars
# Server (expose ra host)
NEXT_PUBLIC_SERVER_URL=http://localhost:3000
# Mapbox
NEXT_PUBLIC_MAPBOX_TOKEN=pk.your_mapbox_token
# NGSI-LD Broker (sử dụng tên dịch vụ Docker)
NGSI_LD_BROKER_URL=http://orion:10263. Khởi động tất cả Dịch vụ
bash
docker compose up -dLệnh này sẽ khởi động:
- Bảng điều khiển (Next.js + PayloadCMS) - Port 3000
- MongoDB - Port 27017
- Orion-LD (NGSI-LD Broker) - Port 1026
4. Kiểm tra Dịch vụ
bash
# Xem trạng thái containers
docker compose ps
# Xem logs
docker compose logs -f dashboard5. Truy cập Bảng điều khiển
Mở trình duyệt:
- Bảng điều khiển: http://localhost:3000
- Bảng quản trị: http://localhost:3000/admin
- Orion-LD API: http://localhost:1026
Docker Compose File
File docker-compose.yml mặc định:
yaml
version: "3.8"
services:
dashboard:
build:
context: ./dashboard
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- DATABASE_URI=mongodb://mongodb:27017/legocity
- PAYLOAD_SECRET=${PAYLOAD_SECRET}
- NEXT_PUBLIC_MAPBOX_TOKEN=${NEXT_PUBLIC_MAPBOX_TOKEN}
depends_on:
- mongodb
volumes:
- ./dashboard:/app
- /app/node_modules
command: pnpm dev
mongodb:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- mongodb_data:/data/db
orion:
image: fiware/orion-ld:latest
ports:
- "1026:1026"
depends_on:
- mongodb
command: -dbhost mongodb -logLevel DEBUG
volumes:
mongodb_data:Quản lý Services
Khởi động
bash
# Khởi động tất cả
docker compose up -d
# Khởi động service cụ thể
docker compose up -d dashboard
# Xem logs real-time
docker compose logs -fDừng
bash
# Dừng tất cả
docker compose down
# Dừng và xóa volumes
docker compose down -v
# Giữ lại data
docker compose stopKhởi động lại
bash
# Khởi động lại tất cả
docker compose restart
# Khởi động lại service cụ thể
docker compose restart dashboardRebuild
bash
# Rebuild tất cả images
docker compose build
# Rebuild và khởi động
docker compose up -d --build
# Rebuild service cụ thể
docker compose build dashboardPhát triển với Docker
Hot Reload
File docker-compose.yml đã được cấu hình với volumes để enable hot reload:
yaml
volumes:
- ./dashboard:/app
- /app/node_modules # Preserve node_modules in containerChanges trong ./dashboard sẽ tự động reflect trong container.
Chạy Commands trong Container
bash
# Mở shell trong dashboard container
docker compose exec dashboard sh
# Chạy pnpm commands
docker compose exec dashboard pnpm install
docker compose exec dashboard pnpm add <package>
# Chạy tests
docker compose exec dashboard pnpm testTruy cập Database
bash
# Mở MongoDB shell
docker compose exec mongodb mongosh
# Hoặc từ host (nếu có mongosh)
mongosh mongodb://localhost:27017/legocityKiểm tra Orion-LD
bash
# Health check
curl http://localhost:1026/version
# Lấy entities
curl http://localhost:1026/ngsi-ld/v1/entitiesTùy chỉnh cấu hình
Environment Variables
Tạo file .env trong root:
bash
# Dashboard
PAYLOAD_SECRET=your-secret-here
NEXT_PUBLIC_MAPBOX_TOKEN=pk.your_token
NEXT_PUBLIC_SERVER_URL=http://localhost:3000
# Database
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=password
# Orion-LD
ORION_LOG_LEVEL=INFOCustom Ports
Chỉnh docker-compose.yml:
yaml
services:
dashboard:
ports:
- "3001:3000" # Host:Container
mongodb:
ports:
- "27018:27017"Persistent Storage
Volumes được tự động tạo và quản lý:
bash
# Liệt kê volumes
docker volume ls
# Xem chi tiết volume
docker volume inspect legocity_mongodb_data
# Backup volume
docker run --rm -v legocity_mongodb_data:/data -v $(pwd):/backup \
ubuntu tar czf /backup/mongodb-backup.tar.gz /dataThiết lập sản xuất
Optimized Dockerfile
Tạo dashboard/Dockerfile.prod:
dockerfile
FROM node:20-alpine AS base
# Dependencies
FROM base AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile
# Builder
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm build
# Runner
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
EXPOSE 3000
CMD ["node", "server.js"]Production Compose
Tạo docker-compose.prod.yml:
yaml
version: "3.8"
services:
dashboard:
build:
context: ./dashboard
dockerfile: Dockerfile.prod
restart: always
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- mongodb
mongodb:
image: mongo:latest
restart: always
volumes:
- mongodb_data:/data/db
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_USER}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
orion:
image: fiware/orion-ld:latest
restart: always
depends_on:
- mongodb
command: -dbhost mongodb -logLevel INFO
volumes:
mongodb_data:Chạy production:
bash
docker compose -f docker-compose.prod.yml up -dXử lý sự cố
Container không khởi động
bash
# Xem logs chi tiết
docker compose logs dashboard
# Kiểm tra configuration
docker compose config
# Xem container status
docker compose ps -aPort conflicts
bash
# Tìm process đang dùng port
# Windows
netstat -ano | findstr :3000
# macOS/Linux
lsof -i :3000
# Thay đổi port trong docker-compose.ymlMemory issues
bash
# Tăng memory limit cho Docker Desktop
# Settings → Resources → Memory
# Hoặc trong docker-compose.yml:
services:
dashboard:
deploy:
resources:
limits:
memory: 2GNetwork issues
bash
# Tạo lại network
docker compose down
docker network prune
docker compose up -d
# Debug network
docker network inspect legocity_defaultCleanup
Xóa tất cả
bash
# Dừng và xóa containers, networks
docker compose down
# Xóa thêm volumes (XÓA DỮ LIỆU!)
docker compose down -v
# Xóa images
docker compose down --rmi allXóa selective
bash
# Chỉ xóa containers
docker compose rm
# Xóa unused images
docker image prune
# Xóa unused volumes
docker volume pruneCác bước tiếp theo
- 📚 Phát triển cục bộ - Phát triển không dùng Docker
- ⚙️ Hướng dẫn cấu hình
- 🚀 Production Deployment
- 🔧 Khắc phục sự cố