專案代號: B2BC
版本: 2.1.0
更新日期: 2026-03-03
狀態: 生產就緒
- 專案概述
- 系統架構
- 前置需求
- 環境配置
- 本地開發環境
- 生產部署
- Docker 部署
- 監控系統
- 資料庫設置
- 測試帳號
- API 文件
- 故障排除
- 安全配置
- 維運指南
B2BC (Business-to-Business Collective) 是一個現代化的企業對企業團購平台,提供:
| 功能模組 |
說明 |
| B2B 採購 |
供應商與團購主之間的批發交易 |
| B2C 銷售 |
團購主向消費者的零售團購 |
| 財務系統 |
預繳餘額、平台費用、自动扣費 |
| 關係管理 |
供應商-團購主-消費者關係管理 |
| 驗證系統 |
用戶身份驗證與分級 |
| 即時下單 |
無購物車直接下單,1小時內可撤銷 |
| 元件 |
技術 |
版本 |
| 後端 API |
NestJS + TypeORM |
Node.js 18+ |
| 資料庫 |
PostgreSQL + PostGIS |
15+ |
| 緩存 |
Redis |
6+ |
| 前端後台 |
React + Ant Design |
Vite 5+ |
| 行動應用 |
Flutter |
3.0+ |
| 監控 |
Prometheus + Grafana |
- |
┌─────────────────────────────────────────────────────────────────────┐
│ B2BC 系統架構 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ React + Ant Design (統一後台) │ │
│ │ • 總管理員視角 (super_admin) │ │
│ │ • 供應商視角 (supplier) │ │
│ │ • 團購主視角 (leader) │ │
│ │ • 消費者商店 (consumer) │ │
│ └────────────────────────────┬───────────────────────────────────┘ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ NestJS API Server │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │ │
│ │ │ Auth API │ │ B2B API │ │ B2C API │ │ Finance API│ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └────────────┘ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │ │
│ │ │ Cart API │ │ Invite API │ │ Bonus API │ │ Notify API │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └────────────┘ │ │
│ └────────────────────────────┬───────────────────────────────────┘ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ PostgreSQL 15 + PostGIS 3.4 │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ 統一 Flutter App (依 role 顯示不同功能) │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
| 角色 |
後台視角 |
API 權限 |
| super_admin |
總後台全部功能 |
所有 API |
| supplier |
供應商管理 |
B2B, 財務, 訂單 |
| leader |
團購主管理 |
B2B 採購, B2C, 訂單 |
| consumer |
消費者商店 |
B2C 購買, 購物金 |
| 環境 |
CPU |
RAM |
磁碟 |
| 開發環境 |
2 核心 |
4 GB |
20 GB |
| 生產環境 |
4 核心 |
8 GB |
50 GB |
# 必需軟體
- Node.js >= 18.0.0
- npm >= 9.0.0
- PostgreSQL >= 15.0
- Redis >= 6.0
- Docker >= 24.0
- Docker Compose >= 2.0
# 開發工具 (可選)
- Git
- VS Code (推薦)
- PostgreSQL Client (pgAdmin/DBeaver)
# 使用 nvm 安裝 (推薦)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 18
nvm use 18
# 或直接安裝
# https://nodejs.org/
# Ubuntu/Debian
sudo apt update
sudo apt install docker.io docker-compose
# 啟動 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 將用戶加入 docker 群組
sudo usermod -aG docker $USER
# 複製開發環境配置
cp .env.example .env
# 複製生產環境配置模板
cp .env.production.template .env.production
# ===========================================
# 資料庫配置
# ===========================================
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=your_password
DB_DATABASE=b2bc
# ===========================================
# Redis 配置
# ===========================================
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
# ===========================================
# API 伺服器配置
# ===========================================
PORT=3000
NODE_ENV=development
# ===========================================
# JWT 配置
# ===========================================
JWT_SECRET=your-super-secret-jwt-key-change-in-production
JWT_EXPIRES_IN=7d
JWT_REFRESH_SECRET=your-refresh-secret-key-change-in-production
JWT_REFRESH_EXPIRES_IN=30d
# ===========================================
# 前端配置
# ===========================================
VITE_API_URL=http://localhost:3000
VITE_APP_TITLE=B2BC 管理系統
# 生產環境必須修改以下變數
JWT_SECRET=$(openssl rand -base64 32)
JWT_REFRESH_SECRET=$(openssl rand -base64 32)
DB_PASSWORD=$(openssl rand -base64 16)
REDIS_PASSWORD=$(openssl rand -base64 16)
# 安裝 API 伺服器依賴
cd api-server
npm install
# 安裝前端依賴
cd ../admin-web
npm install
# 使用 Docker 啟動 PostgreSQL 和 Redis
cd ..
docker-compose -f docker/docker-compose.dev.yml up -d
# 驗證服務運行
docker-compose -f docker/docker-compose.dev.yml ps
# 執行資料庫遷移
cd api-server
npm run migration:run
# 或者同步實體 (開發環境)
npm run sync-entities
# 終端機 1: 啟動 API 伺服器
cd api-server
npm run start:dev
# 終端機 2: 啟動前端
cd admin-web
npm run dev
# 部署前確認事項
- [ ] 生產資料庫已配置並可訪問
- [ ] Redis 實例已配置密碼
- [ ] 所有環境變數已正確設置
- [ ] SSL/TLS 憑證已準備
- [ ] 備份策略已配置
- [ ] 監控系統已設置
# 給腳本執行權限
chmod +x scripts/deploy-production.sh
# 執行部署
./scripts/deploy-production.sh
# 1. 构建后端
cd api-server
npm run build
# 2. 构建前端
cd ../admin-web
npm run build
# 3. 启动服务 (使用 PM2)
cd ../api-server
pm2 start dist/main.js --name b2bc-api
# 4. 配置 Nginx 反向代理
sudo cp nginx-prod.conf /etc/nginx/sites-available/b2bc
sudo nginx -t
sudo systemctl reload nginx
# 構建 API 伺服器映像
cd api-server
docker build -t b2bc-api:latest .
# 構建前端映像
cd ../admin-web
docker build -t b2bc-admin:latest .
# 啟動所有服務
docker-compose -f docker/docker-compose.prod.yml up -d
# 查看服務狀態
docker-compose -f docker/docker-compose.prod.yml ps
# 查看日誌
docker-compose -f docker/docker-compose.prod.yml logs -f
# docker/docker-compose.prod.yml
version: '3.8'
services:
postgres:
image: postgis/postgis:15-3.4
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: b2bc
volumes:
- postgres_data:/var/lib/postgresql/data
restart: always
redis:
image: redis:7-alpine
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
restart: always
api:
image: b2bc-api:latest
environment:
- NODE_ENV=production
- DB_HOST=postgres
- REDIS_HOST=redis
depends_on:
- postgres
- redis
restart: always
admin:
image: b2bc-admin:latest
ports:
- "80:80"
depends_on:
- api
volumes:
postgres_data:
redis_data:
# 啟動監控堆疊
docker-compose -f monitoring/docker-compose.monitoring.yml up -d
- 系統指標: CPU、記憶體、磁碟使用率
- API 指標: 請求延遲、錯誤率、併發數
- 資料庫指標: 連接數、查詢延遲、慢查詢
- 業務指標: 訂單數、活躍用戶、營業額
# 執行初始化腳本
psql -U postgres -d b2bc -f init-scripts/init.sql
# 使用初始化腳本創建測試用戶
bash scripts/init-users.sh
# 初始化 B2B 商品類別
bash scripts/init-categories.sh
部署完成後訪問: http://localhost:3000/api/docs
# 認證
POST /api/auth/register
POST /api/auth/login
POST /api/auth/refresh
POST /api/auth/logout
GET /api/auth/me
# B2B
GET /api/b2b/products
POST /api/b2b/products
GET /api/b2b/orders
POST /api/b2b/orders
GET /api/b2b/relationships
POST /api/b2b/relationships
# B2C
GET /api/b2c/products
GET /api/b2c/products/nearby
POST /api/b2c/orders
GET /api/b2c/orders
GET /api/b2c/pickup-points
# 財務
GET /api/bonus
GET /api/fees
GET /api/payments
# 購物車
GET /api/cart
POST /api/cart/items
PUT /api/cart/items/:id
DELETE /api/cart/items/:id
# 驗證
GET /api/verification/status
POST /api/verification/validate-id
POST /api/verification/upload-document
# 檢查 PostgreSQL 服務狀態
docker-compose ps postgres
# 檢查連接
psql -h localhost -U postgres -d b2bc
# 檢查日誌
docker-compose logs postgres
# 測試 Redis 連接
redis-cli -h localhost -p 6379 -a your_password ping
# 檢查日誌
docker-compose logs redis
# 檢查端口是否被佔用
lsof -i :3000
# 檢查環境變數
cd api-server
npm run start:dev
# 查看詳細錯誤日誌
npm run start:dev 2>&1 | tee logs/error.log
# 清除緩存並重新安裝
cd admin-web
rm -rf node_modules package-lock.json
npm install
# 檢查 TypeScript 錯誤
npm run typecheck
| 服務 |
日誌位置 |
| API 伺服器 |
api-server/logs/ |
| Docker |
docker logs <container-name> |
| Nginx |
/var/log/nginx/ |
| Systemd |
journalctl -u b2bc-api |
# nginx-prod.conf
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://localhost:5173;
}
location /api {
proxy_pass http://localhost:3000;
}
}
# 資料庫備份 (每日)
pg_dump -U postgres b2bc > backup_$(date +%Y%m%d).sql
# 清理舊備份 (保留 30 天)
find /backups -name "*.sql" -mtime +30 -delete
# 清理 Docker 資源
docker system prune -f
# 檢查服務狀態
docker-compose ps
# 檢查資源使用
docker stats
# 檢查磁碟空間
df -h
# 重啟單一服務
docker-compose restart api
# 滾動回滾
docker-compose down
docker-compose -f docker-compose.backup.yml up -d
# 恢復資料庫
psql -U postgres b2bc < backup_20260301.sql
B2BC/
├── api-server/ # NestJS 後端
│ ├── src/
│ │ ├── modules/ # 功能模組
│ │ │ ├── auth/ # 認證
│ │ │ ├── b2b/ # B2B 業務
│ │ │ ├── b2c/ # B2C 業務
│ │ │ ├── finance/ # 財務系統
│ │ │ └── ...
│ │ └── main.ts
│ ├── dist/ # 編譯輸出
│ └── Dockerfile
│
├── admin-web/ # React 前端
│ ├── src/
│ │ ├── components/ # 共用元件
│ │ ├── pages/ # 頁面
│ │ ├── services/ # API 服務
│ │ └── context/ # 狀態管理
│ ├── dist/ # 編譯輸出
│ └── Dockerfile
│
├── doc/ # 專案文檔
│ ├── deployment/ # 部署文檔
│ ├── development/ # 開發文檔
│ └── reports/ # 測試報告
│
├── docker/ # Docker 配置
├── monitoring/ # 監控配置
├── scripts/ # 部署腳本
└── init-scripts/ # 資料庫初始化
# 開發環境
npm run dev # 啟動開發伺服器
npm run build # 構建生產版本
npm run lint # 程式碼檢查
# Docker
docker-compose up -d # 啟動服務
docker-compose down # 停止服務
docker-compose logs -f # 查看日誌
# 資料庫
npm run migration:run # 執行遷移
npm run sync-entities # 同步實體
# PM2
pm2 list # 查看進程
pm2 logs # 查看日誌
pm2 restart all # 重啟所有服務
文件資訊
- 建立日期: 2026-02-28
- 更新日期: 2026-03-03
- 版本: 2.1.0
- 專案狀態: 生產就緒
如需更多詳細信息,請參閱 doc/ 目錄中的其他文檔。