客戶端部署 SOP¶
本文件給 IT 部署人員參考。對應 ADR 0019。
部署模型¶
┌─────────────────────────────────────────────────────────┐
│ 客戶機器 (C:\) │
├─────────────────────────────────────────────────────────┤
│ │
│ ProgramData\TsERP\ │
│ ├─ appsettings.local.json ← 部署腳本產生 │
│ │ { "DatabaseListSourcePath": "...\\source\\..." }│
│ └─ source\DatabaseList.xml ← 部署腳本產生 (客戶 DB)│
│ │
│ TEMPS\SqlLocation\ │
│ └─ DatabaseList.xml ← TsERP 啟動時同步 │
│ │
│ (Velopack 安裝目錄)\ │
│ └─ appsettings.json ← 發布包提供,所有客戶相同│
│ │
└─────────────────────────────────────────────────────────┘
appsettings.json(發布包內、所有客戶共用)的設定會被 appsettings.local.json(每台機器獨立、不在發布包內)覆寫。後者的 DatabaseListSourcePath 指向客戶專屬的 DatabaseList.xml,TsERP 啟動時依 LastWriteTime 把它同步到 c:/TEMPS/SqlLocation/。
部署流程¶
1. 跑部署腳本¶
在客戶機器上(管理員權限 PowerShell):
.\deploy\deploy-customer.ps1 `
-Customer "客戶A" `
-DbServer "192.168.1.10" `
-Database "darbA"
參數¶
| 參數 | 必填 | 預設值 | 說明 |
|---|---|---|---|
-Customer |
✅ | — | 客戶識別代號(用於記錄、預設帶入 CompanyName) |
-DbServer |
✅ | — | SQL Server 位置(IP / Hostname / Azure FQDN) |
-Database |
✅ | — | 資料庫名稱 |
-CompanyName |
❌ | 同 Customer |
TsERP 介面上顯示的公司名 |
-IsAzure |
❌ | $false |
連 Azure SQL 時加上(會啟用 Encrypt=True) |
-SourcePath |
❌ | C:\ProgramData\TsERP\source\DatabaseList.xml |
來源 XML 寫到哪 |
-ConfigPath |
❌ | C:\ProgramData\TsERP\appsettings.local.json |
客戶設定 JSON 寫到哪 |
-Force |
❌ | $false |
既有檔案覆蓋(否則 abort) |
範例¶
地端客戶:
.\deploy-customer.ps1 -Customer "客戶A" -DbServer "192.168.1.10" -Database "darbA"
Azure 客戶:
.\deploy-customer.ps1 -Customer "客戶B" `
-DbServer "tworkerp.database.windows.net" -Database "darbB" -IsAzure
顯示名與識別碼不同:
.\deploy-customer.ps1 -Customer "C001" -DbServer "192.168.1.10" -Database "darbC" `
-CompanyName "客戶 C 股份有限公司"
來源放網路磁碟(多台共用一份):
.\deploy-customer.ps1 -Customer "客戶D" -DbServer "192.168.1.10" -Database "darbD" `
-SourcePath "\\fileserver\TsERPConfig\客戶D\DatabaseList.xml"
更新既有設定:
.\deploy-customer.ps1 -Customer "客戶A" -DbServer "192.168.1.11" -Database "darbA" -Force
2. 安裝 TsERP 本體¶
部署腳本只處理設定檔,TsERP 程式仍由 Velopack 安裝。給客戶 Setup.exe 連結或直接執行:
https://tworkerpdeploy.blob.core.windows.net/darb-vpk/YanYue.ERP-win-Setup.exe
或本機已下載:
.\YanYue.ERP-win-Setup.exe
設定更新¶
客戶連線資訊變更¶
重新跑部署腳本加 -Force 即可:
.\deploy-customer.ps1 -Customer "客戶A" -DbServer "新IP" -Database "darbA" -Force
TsERP 下次啟動會偵測 LastWriteTime 變新,自動覆寫 c:/TEMPS/SqlLocation/DatabaseList.xml。
集中管理(多台共用一份來源)¶
若客戶有多台機器,建議:
- 設定來源放網路磁碟(部署時用
-SourcePath "\\share\...") - IT 集中編輯該 XML
- 所有客戶下次啟動 TsERP 時自動拿到新設定
故障排除¶
TsERP 啟動跳出「資料庫清單檔載入失敗」¶
可能原因:
DatabaseListSourcePath設了但檔案不存在- 確認
appsettings.local.json的路徑指對位置 -
確認來源檔存在、權限允許讀取
-
DatabaseListSourcePath沒設、目的地c:/TEMPS/SqlLocation/DatabaseList.xml也不存在 -
跑部署腳本,或手動放置 XML
-
網路磁碟路徑無法連線
- 客戶機器是否有該 share 的存取權?網路是否通?
部署腳本 abort「檔案已存在」¶
加 -Force 參數覆蓋既有設定。
客戶看不到新的資料庫設定¶
確認:
- 部署腳本確實有跑(檢查 C:\ProgramData\TsERP\ 兩個檔案的 LastWriteTime)
- TsERP 啟動後 c:/TEMPS/SqlLocation/DatabaseList.xml 是否已被覆寫
注意事項¶
- 帳密目前仍是寫死共用(
foxlog / qwertgbnm,./),未來若客戶端需要 per-customer 帳密需另行處理 Encrypt=True自動套用於IsAzure=true的連線;地端 SQL Server 走Encrypt=False(內網無竊聽風險,省 TLS 握手時間)appsettings.local.json與來源DatabaseList.xml不會被 Velopack 更新覆寫(在%ProgramData%,非安裝目錄)- 部署腳本需以管理員權限執行(寫入
C:\ProgramData\)