將地端原先在IIS跑的 .net6 mvc專案給deploy到ec2 linux Apache主機上


假設你已經完成上一篇介紹的諸多處理前置流程後




通常你應用程式中的appsettings.json一些資料庫連線配置
要注意需要微調

  • Server: 將 .\\SQLEXPRESS 更改為您的EC2實例的公共IP或DNS名稱。
  • Database: 如果您的資料庫名稱仍然是 BingoDb,則不需要更改。
  • Trusted_Connection: 由於您正在使用SQL Server身份驗證(User ID和Password),您可能需要從連接字符串中刪除 Trusted_Connection=True;。
  • TrustServerCertificate: 如果您的EC2 SQL Server使用的是自簽名證書,則保留此選項。如果不是,您可能想刪除它。
  • User ID 和 Password: 確保這些是您在EC2 SQL Server上設定的憑證。
"ConnectionStrings": {
  "MyDbConn": "Server=YOUR_EC2_PUBLIC_IP_OR_DNS;Database=BingoDb;TrustServerCertificate=true;MultipleActiveResultSets=true;User ID=xxx;Password=YOUR_PASSWORD"
}


請將 YOUR_EC2_PUBLIC_IP_OR_DNS 替換為您EC2實例的實際公共IP或DNS,並將 YOUR_PASSWORD 替換為實際的 xxx 密碼。



實際拿地端專案整合連線看看會發現出現錯誤
Microsoft.Data.SqlClient.SqlException: 'Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication.'

可能原因在於從一個不同的域連接到SQL Server有關。當在本地開發時,集成身份驗證很好用,因為您的開發機器和SQL Server通常位於同一域或工作組中。

但是,當您將SQL Server移到遠程主機(如EC2實例)時,事情就變得複雜了。
檢查連接字符串:
確保您的連接字符串沒有 Integrated Security=True 或 Trusted_Connection=True。如果有,請將其刪除或更改為使用SQL Server身份驗證。


使用SQL Server身份驗證
"Server=your_server_address;Database=YourDatabase;TrustServerCertificate=true;User Id=YourUsername;Password=YourPassword;"





最後,由於現在將從外部連接到資料庫,請確保您的EC2安全組允許來自您Web應用伺服器的IP的入站SQL Server連接(默認port是1433),若用mariadb(mysql)預設port是3306。



一般會用LAMP(linux、apache、mysql、php)架站
不過這邊就改一下在Linux上我要用Apache
至於其他的就暫時先pass


安裝 apache
yum -y install httpd

把apache服務啟用,配置下次重開也自動RUN。
systemctl restart httpd
systemctl enable httpd



再次測試Apache是否有work就直接打上ec2的 public ip試試看

這裡遇到離奇問題就是
netstat 輸出再次確認了 Apache 仍然只在 IPv6 上的端口 80 上監聽。


但經我檢查過Apache配置確實是Listen 80
不曉得為何會有這麼怪異情形

修改 Apache 配置
替換 Listen 80 為 Listen 0.0.0.0:80。

重新啟動 Apache
sudo systemctl restart httpd

檢查 Apache 監聽的地址和端口
sudo netstat -tuln | grep 80


安裝asp.net core6.0
需要先配置Microsoft的存放庫
rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

yum -y install aspnetcore-runtime-6.0


若有報錯
Error downloading packages:
dotnet-runtime-deps-6.0-6.0.21-1.x86_64: [Errno 256] No more mirrors to try.


通常表示在嘗試安裝或更新包時,yum無法從當前配置的存放庫中找到所需的包,或者存放庫是不可達的。


清除yum快取:
sudo yum clean all

再重新執行一次就可以了
sudo yum install aspnetcore-runtime-6.0







在此採用Framework相依性部屬(FDD),代表你這台主機上需要已經安裝好.net core框架,否則不可以運行。
FDD發佈包本身容量會比較小,只涵蓋專案跟依賴項目,不含.Net core框架本身。

若採用的是獨立部屬(SCD),發佈應用時候會將所有組件(.Net Core的Library跟其runtime)
一起發佈,部屬包會很大一包,但你Server就無需先安裝.Net Core框架也可運行。



記得要將發佈出來的檔案FTP上傳之前要將新創建的該目錄
寫入權限開啟


透過Win SCP上傳





定義netcore應用預設採用的port環境變數
export ASPNETCORE_URLS=http://0.0.0.0:5000

nohup dotnet 你發佈出來的專案名.dll &
讓其在背景運行

netstat -tln
查看監聽的port

要記得將所需要的port防火牆開啟
這邊示範5000



如此一來才能透過在public ip後面多加:5000
這個port指引到對應網站應用


那接下來就是要切換
讓他更改成80 port


先停用該web應用服務
停用apache service
關機重啟後自動run的 也要disable
改讓dotnetcore跑在80 這個port


好此時這個公用IP18.182.39.31
預設http訪問會直接到asp.net core 動態網站
這時候可以去透過NameCheap或Godaddy域名設置
或是暫時先用NoIp也是可以

可參考之前文章






Apache掛載.Net Core網站應用

前面我們DNS透過像是Godaddy , NameCheap , NoIP之類的第三方平台設置
現在我們要研究透過apache的設置
要想讓 Apache 能夠掛接我們的 ASP.NET Core Web 應用程序,還需要對 Apache 進行配置,以實現將 Apache 監聽過來的請求轉到Kestrel 伺服器上。
Apache 的設定檔位於/etc/httpd/conf.d/目錄內。



待續....


留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header