Files
webmail-gateway/DEPLOYMENT.md

213 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WebMail Gateway 部署指南
## 環境架構
### 開發環境 (Development)
- **主機**: 10.1.0.245 (Windows 桌機)
- **目錄**: `D:\_Develop\porscheworld_develop\webmail-gateway\`
- **Port**: 8100
- **啟動**: `START_DEVELOPMENT.bat`
- **用途**: 開發、測試、功能迭代
### 正式環境 (Production)
- **主機**: 10.1.0.254 (Ubuntu Server - home)
- **目錄**: `/home/porsche/services/webmail-gateway/`
- **Port**: 8000 (容器內)
- **啟動**: `docker compose up -d`
- **用途**: 對外服務、穩定運行
---
## 開發流程
### 1. 在開發環境啟動服務
```batch
cd D:\_Develop\porscheworld_develop\webmail-gateway
START_DEVELOPMENT.bat
```
### 2. 切換 Traefik 路由到開發機
在伺服器上執行:
```bash
ssh porsche@10.1.0.254
# 停止正式環境容器
cd /home/porsche/services/webmail-gateway
docker compose down
# 建立 Traefik dynamic 配置目錄 (如果不存在)
mkdir -p /home/porsche/traefik/dynamic
# 上傳開發路由配置
# (從開發機執行)
scp traefik-dev-route.yml porsche@10.1.0.254:/home/porsche/traefik/dynamic/webmail-dev.yml
# Traefik 會自動重新載入配置
```
### 3. 開發與測試
現在訪問 https://webmail.lab.taipei 會自動路由到開發機 (10.1.0.245:8100)
- ✅ 支援熱重載 (`--reload`)
- ✅ 可以即時修改程式碼
- ✅ 可以使用 debugger
### 4. 切換回正式環境
```bash
ssh porsche@10.1.0.254
# 刪除開發路由配置
rm /home/porsche/traefik/dynamic/webmail-dev.yml
# 啟動正式環境容器
cd /home/porsche/services/webmail-gateway
docker compose up -d
```
---
## 部署到正式環境
### 方案 A: 直接複製 (快速)
```bash
# 1. 停止開發伺服器 (Ctrl+C)
# 2. 從開發機上傳到伺服器
scp app.py porsche@10.1.0.254:/home/porsche/services/webmail-gateway/
# 3. 重建容器
ssh porsche@10.1.0.254 'cd /home/porsche/services/webmail-gateway && docker compose down && docker compose build && docker compose up -d'
```
### 方案 B: 透過 Git (推薦)
```bash
# 1. 在開發機提交變更
cd D:\_Develop\porscheworld_develop\webmail-gateway
git add .
git commit -m "Feature: 完整 Gmail 風格 UI"
git push gitea main
# 2. 在伺服器拉取
ssh porsche@10.1.0.254
cd /home/porsche/services/webmail-gateway
git pull
docker compose down && docker compose build && docker compose up -d
```
---
## 多租戶服務部署架構
當需要為每個租戶部署獨立服務時 (例如 10 個租戶 = 10 個服務)
### 架構設計
```
Traefik (Reverse Proxy)
├─── webmail.lab.taipei/vmis-admin → webmail-vmis-admin:8000
├─── webmail.lab.taipei/porsche1 → webmail-porsche1:8000
├─── webmail.lab.taipei/porsche2 → webmail-porsche2:8000
├─── ...
└─── webmail.lab.taipei/tenant10 → webmail-tenant10:8000
```
### 部署腳本範例
```bash
#!/bin/bash
# deploy_tenant_service.sh
TENANT_CODE=$1
if [ -z "$TENANT_CODE" ]; then
echo "Usage: ./deploy_tenant_service.sh <tenant_code>"
exit 1
fi
# 建立租戶專屬目錄
mkdir -p /home/porsche/services/webmail-${TENANT_CODE}
# 複製基礎配置
cp -r /home/porsche/services/webmail-gateway/Dockerfile /home/porsche/services/webmail-${TENANT_CODE}/
cp -r /home/porsche/services/webmail-gateway/app.py /home/porsche/services/webmail-${TENANT_CODE}/
cp -r /home/porsche/services/webmail-gateway/requirements.txt /home/porsche/services/webmail-${TENANT_CODE}/
# 建立專屬 docker-compose.yml
cat > /home/porsche/services/webmail-${TENANT_CODE}/docker-compose.yml << EOF
services:
webmail-${TENANT_CODE}:
build: .
container_name: webmail-${TENANT_CODE}
environment:
- REDIS_HOST=10.1.0.20
- REDIS_PORT=6379
- REDIS_PASSWORD=DC1qaz2wsx
- REDIS_DB=2
- DATABASE_URL=postgresql://admin:DC1qaz2wsx@10.1.0.20:5433/virtual_mis
- KEYCLOAK_SERVER_URL=https://auth.lab.taipei
- TENANT_CODE=${TENANT_CODE}
networks:
- traefik-network
- mailserver_mailserver-internal
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik-network"
- "traefik.http.routers.webmail-${TENANT_CODE}.rule=Host(\`webmail.lab.taipei\`) && PathPrefix(\`/${TENANT_CODE}\`)"
- "traefik.http.routers.webmail-${TENANT_CODE}.entrypoints=web,websecure"
- "traefik.http.routers.webmail-${TENANT_CODE}.tls.certresolver=letsencrypt"
- "traefik.http.services.webmail-${TENANT_CODE}.loadbalancer.server.port=8000"
restart: always
networks:
traefik-network:
external: true
mailserver_mailserver-internal:
external: true
EOF
# 啟動容器
cd /home/porsche/services/webmail-${TENANT_CODE}
docker compose up -d
echo "Tenant ${TENANT_CODE} service deployed!"
echo "Access: https://webmail.lab.taipei/${TENANT_CODE}"
```
### 使用方式
```bash
# 部署 porsche1 租戶服務
./deploy_tenant_service.sh porsche1
# 部署 porsche2 租戶服務
./deploy_tenant_service.sh porsche2
# ... 依此類推
```
---
## 注意事項
### 開發環境切換
- ⚠️ 開發時請確保正式環境容器已停止 (`docker compose down`)
- ⚠️ 開發完成後記得切換回正式環境
- ⚠️ 不要在開發環境直接操作正式資料庫
### 多租戶部署
- 🔄 每個租戶獨立容器,互不影響
- 📊 可以針對不同租戶調整資源限制
- 🔍 容易追蹤各租戶的日誌和效能
- 💰 資源消耗較高 (10 個租戶 = 10 個容器)
### 替代方案:單一服務多租戶
目前的設計 (路徑參數路由) 已經支援多租戶,不需要為每個租戶部署獨立服務。除非有特殊需求 (例如:租戶要求獨立部署、資源隔離等)。