Xử lý sự cố
Hướng dẫn này giúp chẩn đoán và giải quyết các vấn đề phổ biến trong LegoCity.
Chẩn đoán nhanh
Kiểm tra trạng thái hệ thống
# Kiểm tra các dịch vụ đang chạy
docker compose ps
# Kiểm tra logs
docker compose logs dashboard
docker compose logs orion-ld
# Kiểm tra kết nối database
mongosh legocity --eval "db.stats()"
# Kiểm tra health endpoint
curl http://localhost:3000/api/healthLỗi phổ biến và giải pháp nhanh
| Triệu chứng | Nguyên nhân có thể | Giải pháp nhanh |
|---|---|---|
| Dashboard không load | Biến môi trường thiếu | Kiểm tra .env và restart |
| Map trống | Mapbox token không hợp lệ | Verify token trong .env |
| API trả về 500 | Database connection thất bại | Kiểm tra MongoDB đang chạy |
| Admin panel 404 | Build không hoàn thành | Chạy pnpm build và restart |
| "Cannot find module" | Dependencies thiếu | Chạy pnpm install |
| Port đã được sử dụng | Ứng dụng khác đang chạy | Đổi port hoặc kill process cũ |
| TypeScript errors sau khi pull | Types đã thay đổi | Chạy pnpm payload generate:types |
| Orion không phản hồi | Container chưa sẵn sàng | Đợi ~10s sau docker compose up |
Vấn đề cài đặt
Node.js Version Mismatch
Vấn đề: Lỗi khi chạy pnpm install hoặc pnpm dev
Nguyên nhân: Node.js version không đúng (cần >= 18.17.0)
Giải pháp:
# Kiểm tra version hiện tại
node --version
# Nếu < 18.17.0, cài đặt Node.js mới
# Sử dụng nvm (recommended):
nvm install 18
nvm use 18
# Hoặc tải từ nodejs.orgpnpm Not Found
Vấn đề: pnpm: command not found
Giải pháp:
# Cài đặt pnpm globally
npm install -g pnpm
# Hoặc sử dụng Corepack (Node 16.13+)
corepack enable
corepack prepare pnpm@latest --activateDocker Build Fails
Vấn đề: docker compose build thất bại
Các bước debug:
Kiểm tra disk space:
bashdf -hClean Docker cache:
bashdocker system prune -a docker volume pruneBuild với output chi tiết:
bashdocker compose build --no-cache --progress=plainCheck Docker daemon:
bashdocker info
MongoDB Connection Error
Vấn đề: MongoNetworkError: connect ECONNREFUSED
Giải pháp:
Kiểm tra MongoDB đang chạy:
bash# Với Docker docker compose ps mongodb # Local MongoDB sudo systemctl status mongodKiểm tra DATABASE_URI:
bash# Phải match với Docker service name DATABASE_URI=mongodb://mongodb:27017/legocityKhởi động lại MongoDB:
bashdocker compose restart mongodb
Vấn đề khi Development
Build Failures
Vấn đề: pnpm build thất bại với lỗi TypeScript hoặc compilation
Giải pháp:
Regenerate types:
bashpnpm payload generate:typesClear cache:
bashrm -rf .next rm -rf node_modules/.cacheOut of memory:
bash# Tăng Node memory NODE_OPTIONS="--max-old-space-size=4096" pnpm buildModule not found:
bash# Cài đặt lại dependencies rm -rf node_modules pnpm-lock.yaml pnpm install
Vấn đề Runtime
Màn hình trắng / Trang trống
Vấn đề: Trang load nhưng không hiển thị gì
Các bước debug:
Kiểm tra browser console để tìm lỗi JavaScript
Kiểm tra Network tab để tìm request thất bại
Verify environment variables:
bash# Các biến bắt buộc đã set? echo $DATABASE_URI echo $PAYLOAD_SECRET echo $NEXT_PUBLIC_SERVER_URLKiểm tra server logs:
bashpnpm dev # Tìm lỗi trong terminal
Map không hiển thị
Vấn đề: Khu vực map trống hoặc hiển thị lỗi
Giải pháp:
Verify Mapbox token:
bash# Kiểm tra token đã set echo $NEXT_PUBLIC_MAPBOX_TOKEN # Test token curl "https://api.mapbox.com/v4/mapbox.mapbox-streets-v8.json?access_token=$NEXT_PUBLIC_MAPBOX_TOKEN"Kiểm tra console để tìm lỗi:
- Mở browser DevTools → Console
- Tìm lỗi liên quan đến Mapbox
Verify token scope:
- Token phải có quyền
styles:readvàfonts:read - Tạo token mới tại mapbox.com
- Token phải có quyền
Admin Panel 404
Vấn đề: Route /admin không tìm thấy
Giải pháp:
Rebuild application:
bashrm -rf .next pnpm build pnpm startKiểm tra Payload config:
typescript// payload.config.ts admin: { autoLogin: false, // Phải là false trong production }Verify admin routes tồn tại:
bashls src/app/\(payload\)/admin
API Route trả về 500
Vấn đề: API endpoint throw server error
Debug:
Kiểm tra server logs để tìm chi tiết lỗi
Test với curl:
bashcurl -v http://localhost:3000/api/your-endpointThêm logging:
typescriptexport async function GET(req: Request) { try { console.log("Request:", req.url); // ... code của bạn } catch (error) { console.error("Error:", error); return Response.json({ error: error.message }, { status: 500 }); } }
Vấn đề Database
Database Connection chậm
Vấn đề: Queries chậm hoặc timeout
Giải pháp:
Thêm indexes:
javascript// Trong MongoDB shell db.pages.createIndex({ slug: 1 }); db.posts.createIndex({ publishedAt: -1 });Monitor slow queries:
javascriptdb.setProfilingLevel(2); db.system.profile.find().sort({ ts: -1 }).limit(10);Kiểm tra database stats:
bashmongosh legocity --eval "db.stats()"
Collection Not Found
Vấn đề: Collection 'pages' not found
Giải pháp:
Kiểm tra collection name khớp với config:
typescript// collections/Pages.ts slug: "pages"; // Phải khớpVerify database:
bashmongosh legocity --eval "show collections"Seed database:
bashpnpm seed
Database Migration Failed
Vấn đề: Schema changes không được áp dụng
Giải pháp:
# Backup trước!
mongodump --db legocity --out ./backup
# Drop và recreate
mongosh legocity --eval "db.dropDatabase()"
pnpm seed
# Hoặc restore backup
mongorestore --db legocity ./backup/legocityVấn đề Docker
Container thoát ngay lập tức
Vấn đề: Docker container khởi động rồi dừng
Debug:
# Kiểm tra logs
docker compose logs dashboard
# Kiểm tra lỗi trong build
docker compose build --no-cache dashboard
# Chạy interactive
docker compose run --rm dashboard shKhông thể kết nối tới Service
Vấn đề: Frontend không thể reach MongoDB/Orion
Giải pháp:
Sử dụng service names, không phải localhost:
bash# ❌ Sai DATABASE_URI=mongodb://localhost:27017/legocity # ✅ Đúng DATABASE_URI=mongodb://mongodb:27017/legocityKiểm tra network:
bashdocker compose ps docker network lsTest connectivity:
bashdocker compose exec dashboard ping mongodb
Volume Permission Issues
Vấn đề: Permission denied errors (Linux)
Giải pháp:
# Fix ownership
sudo chown -R $USER:$USER ./dashboard
# Hoặc chạy với current user
docker compose run --user "$(id -u):$(id -g)" dashboard pnpm devVấn đề Production
502 Bad Gateway
Vấn đề: Nginx hiển thị lỗi 502
Giải pháp:
Kiểm tra app đang chạy:
bashpm2 status # Hoặc systemctl status legocityKiểm tra Nginx config:
bashsudo nginx -t sudo systemctl reload nginxKiểm tra logs:
bash# App logs pm2 logs # Nginx logs sudo tail -f /var/log/nginx/error.log
Memory Leak
Vấn đề: Memory usage của ứng dụng tăng liên tục
Giải pháp:
Monitor memory:
bash# PM2 monitoring pm2 monit # Hoặc sử dụng htop htopSet memory limit:
javascript// ecosystem.config.js module.exports = { apps: [ { name: "legocity", script: "node_modules/next/dist/bin/next", args: "start", max_memory_restart: "1G", }, ], };Profile memory:
bashnode --inspect node_modules/next/dist/bin/next start # Sử dụng Chrome DevTools để profile
SSL Certificate Issues
Vấn đề: HTTPS không hoạt động hoặc lỗi certificate
Giải pháp:
Kiểm tra certificate validity:
bashsudo certbot certificatesRenew certificate:
bashsudo certbot renew sudo systemctl reload nginxTest SSL config:
bashcurl -vI https://your-domain.com
Vấn đề Performance
Trang load chậm
Vấn đề: Các trang mất quá nhiều thời gian để load
Giải pháp:
Enable caching:
typescript// app/page.tsx export const revalidate = 60; // ISR mỗi 60sOptimize images:
tsximport Image from "next/image"; <Image src="/image.jpg" width={800} height={600} alt="Description" />;Sử dụng dynamic imports:
typescriptconst HeavyComponent = dynamic(() => import("./HeavyComponent"), { loading: () => <p>Loading...</p>, });Analyze bundle:
bashpnpm build --analyze
High CPU Usage
Vấn đề: CPU tăng cao trong hoạt động bình thường
Kiểm tra:
Profile application:
bashnode --prof node_modules/next/dist/bin/next start node --prof-process isolate-*.log > profile.txtKiểm tra infinite loops trong code
Monitor processes:
bashtop -p $(pgrep node)
Nhận thêm trợ giúp
Thu thập thông tin chẩn đoán
Trước khi yêu cầu trợ giúp, thu thập:
# System info
node --version
pnpm --version
mongosh --version
# App info
cat package.json | grep version
# Environment
echo $NODE_ENV
env | grep -E '(DATABASE|PAYLOAD|NEXT_PUBLIC)'
# Logs
pnpm dev > debug.log 2>&1
# Health check
curl http://localhost:3000/api/healthNơi nhận trợ giúp
- 🐛 Bug Reports: GitHub Issues
- 💬 Questions: GitHub Discussions
- 📖 Documentation: LegoCity Docs
- 📧 Email: CTU-SematX Team
Issue Template
Khi báo cáo issues:
**Mô tả vấn đề**
Mô tả rõ ràng điều gì sai
**Các bước tái hiện**
1. Làm việc này
2. Rồi làm việc này
3. Thấy lỗi
**Hành vi mong đợi**
Điều gì nên xảy ra
**Môi trường**
- OS: [ví dụ: Windows 11]
- Node: [ví dụ: 18.17.0]
- pnpm: [ví dụ: 8.6.0]
- Browser: [ví dụ: Chrome 115]
**Logs**Paste logs liên quan ở đây
**Screenshots**
Nếu cóVẫn bị stuck? Hỏi trong GitHub Discussions - chúng tôi ở đây để giúp đỡ!