跳至主要内容

附錄:Windows Server 安裝指南

本文件說明如何在 Windows Server 上部署 AppFuse 應用系統。

系統需求​

項目需求
作業系統Windows Server 2019+
JDK21+
Web 伺服器IIS 10+

安裝 JDK​

下載並安裝​

  1. 從 Adoptium 下載 OpenJDK 21 MSI 安裝檔
  2. 執行安裝程式,選擇「Set JAVA_HOME variable」

驗證安裝​

開啟 Command Prompt 或 PowerShell:

java -version

預期輸出:

openjdk version "21.0.x" 2024-xx-xx
OpenJDK Runtime Environment Temurin-21.0.x+xx (build 21.0.x+xx)
OpenJDK 64-Bit Server VM Temurin-21.0.x+xx (build 21.0.x+xx, mixed mode)

目錄結構​

建立以下目錄結構:

C:\AppFuse\
├── conf\
│ └── application.properties
├── opt\
│ └── app\
│ ├── app-tenant-server.jar
│ ├── app-tenant-server.exe
│ └── app-tenant-server.xml
├── app-office\
│ ├── index.html
│ └── assets\
└── var\
├── doc\
└── log\

部署後端服務​

方式一:Windows Service(推薦)​

使用 Windows Service Wrapper (WinSW) 將 Spring Boot 應用程式安裝為 Windows 服務。

步驟 1:下載 WinSW​

從 WinSW Releases 下載對應版本:

  • 64 位元系統:WinSW-x64.exe
  • 32 位元系統:WinSW-x86.exe

將檔案更名為 app-tenant-server.exe 並放入 C:\AppFuse\opt\app\。

步驟 2:建立配置檔​

建立 C:\AppFuse\opt\app\app-tenant-server.xml:

<?xml version="1.0" encoding="UTF-8"?>
<service>
<id>appfuse</id>
<name>AppFuse Application Server</name>
<description>AppFuse Spring Boot Application</description>
<executable>java</executable>
<arguments>-Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -Dapp.home=C:\AppFuse -jar "%BASE%\app-tenant-server.jar" --spring.config.location=file:C:\AppFuse\conf\application.properties</arguments>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
<onfailure action="restart" delay="10 sec"/>
</service>

步驟 3:安裝服務​

以系統管理員身份開啟 Command Prompt:

cd C:\AppFuse\opt\app
app-tenant-server.exe install

步驟 4:管理服務​

:: 啟動服務
app-tenant-server.exe start

:: 停止服務
app-tenant-server.exe stop

:: 重啟服務
app-tenant-server.exe restart

:: 查看狀態
app-tenant-server.exe status

:: 解除安裝服務
app-tenant-server.exe uninstall

也可以透過「服務」管理主控台(services.msc)管理。

方式二:手動執行​

開啟 Command Prompt:

cd C:\AppFuse\opt\app
java -Xms512m -Xmx2048m -Dfile.encoding=UTF-8 -Dapp.home=C:\AppFuse -jar app-tenant-server.jar --spring.config.location=file:C:\AppFuse\conf\application.properties

配置 IIS 反向代理​

安裝必要模組​

  1. 安裝 URL Rewrite 模組
  2. 安裝 Application Request Routing (ARR) 模組

啟用 ARR Proxy​

  1. 開啟 IIS 管理員
  2. 選取伺服器節點
  3. 雙擊「Application Request Routing Cache」
  4. 點選右側「Server Proxy Settings」
  5. 勾選「Enable proxy」
  6. 點選「Apply」

建立網站​

  1. 在 IIS 管理員中,右鍵點選「Sites」→「Add Website」
  2. 設定:
    • Site name: AppFuse
    • Physical path: C:\AppFuse\app-office
    • Binding: 依需求設定(如 Port 80 或 443)

配置 URL Rewrite​

在 C:\AppFuse\app-office 建立 web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<!-- API 反向代理 -->
<rule name="API Proxy" stopProcessing="true">
<match url="^api/(.*)" />
<action type="Rewrite" url="http://localhost:8080/app-server/api/{R:1}" />
</rule>

<!-- Actuator 端點 -->
<rule name="Actuator Proxy" stopProcessing="true">
<match url="^actuator/(.*)" />
<action type="Rewrite" url="http://localhost:8080/app-server/actuator/{R:1}" />
</rule>

<!-- SPA 路由 -->
<rule name="SPA Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>

<!-- 靜態檔案快取 -->
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
</staticContent>

<!-- 預設文件 -->
<defaultDocument>
<files>
<clear />
<add value="index.html" />
</files>
</defaultDocument>
</system.webServer>
</configuration>

啟用 HTTPS(選用)​

  1. 取得 SSL 憑證(.pfx 格式)
  2. 在 IIS 管理員中,選取伺服器節點 →「Server Certificates」
  3. 匯入 PFX 憑證
  4. 編輯網站 Bindings,新增 HTTPS(Port 443)並選取憑證

防火牆設定​

開放必要的埠號:

# 開放 HTTP
New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow

# 開放 HTTPS
New-NetFirewallRule -DisplayName "HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow

驗證安裝​

# 檢查後端服務
Invoke-WebRequest -Uri http://localhost:8080/app-server/actuator/health

# 檢查 IIS 代理
Invoke-WebRequest -Uri http://localhost/api/actuator/health

# 檢查前端
Invoke-WebRequest -Uri http://localhost/

WinSW 配置參考​

完整配置範例​

<?xml version="1.0" encoding="UTF-8"?>
<service>
<!-- 服務識別 -->
<id>appfuse</id>
<name>AppFuse Application Server</name>
<description>AppFuse Spring Boot Application Server</description>

<!-- 執行設定 -->
<executable>java</executable>
<arguments>-server -Xms1024m -Xmx2048m -Dfile.encoding=UTF-8 -Dapp.home=C:\AppFuse -jar "%BASE%\app-tenant-server.jar" --spring.config.location=file:C:\AppFuse\conf\application.properties</arguments>

<!-- 工作目錄 -->
<workingdirectory>C:\AppFuse\opt\app</workingdirectory>

<!-- 日誌設定 -->
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
<logpath>C:\AppFuse\var\log</logpath>

<!-- 失敗處理 -->
<onfailure action="restart" delay="10 sec"/>
<resetfailure>1 hour</resetfailure>

<!-- 啟動設定 -->
<startmode>Automatic</startmode>
<delayedAutoStart>true</delayedAutoStart>

<!-- 相依服務 -->
<depend>MSSQLSERVER</depend>

<!-- 環境變數 -->
<env name="JAVA_HOME" value="C:\Program Files\Eclipse Adoptium\jdk-21.0.2.13-hotspot"/>
</service>

WinSW 指令參考​

指令說明
install安裝服務
uninstall解除安裝服務
start啟動服務
stop停止服務
restart重啟服務
status查看狀態
refresh重新載入配置(不需重新安裝)

常見問題​

問題:服務無法啟動​

  1. 檢查 Java 路徑是否正確
  2. 檢查 JAR 檔案路徑
  3. 查看 WinSW 日誌(與 exe 同目錄)
  4. 以手動方式執行確認錯誤訊息

問題:IIS 反向代理失敗​

  1. 確認 ARR 已啟用 Proxy 功能
  2. 確認 URL Rewrite 規則正確
  3. 確認後端服務正在運行
  4. 檢查 IIS 錯誤日誌

問題:靜態檔案 404​

  1. 確認 web.config 中的 SPA 路由規則
  2. 確認實體路徑正確
  3. 確認 IIS 應用程式集區身份有讀取權限

相關文件​