Major Features: - ✅ Multi-tenant architecture (tenant isolation) - ✅ Employee CRUD with lifecycle management (onboarding/offboarding) - ✅ Department tree structure with email domain management - ✅ Company info management (single-record editing) - ✅ System functions CRUD (permission management) - ✅ Email account management (multi-account per employee) - ✅ Keycloak SSO integration (auth.lab.taipei) - ✅ Redis session storage (10.1.0.254:6379) - Solves Cookie 4KB limitation - Cross-system session sharing - Sliding expiration (8 hours) - Automatic token refresh Technical Stack: Backend: - FastAPI + SQLAlchemy - PostgreSQL 16 (10.1.0.20:5433) - Keycloak Admin API integration - Docker Mailserver integration (SSH) - Alembic migrations Frontend: - Next.js 14 (App Router) - NextAuth 4 with Keycloak Provider - Redis session storage (ioredis) - Tailwind CSS Infrastructure: - Redis 7 (10.1.0.254:6379) - Session + Cache - Keycloak 26.1.0 (auth.lab.taipei) - Docker Mailserver (10.1.0.254) Architecture Highlights: - Session管理由 Keycloak + Redis 統一控制 - 支援多系統 (HR/WebMail/Calendar/Drive/Office) 共享 session - Token 自動刷新,異質服務整合 - 未來可無縫遷移到雲端 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
341 lines
7.4 KiB
Markdown
341 lines
7.4 KiB
Markdown
# 🚀 HR Portal 部署就緒總結
|
|
|
|
**狀態**: ✅ 準備完成,可立即部署
|
|
**日期**: 2026-02-09
|
|
**版本**: v1.0.0
|
|
|
|
---
|
|
|
|
## 📦 部署包資訊
|
|
|
|
### 構建產物
|
|
- **位置**: `W:\DevOps-Workspace\hr-portal\frontend\dist\`
|
|
- **大小**: ~460 KB (未壓縮)
|
|
- **檔案**:
|
|
- `index.html` (770 bytes)
|
|
- `assets/index-B6AIDaLe.css` (22.40 KB)
|
|
- `assets/index-C5znSMh-.js` (440.49 KB)
|
|
- `silent-check-sso.html`
|
|
- `test-login.html`
|
|
|
|
### 部署包
|
|
- **檔案**: `hr-portal-frontend-deploy.zip`
|
|
- **大小**: 139 KB
|
|
- **位置**: `W:\DevOps-Workspace\hr-portal\frontend\`
|
|
- **包含**: dist/, Dockerfile, docker-compose.yml
|
|
|
|
---
|
|
|
|
## ✅ 環境配置確認
|
|
|
|
### Keycloak 配置
|
|
```
|
|
URL: https://auth.ease.taipei
|
|
Realm: porscheworld
|
|
Client ID: hr-portal-web
|
|
Client Type: OpenID Connect (公開客戶端)
|
|
```
|
|
|
|
### 後端 API
|
|
```
|
|
URL: https://hr-api.ease.taipei
|
|
健康檢查: /health
|
|
狀態: ✅ 運行中
|
|
API 文檔: /docs
|
|
```
|
|
|
|
### 前端配置 (.env)
|
|
```env
|
|
VITE_API_BASE_URL=https://hr-api.ease.taipei
|
|
VITE_KEYCLOAK_URL=https://auth.ease.taipei
|
|
VITE_KEYCLOAK_REALM=porscheworld
|
|
VITE_KEYCLOAK_CLIENT_ID=hr-portal-web
|
|
```
|
|
|
|
### 部署目標
|
|
```
|
|
主機: 10.1.0.254 (Ubuntu Server)
|
|
用戶: user
|
|
路徑: /home/user/hr-portal/frontend/
|
|
網域: https://hr.ease.taipei
|
|
```
|
|
|
|
---
|
|
|
|
## 🎯 功能完成度
|
|
|
|
### 已完成功能 (95%)
|
|
|
|
#### UI 組件庫 (9個)
|
|
- [x] Input - 文字輸入框
|
|
- [x] Select - 下拉選單
|
|
- [x] Textarea - 多行輸入
|
|
- [x] Modal - 對話框
|
|
- [x] Table - 資料表格
|
|
- [x] Pagination - 分頁器
|
|
- [x] Loading - 載入動畫
|
|
- [x] EmptyState - 空狀態
|
|
- [x] ConfirmDialog - 確認對話框
|
|
|
|
#### 員工管理
|
|
- [x] 員工列表 (搜尋、篩選、分頁)
|
|
- [x] 員工詳情 (Tab 切換)
|
|
- [x] 新增員工 (表單驗證)
|
|
- [x] 編輯員工
|
|
- [x] 密碼重設 (自動生成/手動)
|
|
- [x] 離職處理 (確認流程)
|
|
- [x] 自動創建帳號 (create_full)
|
|
- Keycloak SSO 帳號
|
|
- 郵件帳號
|
|
- NAS 網路硬碟
|
|
|
|
#### 組織管理
|
|
- [x] 事業部 CRUD
|
|
- [x] 部門 CRUD
|
|
- [x] 經理指派
|
|
- [x] 動態員工篩選
|
|
|
|
#### 資源管理
|
|
- [x] 郵件帳號列表 (配額視覺化)
|
|
- [x] 網路硬碟列表 (配額視覺化)
|
|
|
|
#### 系統整合
|
|
- [x] Keycloak SSO 登入
|
|
- [x] Token 自動刷新
|
|
- [x] API 錯誤處理
|
|
- [x] CORS 配置
|
|
- [x] 表單驗證 (Zod)
|
|
|
|
---
|
|
|
|
## 📋 部署步驟快速參考
|
|
|
|
### 🔥 最快速部署 (3 步驟)
|
|
|
|
#### 1. 上傳 ZIP 包
|
|
使用 WinSCP:
|
|
```
|
|
本地: W:\DevOps-Workspace\hr-portal\frontend\hr-portal-frontend-deploy.zip
|
|
遠端: /home/user/hr-portal-frontend-deploy.zip
|
|
```
|
|
|
|
#### 2. SSH 解壓並部署
|
|
```bash
|
|
cd /home/user
|
|
unzip -o hr-portal-frontend-deploy.zip -d hr-portal/frontend/
|
|
cd hr-portal/frontend
|
|
docker-compose down && docker-compose build && docker-compose up -d
|
|
```
|
|
|
|
#### 3. 驗證
|
|
```bash
|
|
docker-compose ps
|
|
curl -k https://hr.ease.taipei
|
|
```
|
|
|
|
瀏覽器訪問: **https://hr.ease.taipei**
|
|
|
|
---
|
|
|
|
## 📚 部署文檔索引
|
|
|
|
### 核心文檔
|
|
1. **[README.md](README.md)** - 專案總覽
|
|
2. **[FEATURES_COMPLETE.md](FEATURES_COMPLETE.md)** - 功能完成清單
|
|
|
|
### 部署文檔
|
|
3. **[DEPLOY_NOW.md](frontend/DEPLOY_NOW.md)** - 立即部署指南 ⭐
|
|
4. **[QUICK_DEPLOY.md](frontend/QUICK_DEPLOY.md)** - 快速部署指令
|
|
5. **[DEPLOYMENT.md](frontend/DEPLOYMENT.md)** - 完整部署手冊
|
|
6. **[DEPLOY_CHECKLIST.md](DEPLOY_CHECKLIST.md)** - 部署檢查清單
|
|
|
|
### 配置文檔
|
|
7. **[KEYCLOAK_SETUP.md](KEYCLOAK_SETUP.md)** - Keycloak 配置指南
|
|
|
|
### 驗證工具
|
|
8. **[verify-deployment.sh](frontend/verify-deployment.sh)** - 部署驗證腳本
|
|
|
|
---
|
|
|
|
## 🛠️ 部署工具
|
|
|
|
### Windows 工具
|
|
- **部署包**: `hr-portal-frontend-deploy.zip` (139 KB)
|
|
- **檔案傳輸**: WinSCP (推薦) 或 FileZilla
|
|
- **SSH 客戶端**: PuTTY 或 Windows Terminal
|
|
|
|
### Ubuntu 腳本
|
|
- **驗證腳本**: `verify-deployment.sh`
|
|
```bash
|
|
# 上傳並執行
|
|
chmod +x verify-deployment.sh
|
|
./verify-deployment.sh
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ 部署前檢查清單
|
|
|
|
### 環境檢查
|
|
- [x] 後端 API 運行: https://hr-api.ease.taipei/health
|
|
- [x] Keycloak 運行: https://auth.ease.taipei
|
|
- [x] Keycloak Client `hr-portal-web` 已創建
|
|
- [x] Ubuntu 主機可連接: 10.1.0.254
|
|
- [x] Traefik 容器運行中
|
|
- [x] traefik-public 網路存在
|
|
|
|
### 構建檢查
|
|
- [x] 前端構建成功 (440.49 KB)
|
|
- [x] TypeScript 編譯無錯誤
|
|
- [x] 環境變數正確配置
|
|
- [x] Keycloak Client ID: `hr-portal-web`
|
|
|
|
### 檔案檢查
|
|
- [x] Dockerfile 存在
|
|
- [x] docker-compose.yml 存在
|
|
- [x] dist/ 目錄完整
|
|
- [x] 部署 ZIP 包已創建
|
|
|
|
---
|
|
|
|
## 🎯 部署後驗證清單
|
|
|
|
### 容器驗證
|
|
- [ ] 容器運行: `docker-compose ps`
|
|
- [ ] 無錯誤日誌: `docker-compose logs`
|
|
- [ ] 在 traefik-public 網路中
|
|
- [ ] Traefik 標籤正確
|
|
|
|
### HTTP 驗證
|
|
- [ ] HTTP 200: `curl http://localhost:80`
|
|
- [ ] HTTPS 200: `curl -k https://hr.ease.taipei`
|
|
- [ ] HTTPS 證書有效
|
|
- [ ] 可獲取 index.html
|
|
|
|
### 應用驗證
|
|
- [ ] 瀏覽器可訪問 https://hr.ease.taipei
|
|
- [ ] 重定向到 Keycloak 登入
|
|
- [ ] SSO 登入成功
|
|
- [ ] 顯示 HR Portal 首頁
|
|
- [ ] 右上角顯示用戶姓名
|
|
|
|
### 功能驗證
|
|
- [ ] 員工列表載入成功
|
|
- [ ] 搜尋功能正常
|
|
- [ ] 篩選功能正常
|
|
- [ ] 分頁功能正常
|
|
- [ ] 可點擊「新增員工」
|
|
- [ ] API 調用無 CORS 錯誤
|
|
|
|
### 核心功能測試
|
|
- [ ] **新增員工測試**
|
|
- [ ] 填寫表單
|
|
- [ ] 勾選「自動創建帳號」
|
|
- [ ] 提交成功
|
|
- [ ] 檢查 Keycloak 用戶已創建
|
|
- [ ] 檢查郵件帳號已創建
|
|
- [ ] 檢查 NAS 硬碟已創建
|
|
|
|
---
|
|
|
|
## 📊 預期結果
|
|
|
|
### 成功指標
|
|
|
|
#### 容器層
|
|
```bash
|
|
$ docker-compose ps
|
|
NAME STATUS
|
|
hr-portal-frontend Up
|
|
```
|
|
|
|
#### HTTP 層
|
|
```bash
|
|
$ curl -I http://localhost:80
|
|
HTTP/1.1 200 OK
|
|
|
|
$ curl -k -I https://hr.ease.taipei
|
|
HTTP/2 200
|
|
```
|
|
|
|
#### 應用層
|
|
- ✅ 瀏覽器顯示 HR Portal 登入重定向
|
|
- ✅ Keycloak 登入頁面載入
|
|
- ✅ 登入後跳轉回 HR Portal
|
|
- ✅ 首頁載入成功
|
|
- ✅ 員工列表載入成功
|
|
|
|
---
|
|
|
|
## 🐛 常見問題快速參考
|
|
|
|
### 容器無法啟動
|
|
```bash
|
|
docker-compose logs hr-portal-frontend
|
|
docker-compose build --no-cache
|
|
docker-compose up -d
|
|
```
|
|
|
|
### 無法訪問網站
|
|
```bash
|
|
# 檢查 Traefik
|
|
docker ps | grep traefik
|
|
docker logs traefik | grep hr-portal
|
|
|
|
# 檢查網路
|
|
docker network inspect traefik-public | grep hr-portal
|
|
```
|
|
|
|
### Keycloak 登入失敗
|
|
- 檢查 Client ID: 應為 `hr-portal-web`
|
|
- 檢查 Redirect URIs: 應包含 `https://hr.ease.taipei/*`
|
|
- 檢查 Web Origins: 應包含 `https://hr.ease.taipei`
|
|
|
|
### API CORS 錯誤
|
|
- 確認後端 CORS 配置包含 `https://hr.ease.taipei`
|
|
- 檢查後端日誌
|
|
|
|
---
|
|
|
|
## 🎊 部署成功後
|
|
|
|
### 立即測試
|
|
1. **登入測試**: 使用測試帳號登入
|
|
2. **列表測試**: 查看員工列表
|
|
3. **搜尋測試**: 測試搜尋功能
|
|
4. **新增測試**: 創建測試員工 (不勾選 create_full)
|
|
5. **自動創建測試**: 創建員工並勾選 create_full
|
|
|
|
### 後續優化 (建議順序)
|
|
1. **Toast 通知** (替換 alert)
|
|
2. **審計日誌 UI**
|
|
3. **權限管理 UI**
|
|
4. **批量匯入功能**
|
|
5. **報表功能**
|
|
|
|
---
|
|
|
|
## 📞 支持資源
|
|
|
|
### 技術文檔
|
|
- **API 文檔**: https://hr-api.ease.taipei/docs
|
|
- **Keycloak Admin**: https://auth.ease.taipei
|
|
|
|
### 聯絡方式
|
|
- **技術支持**: porsche.chen@gmail.com
|
|
|
|
---
|
|
|
|
## 🚀 準備就緒!
|
|
|
|
**所有準備工作已完成,可以立即開始部署!**
|
|
|
|
**推薦部署方式**:
|
|
使用 **DEPLOY_NOW.md 方式 1 (ZIP 部署包)**,只需 3 個步驟即可完成。
|
|
|
|
**部署文檔**: [frontend/DEPLOY_NOW.md](frontend/DEPLOY_NOW.md)
|
|
|
|
---
|
|
|
|
**Good Luck!** 🎉
|