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

HR Portal - 人力資源管理系統

一個基於 React + FastAPI 的現代化人力資源管理系統,整合 Keycloak SSO、Docker Mailserver 和 Synology NAS。

Build Status TypeScript React FastAPI


📋 目錄


功能特點

核心功能

員工生命週期管理

  • 員工創建 (自動創建 Keycloak/郵件/NAS 帳號)
  • 員工資料編輯
  • 密碼重設 (自動生成/手動輸入)
  • 離職處理 (停用所有系統帳號)
  • 員工搜尋、篩選、分頁

組織架構管理

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

資源配額管理

  • 郵件帳號管理 (配額視覺化)
  • 網路硬碟管理 (配額警示)
  • 使用狀況追蹤

系統整合

  • Keycloak SSO 單點登入
  • Docker Mailserver 郵件服務
  • Synology NAS 網路硬碟
  • 審計日誌 (追蹤所有操作)

UI/UX 特色

  • 🎨 現代化設計 (Tailwind CSS)
  • 📱 響應式介面 (支持手機/平板/桌面)
  • 🔍 進階搜尋與篩選
  • 📊 資料視覺化 (配額使用進度條)
  • 快速響應 (React Query 快取)
  • 🔒 安全確認 (危險操作二次確認)

🛠️ 技術棧

前端

技術 版本 用途
React 18 UI 框架
TypeScript 5.5 類型安全
Vite 5.4 構建工具
Tailwind CSS 3.4 樣式框架
React Router 6 客戶端路由
TanStack Query 5 伺服器狀態管理
React Hook Form 7 表單狀態管理
Zod 3 表單驗證
Axios 1.7 HTTP 客戶端
Keycloak JS 26 SSO 客戶端

後端

技術 版本 用途
FastAPI Latest Web 框架
PostgreSQL 16 資料庫
SQLAlchemy 2.0 ORM
Pydantic 2.0 資料驗證
Keycloak 26 身份認證
Docker Latest 容器化
Traefik 3.6 反向代理

🏗️ 系統架構

┌─────────────────────────────────────────────────────────────┐
│                        用戶瀏覽器                              │
│                   https://hr.ease.taipei                    │
└────────────────────────┬────────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────────┐
│                     Traefik (反向代理)                        │
│              Let's Encrypt SSL 證書管理                       │
└───┬──────────────────┬───────────────────┬──────────────────┘
    │                  │                   │
    ▼                  ▼                   ▼
┌─────────┐      ┌──────────┐      ┌───────────────┐
│ Frontend│      │  Backend │      │   Keycloak    │
│  (Nginx)│      │ (FastAPI)│      │   (SSO Auth)  │
│  :80    │      │  :8000   │      │   :8080       │
└─────────┘      └────┬─────┘      └───────────────┘
                      │
                      ▼
              ┌──────────────┐
              │ PostgreSQL   │
              │   :5432      │
              └──────────────┘
                      │
        ┌─────────────┼─────────────┐
        ▼             ▼             ▼
┌──────────────┐ ┌─────────┐ ┌────────────┐
│ Docker Mail  │ │ Synology│ │ Audit Logs │
│   Server     │ │   NAS   │ │  Database  │
└──────────────┘ └─────────┘ └────────────┘

🚀 快速開始

前置需求

  • Node.js >= 20.x
  • Python >= 3.11
  • Docker >= 24.x
  • PostgreSQL >= 16.x
  • Keycloak >= 26.x

本地開發

1. 克隆專案

cd W:\DevOps-Workspace\hr-portal

2. 啟動後端

cd backend

# 創建虛擬環境
python -m venv venv
venv\Scripts\activate  # Windows

# 安裝依賴
pip install -r requirements.txt

# 配置環境變數
# 編輯 .env 設定資料庫連線、Keycloak 等

# 啟動開發伺服器
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

後端 API: http://localhost:8000 API 文檔: http://localhost:8000/docs

3. 啟動前端

cd frontend

# 安裝依賴
npm install

# 配置環境變數 (.env.local)
VITE_API_BASE_URL=http://localhost:8000
VITE_KEYCLOAK_URL=https://auth.ease.taipei
VITE_KEYCLOAK_REALM=porscheworld
VITE_KEYCLOAK_CLIENT_ID=hr-portal

# 啟動開發伺服器
npm run dev

前端應用: http://localhost:3000

4. 配置 Keycloak

參考 KEYCLOAK_SETUP.md 完成 Keycloak 客戶端配置。


📦 部署指南

生產環境部署

詳細部署步驟請參考 frontend/DEPLOYMENT.md

快速部署 (Docker Compose)

  1. 構建前端

    cd frontend
    npm install
    npm run build
    
  2. 複製檔案到伺服器

    # 使用 WinSCP 或 scp 複製以下檔案
    scp -r dist Dockerfile docker-compose.yml user@10.1.0.254:/home/user/hr-portal/frontend/
    
  3. 在伺服器上部署

    ssh user@10.1.0.254
    cd /home/user/hr-portal/frontend
    docker-compose up -d
    
  4. 驗證部署

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

訪問網址


⚙️ 配置說明

環境變數

前端 (.env.local)

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

後端 (.env)

DATABASE_URL=postgresql://user:password@localhost:5432/hr_portal
KEYCLOAK_URL=https://auth.ease.taipei
KEYCLOAK_REALM=porscheworld
KEYCLOAK_CLIENT_ID=hr-backend
KEYCLOAK_CLIENT_SECRET=your-client-secret

📚 API 文檔

主要端點

端點 方法 說明
/api/v1/employees/ GET 獲取員工列表
/api/v1/employees/ POST 創建員工 (支持 create_full)
/api/v1/employees/{id}/ GET 獲取員工詳情
/api/v1/employees/{id}/ PUT 更新員工資料
/api/v1/employees/{id}/reset-password/ POST 重設密碼
/api/v1/business-units/ GET, POST 事業部管理
/api/v1/divisions/ GET, POST 部門管理
/api/v1/emails/ GET, POST 郵件帳號管理
/api/v1/network-drives/ GET, POST 網路硬碟管理

完整 API 文檔

訪問 Swagger UI: https://hr-api.ease.taipei/docs


💻 開發指南

前端開發

目錄結構

frontend/
├── src/
│   ├── components/       # React 組件
│   │   ├── ui/          # 可重用 UI 組件 (9個)
│   │   ├── employees/   # 員工相關組件
│   │   └── layout/      # 布局組件
│   ├── pages/           # 頁面組件 (13個路由)
│   ├── lib/             # API 客戶端、Keycloak
│   ├── hooks/           # usePagination, useConfirm
│   └── routes/          # 路由配置
├── dist/                # 構建產物
└── docker-compose.yml   # Docker 配置

添加新功能

參考 FEATURES_COMPLETE.md 查看已完成功能列表和開發模式。


🐛 故障排除

前端問題

Keycloak 登入失敗

# 檢查 OIDC 配置
curl https://auth.ease.taipei/realms/porscheworld/.well-known/openid-configuration

參考: KEYCLOAK_SETUP.md

API CORS 錯誤

確認後端 CORS 配置包含前端域名。

後端問題

資料庫連線失敗

# 測試連線
psql "postgresql://user:password@localhost:5432/hr_portal"

Docker 問題

# 查看日誌
docker-compose logs -f

# 重新構建
docker-compose build --no-cache
docker-compose up -d

📝 待辦事項

詳見 FEATURES_COMPLETE.md 的「後續建議」章節。

短期優化

  • Toast 通知系統
  • 審計日誌 UI
  • 權限管理 UI
  • 後端整合測試

中期擴展

  • 批量匯入員工
  • 進階搜尋
  • 報表功能
  • 數據導出

長期規劃

  • PWA 支持
  • 性能優化
  • 國際化
  • 工作流引擎

📄 相關文檔


📞 支持


🎉 部署狀態

前端構建: 成功 (440.49 kB) 後端 API: 運行中 (https://hr-api.ease.taipei) Keycloak SSO: 運行中 (https://auth.ease.taipei) 功能完成度: 95%

準備部署: 立即可用! 🚀

Description
No description provided
Readme 1.2 MiB
Languages
Python 57%
TypeScript 32.8%
PowerShell 3.8%
Shell 3.1%
PLpgSQL 1.6%
Other 1.6%