過去筆者慣於將 Web 部署在 Azure 上,以 https 協定訪問是標準配備。不過這次因為上雲的服務還要往後端 Request 一個 Web UI 當資料來源,而且這個後端限定僅接受來自於 TW 的要求,所以只好往台智雲上搬。不過上去之後,因為只有一個 IP 地址,其他諸如 FQDN、SSL 等都要自行準備,過程有點繁瑣,於是以本文嘗試簡化並紀錄下來。
首先要在台智雲開一部虛擬主機,因為 Web 是用 DotNET 8 寫的,當然選便宜的 Linux 就夠,每小時成本可以壓在 NT$2 以下;因為對外服務,所以要一個 Public IP,不是經常開關,所以浮動的也可以。
這裡要記得檢查一下台智雲相關的 Security Group 設定,我看到的是 ssh https 有開,http 需要自己補。這個只是為了憑證申請過程中使用,所以不用擔心,我們主要的流量還是走安全的 https。
拿 Public IP 去配一個免費的 FQDN 還算容易,No-IP 或 DuckDNS 都可以,當然還有很多選擇,看個人喜歡或熟悉。
為了簡化安裝設定,在虛擬主機上先裝 Docker 為底,未來我們會起兩個 Container,一個負責 DotNET Web,另一個負責反向代理兼憑證管理,這個 Image 叫 Secure Web Application Gateway (SWAG),可以讓我們省很多事。Compose.yaml 內容如下,一次就把兩個 Container 開啟。
services:
swag:
image: lscr.io/linuxserver/swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Taipei
- URL=yourFQDN
- VALIDATION=http
volumes:
- /home/ubuntu/swag/config:/config
ports:
- 443:443
- 80:80
restart: unless-stopped
aspnet8:
image: mcr.microsoft.com/dotnet/aspnet:8.0
volumes:
- /home/ubuntu/out:/app
working_dir: /app
ports:
- 8080:8080
command: dotnet ./myWeb.dll有幾個地方要特別說明的:
...
location / {
proxy_pass http://aspnet8:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
...只要找到 location / 這個段落人修改,前後的一些內容都不變,只是在此省略。要注意第三行 aspnet8 呼應到 compose.yaml 第 18 行,埠號 8080 對應到第 24 行。改完後可以下指令單獨請 SWAG 重新載入設定,或簡單地重啟也會生效。一切正常的話,我們就可以從外界以 https 訪問到台智雲上的 Web 應用程式了。
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
評論 1
最近才聽說,拿到 IP 的台智雲虛擬機,內定已有一個 FQDN 長得像 xxx-xxx-xxx-xxx.twcc.ai,又可以省一道手續。