Files
hr-portal/DEPLOYMENT_READY.md
Porsche Chen 360533393f feat: HR Portal - Complete Multi-Tenant System with Redis Session Storage
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>
2026-02-23 20:12:43 +08:00

7.4 KiB

🚀 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)

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個)

  • Input - 文字輸入框
  • Select - 下拉選單
  • Textarea - 多行輸入
  • Modal - 對話框
  • Table - 資料表格
  • Pagination - 分頁器
  • Loading - 載入動畫
  • EmptyState - 空狀態
  • ConfirmDialog - 確認對話框

員工管理

  • 員工列表 (搜尋、篩選、分頁)
  • 員工詳情 (Tab 切換)
  • 新增員工 (表單驗證)
  • 編輯員工
  • 密碼重設 (自動生成/手動)
  • 離職處理 (確認流程)
  • 自動創建帳號 (create_full)
    • Keycloak SSO 帳號
    • 郵件帳號
    • NAS 網路硬碟

組織管理

  • 事業部 CRUD
  • 部門 CRUD
  • 經理指派
  • 動態員工篩選

資源管理

  • 郵件帳號列表 (配額視覺化)
  • 網路硬碟列表 (配額視覺化)

系統整合

  • Keycloak SSO 登入
  • Token 自動刷新
  • API 錯誤處理
  • CORS 配置
  • 表單驗證 (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 解壓並部署

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. 驗證

docker-compose ps
curl -k https://hr.ease.taipei

瀏覽器訪問: https://hr.ease.taipei


📚 部署文檔索引

核心文檔

  1. README.md - 專案總覽
  2. FEATURES_COMPLETE.md - 功能完成清單

部署文檔

  1. DEPLOY_NOW.md - 立即部署指南
  2. QUICK_DEPLOY.md - 快速部署指令
  3. DEPLOYMENT.md - 完整部署手冊
  4. DEPLOY_CHECKLIST.md - 部署檢查清單

配置文檔

  1. KEYCLOAK_SETUP.md - Keycloak 配置指南

驗證工具

  1. verify-deployment.sh - 部署驗證腳本

🛠️ 部署工具

Windows 工具

  • 部署包: hr-portal-frontend-deploy.zip (139 KB)
  • 檔案傳輸: WinSCP (推薦) 或 FileZilla
  • SSH 客戶端: PuTTY 或 Windows Terminal

Ubuntu 腳本

  • 驗證腳本: verify-deployment.sh
    # 上傳並執行
    chmod +x verify-deployment.sh
    ./verify-deployment.sh
    

部署前檢查清單

環境檢查

構建檢查

  • 前端構建成功 (440.49 KB)
  • TypeScript 編譯無錯誤
  • 環境變數正確配置
  • Keycloak Client ID: hr-portal-web

檔案檢查

  • Dockerfile 存在
  • docker-compose.yml 存在
  • dist/ 目錄完整
  • 部署 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 硬碟已創建

📊 預期結果

成功指標

容器層

$ docker-compose ps
NAME                    STATUS
hr-portal-frontend      Up

HTTP 層

$ 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
  • 首頁載入成功
  • 員工列表載入成功

🐛 常見問題快速參考

容器無法啟動

docker-compose logs hr-portal-frontend
docker-compose build --no-cache
docker-compose up -d

無法訪問網站

# 檢查 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. 報表功能

📞 支持資源

技術文檔

聯絡方式


🚀 準備就緒!

所有準備工作已完成,可以立即開始部署!

推薦部署方式: 使用 DEPLOY_NOW.md 方式 1 (ZIP 部署包),只需 3 個步驟即可完成。

部署文檔: frontend/DEPLOY_NOW.md


Good Luck! 🎉