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>
This commit is contained in:
400
README.md
Normal file
400
README.md
Normal file
@@ -0,0 +1,400 @@
|
||||
# HR Portal - 人力資源管理系統
|
||||
|
||||
一個基於 React + FastAPI 的現代化人力資源管理系統,整合 Keycloak SSO、Docker Mailserver 和 Synology NAS。
|
||||
|
||||
[]()
|
||||
[]()
|
||||
[]()
|
||||
[]()
|
||||
|
||||
---
|
||||
|
||||
## 📋 目錄
|
||||
|
||||
- [功能特點](#功能特點)
|
||||
- [技術棧](#技術棧)
|
||||
- [系統架構](#系統架構)
|
||||
- [快速開始](#快速開始)
|
||||
- [部署指南](#部署指南)
|
||||
- [配置說明](#配置說明)
|
||||
- [API 文檔](#api-文檔)
|
||||
- [開發指南](#開發指南)
|
||||
- [故障排除](#故障排除)
|
||||
|
||||
---
|
||||
|
||||
## ✨ 功能特點
|
||||
|
||||
### 核心功能
|
||||
|
||||
✅ **員工生命週期管理**
|
||||
- 員工創建 (自動創建 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. 克隆專案
|
||||
|
||||
```bash
|
||||
cd W:\DevOps-Workspace\hr-portal
|
||||
```
|
||||
|
||||
#### 2. 啟動後端
|
||||
|
||||
```bash
|
||||
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. 啟動前端
|
||||
|
||||
```bash
|
||||
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_SETUP.md) 完成 Keycloak 客戶端配置。
|
||||
|
||||
---
|
||||
|
||||
## 📦 部署指南
|
||||
|
||||
### 生產環境部署
|
||||
|
||||
詳細部署步驟請參考 [frontend/DEPLOYMENT.md](./frontend/DEPLOYMENT.md)
|
||||
|
||||
#### 快速部署 (Docker Compose)
|
||||
|
||||
1. **構建前端**
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
2. **複製檔案到伺服器**
|
||||
```bash
|
||||
# 使用 WinSCP 或 scp 複製以下檔案
|
||||
scp -r dist Dockerfile docker-compose.yml user@10.1.0.254:/home/user/hr-portal/frontend/
|
||||
```
|
||||
|
||||
3. **在伺服器上部署**
|
||||
```bash
|
||||
ssh user@10.1.0.254
|
||||
cd /home/user/hr-portal/frontend
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
4. **驗證部署**
|
||||
```bash
|
||||
docker-compose ps
|
||||
curl -k https://hr.ease.taipei
|
||||
```
|
||||
|
||||
### 訪問網址
|
||||
|
||||
- **前端**: https://hr.ease.taipei
|
||||
- **後端 API**: https://hr-api.ease.taipei
|
||||
- **API 文檔**: https://hr-api.ease.taipei/docs
|
||||
- **Keycloak**: https://auth.ease.taipei
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 配置說明
|
||||
|
||||
### 環境變數
|
||||
|
||||
#### 前端 (.env.local)
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
#### 後端 (.env)
|
||||
|
||||
```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](./FEATURES_COMPLETE.md) 查看已完成功能列表和開發模式。
|
||||
|
||||
---
|
||||
|
||||
## 🐛 故障排除
|
||||
|
||||
### 前端問題
|
||||
|
||||
#### Keycloak 登入失敗
|
||||
```bash
|
||||
# 檢查 OIDC 配置
|
||||
curl https://auth.ease.taipei/realms/porscheworld/.well-known/openid-configuration
|
||||
```
|
||||
|
||||
參考: [KEYCLOAK_SETUP.md](./KEYCLOAK_SETUP.md)
|
||||
|
||||
#### API CORS 錯誤
|
||||
確認後端 CORS 配置包含前端域名。
|
||||
|
||||
### 後端問題
|
||||
|
||||
#### 資料庫連線失敗
|
||||
```bash
|
||||
# 測試連線
|
||||
psql "postgresql://user:password@localhost:5432/hr_portal"
|
||||
```
|
||||
|
||||
### Docker 問題
|
||||
|
||||
```bash
|
||||
# 查看日誌
|
||||
docker-compose logs -f
|
||||
|
||||
# 重新構建
|
||||
docker-compose build --no-cache
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 待辦事項
|
||||
|
||||
詳見 [FEATURES_COMPLETE.md](./FEATURES_COMPLETE.md) 的「後續建議」章節。
|
||||
|
||||
### 短期優化
|
||||
- Toast 通知系統
|
||||
- 審計日誌 UI
|
||||
- 權限管理 UI
|
||||
- 後端整合測試
|
||||
|
||||
### 中期擴展
|
||||
- 批量匯入員工
|
||||
- 進階搜尋
|
||||
- 報表功能
|
||||
- 數據導出
|
||||
|
||||
### 長期規劃
|
||||
- PWA 支持
|
||||
- 性能優化
|
||||
- 國際化
|
||||
- 工作流引擎
|
||||
|
||||
---
|
||||
|
||||
## 📄 相關文檔
|
||||
|
||||
- [功能完成清單](./FEATURES_COMPLETE.md) - 所有已完成功能的詳細說明
|
||||
- [部署指南](./frontend/DEPLOYMENT.md) - 生產環境部署步驟
|
||||
- [Keycloak 配置](./KEYCLOAK_SETUP.md) - SSO 客戶端配置指南
|
||||
- [API 文檔](https://hr-api.ease.taipei/docs) - Swagger UI
|
||||
|
||||
---
|
||||
|
||||
## 📞 支持
|
||||
|
||||
- **技術支持**: porsche.chen@gmail.com
|
||||
- **後端 API**: https://hr-api.ease.taipei/docs
|
||||
- **Keycloak**: https://auth.ease.taipei
|
||||
|
||||
---
|
||||
|
||||
## 🎉 部署狀態
|
||||
|
||||
✅ **前端構建**: 成功 (440.49 kB)
|
||||
✅ **後端 API**: 運行中 (https://hr-api.ease.taipei)
|
||||
✅ **Keycloak SSO**: 運行中 (https://auth.ease.taipei)
|
||||
✅ **功能完成度**: 95%
|
||||
|
||||
**準備部署**: 立即可用! 🚀
|
||||
Reference in New Issue
Block a user