跳轉到

客戶端部署 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

集中管理(多台共用一份來源)

若客戶有多台機器,建議:

  1. 設定來源放網路磁碟(部署時用 -SourcePath "\\share\..."
  2. IT 集中編輯該 XML
  3. 所有客戶下次啟動 TsERP 時自動拿到新設定

故障排除

TsERP 啟動跳出「資料庫清單檔載入失敗」

可能原因:

  1. DatabaseListSourcePath 設了但檔案不存在
  2. 確認 appsettings.local.json 的路徑指對位置
  3. 確認來源檔存在、權限允許讀取

  4. DatabaseListSourcePath 沒設、目的地 c:/TEMPS/SqlLocation/DatabaseList.xml 也不存在

  5. 跑部署腳本,或手動放置 XML

  6. 網路磁碟路徑無法連線

  7. 客戶機器是否有該 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\