2020年8月9日 星期日

ASP.NET Core 3.1 on CentOS 8

最近有個案子,環境限定 CentOS + PostgreSQL 而且還要 HA(High availability) 的架構。是我完全不熟的東西,在經過多方摸索以後,把相關安裝設定方式記錄一下。

首先提到 HA,正式環境是用 L4 Switch 做 Round Robin AA,由於 L4 Switch 不是我玩的起的硬體,所以 Google 了一下,看看有沒有什麼替代方案?於是找到了富人用 L4 Switch,窮人用 Linux HAProxy!

那我們準備三個 VM 分別是 HAProxy, Web 1, Web2 IP 分配如下:
ServerIP
HAProxy192.168.0.130
Web 1192.168.0.131
Web 2192.168.0.132

所以我們先來準備兩台 Web Server 吧。安裝 CentOS 8 就跳過了,安裝完後,習慣先更新一下已經安裝的套件。
sudo dnf update

接著安裝 dotnet sdk
sudo dnf install dotnet

由於之後會用 HAProxy 所以這邊就省略用 nginx 做 reverse proxy 了,正式環境必須加上 nginx 做 reverse proxy。因此這邊防火牆我們直接開 5000 的 port 就好。
sudo firewall-cmd --permanent --zone=public --add-port=5000/tcp
sudo firewall-cmd --reload

接著我將寫好的 service 複製到指定位置
sudo cp frank.service /etc/systemd/system/frank.service

service 內容如下
[Unit]
Description=Frank Web Server

[Service]
WorkingDirectory=/var/www/Frank
ExecStart=/usr/bin/dotnet /var/www/Frank/Frank.dll --urls http://0.0.0.0:5000
Restart=always
RestartSec=10
SyslogIdentifier=frank-web-server
User=frank
Environment=ASPNETCORE_ENVIRONMENT=Development
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

這邊 --urls http://0.0.0.0:5000 很重要,如果多張網卡,可以指定特定 IP,如果這邊沒用 --urls 那只能從 localhost 連了。

以及將發行好的檔案複製到指定位置,並變更目錄擁有者。
sudo mkdir /var/www
sudo cp -r Frank /var/www
sudo chmod g+w -R /var/www/Frank
sudo chown -R frank.frank /var/www/Frank

最後啟用 service 並執行他。
sudo systemctl enable frank.service
sudo systemctl start frank.service
sudo systemctl status frank.service

到這邊正常來說沒遇到什麼問題,你用:
curl http://192.168.0.131:5000
應該會通了。

Web 2 依樣畫葫蘆,也可以順利完成。當然,如果 appsettings.json 裡面有和自身 IP 相關的地方,要記得修改。

這邊都完成後,就要進入下一篇,設定 HAProxy 了。