# ISO 27001 資產盤點系統 - 快速啟動指南

## 🚀 5 分鐘快速啟動

### 前提需求
- Docker & Docker Compose
- Node.js 16+ (用於前端開發)

### 步驟 1: 啟動後端服務

```bash
# 進入專案目錄
cd /root/projects/iso27001-system

# 啟動 Docker 容器
docker compose up -d

# 等待服務啟動 (約 30 秒)
docker compose ps
```

### 步驟 2: 創建測試資料

```bash
# 執行示範資料產生器
docker compose exec backend python create_sample_data.py
```

### 步驟 3: 啟動前端 (開發模式)

```bash
# 開啟新終端
cd /root/projects/iso27001-system/frontend

# 安裝依賴 (首次執行)
npm install

# 啟動開發伺服器
npm start
```

### 步驟 4: 訪問系統

```
前端介面: http://localhost:3000
後端 API: http://localhost:8000/api/
後端 Admin: http://localhost:8000/admin/
```

### 測試帳號

```
管理員: admin / demo1234
資安主管: security_officer / demo1234
稽核員: auditor / demo1234
IT主管: it_manager / demo1234
一般員工: hr_staff / demo1234
```

---

## 🎯 功能導覽

### 1. 登入系統
1. 訪問 http://localhost:3000
2. 輸入帳號密碼 (例如: admin / demo1234)
3. 點擊「登入」

### 2. 查看儀表板
- 顯示資產統計資訊
- 快速連結按鈕

### 3. 管理資產清單
1. 點擊側邊選單「資產管理」
2. 查看資產列表
3. 使用搜尋框搜尋資產
4. 使用篩選器過濾資產類型/狀態
5. 點擊「查看」查看詳情
6. 點擊「編輯」編輯資產
7. 點擊「刪除」刪除資產

### 4. 新增資產
1. 點擊「新增資產」按鈕
2. 填寫資產資訊
   - 資產名稱 (必填)
   - 資產類型 (必填)
   - CIA 等級
   - 其他資訊
3. 點擊「提交」儲存

### 5. 匯出資產
1. 在資產列表頁
2. 點擊「匯出」按鈕
3. 選擇格式 (CSV)
4. 下載檔案

---

## 🔧 常見問題

### Q1: Docker 容器無法啟動？
```bash
# 檢查 Docker 服務狀態
sudo systemctl status docker

# 啟動 Docker 服務
sudo systemctl start docker

# 重新啟動容器
docker compose down
docker compose up -d
```

### Q2: 前端無法連接後端？
- 檢查後端是否運行: `docker compose ps`
- 檢查後端日誌: `docker compose logs backend`
- 確認 CORS 設定正確

### Q3: 忘記密碼？
```bash
# 進入 Django shell
docker compose exec backend python manage.py shell

# 重設密碼
from accounts.models import User
user = User.objects.get(username='admin')
user.set_password('new_password')
user.save()
exit()
```

### Q4: 如何重置資料庫？
```bash
# ⚠️ 警告: 這會刪除所有資料
docker compose down -v
docker compose up -d
docker compose exec backend python manage.py migrate
docker compose exec backend python create_sample_data.py
```

### Q5: 前端編譯錯誤？
```bash
# 清除快取並重新安裝
cd frontend
rm -rf node_modules package-lock.json
npm install
npm start
```

---

## 📊 系統監控

### 檢查服務狀態
```bash
docker compose ps
```

### 查看日誌
```bash
# 後端日誌
docker compose logs -f backend

# 資料庫日誌
docker compose logs -f db

# 所有服務日誌
docker compose logs -f
```

### 檢查資料庫
```bash
# 進入 PostgreSQL
docker compose exec db psql -U postgres -d iso27001

# 查看資料表
\dt

# 查看資產數量
SELECT asset_type, COUNT(*) FROM assets_asset WHERE deleted_at IS NULL GROUP BY asset_type;

# 離開
\q
```

### 效能監控
```bash
# 查看容器資源使用
docker stats

# 查看後端記憶體使用
docker compose exec backend ps aux
```

---

## 🛠️ 開發工具

### Django Admin
- URL: http://localhost:8000/admin/
- 帳號: admin / demo1234
- 功能: 管理所有資料模型

### API 文件 (計劃中)
- URL: http://localhost:8000/api/docs/
- 工具: Swagger UI
- 功能: 測試 API 端點

### PostgreSQL 管理工具
```bash
# 使用 pgAdmin 或 DBeaver 連接
Host: localhost
Port: 5432
Database: iso27001
Username: postgres
Password: postgres
```

---

## 🧪 測試指令

### 後端測試
```bash
# 執行所有測試
docker compose exec backend python manage.py test

# 執行特定 app 測試
docker compose exec backend python manage.py test assets

# 產生覆蓋率報告
docker compose exec backend coverage run --source='.' manage.py test
docker compose exec backend coverage report
```

### 前端測試
```bash
cd frontend

# 執行測試
npm test

# 產生覆蓋率報告
npm test -- --coverage
```

---

## 📦 部署指南

### 生產環境部署

1. **設定環境變數**
```bash
cp backend/.env.example backend/.env
# 編輯 .env 設定生產環境參數
```

2. **建置前端**
```bash
cd frontend
npm run build
```

3. **收集靜態檔案**
```bash
docker compose exec backend python manage.py collectstatic --noinput
```

4. **使用 Gunicorn 運行**
```bash
# 已在 Dockerfile 中配置
# 預設: gunicorn --bind 0.0.0.0:8000 config.wsgi:application
```

5. **設定 Nginx 反向代理**
```nginx
server {
    listen 80;
    server_name your-domain.com;

    location /api/ {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /admin/ {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
    }

    location / {
        root /path/to/frontend/build;
        try_files $uri /index.html;
    }
}
```

---

## 🔐 安全建議

### 生產環境必做

1. **變更預設密碼**
   - 變更所有測試帳號密碼
   - 使用強密碼

2. **設定 HTTPS**
   - 使用 Let's Encrypt
   - 強制 HTTPS 重定向

3. **資料庫安全**
   - 變更資料庫密碼
   - 限制資料庫存取來源

4. **Django 設定**
   - DEBUG = False
   - 設定 ALLOWED_HOSTS
   - 設定 SECRET_KEY (隨機生成)

5. **備份策略**
   - 定期備份資料庫
   - 備份上傳檔案
   - 測試還原流程

---

## 📚 進階功能

### 批次匯入資產

```python
# 準備 CSV 檔案
# 欄位: asset_number,name,asset_type,status,confidentiality,integrity,availability

# 使用 Django Admin 匯入
# 或使用 API
curl -X POST http://localhost:8000/api/assets/bulk_import/ \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d @assets.json
```

### 自訂報表

```python
# 建立自訂報表 (backend/reports/)
# 範例: 高風險資產報表
from assets.models import Asset

high_risk_assets = Asset.objects.filter(
    confidentiality='high',
    integrity='high',
    availability='high',
    deleted_at__isnull=True
)
```

### API 整合

```javascript
// 在其他系統中整合 API
const API_URL = 'http://localhost:8000/api';
const TOKEN = 'your_jwt_token';

// 取得資產列表
fetch(`${API_URL}/assets/`, {
  headers: {
    'Authorization': `Bearer ${TOKEN}`
  }
})
  .then(res => res.json())
  .then(data => console.log(data));
```

---

## 🎓 學習路徑

### 新手入門 (1-2 天)
1. 了解 ISO 27001 基本概念
2. 熟悉系統介面
3. 練習新增/編輯/刪除資產
4. 了解 CIA 等級評估

### 進階使用 (3-5 天)
5. 建立資產關係
6. 進行風險評估
7. 產生報表
8. 批次操作

### 系統管理 (1 週)
9. 使用者管理
10. 權限設定
11. 系統監控
12. 備份還原

### 開發擴展 (2-4 週)
13. 了解後端架構
14. 了解前端架構
15. 開發新功能
16. 整合第三方工具

---

**更新時間**: 2025-10-31  
**文件版本**: 1.0
