iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
Microsoft Azure

Azure 的自我修煉系列 第 13

Day13 部署 Webapp 使用 SQL服務

部署 Webapp 使用 SQL服務

我們用了四天帶大家練習了官網的範例教學,
現在我們要部署專案到Azure Webapp,並使用Azer SQL DB,
Day08 Azure SQL 服務我們創建了SQL服務,
接下來要整合到專案裡面。

參考:教學課程:在 Azure App Service 中建置 ASP.NET Core 和 SQL Database 應用程式

Azure SQL Service

這邊幫大家複習一下主要是幾個指令,下面幫大家複習一下

  1. 建立 SQL Database 邏輯伺服器
    位置: eastasia
    資源群組: ithome
    伺服器名稱: pellokSqlServer
    帳號: sqladmin
    密碼: password
az sql server create -l eastasia -g ithome -n pellokSqlServer -u sqladmin -p password

https://ithelp.ithome.com.tw/upload/images/20200912/20072651Wpu6zymGLv.png

  1. 設定伺服器防火牆規則

使用 whatsmyip 查詢自己Local Publick IP

# 當起始 IP 和結束 IP 都設為 0.0.0.0 時,防火牆只會為其他 Azure 資源開啟
az sql server firewall-rule create -g ithome -s pellokSqlServer -n AllowAzureIps --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

# 本機 Public IP ,使用 whatsmyip 替換<<your-ip-address>>
az sql server firewall-rule create --name AllowLocalClient -s pellokSqlServer --resource-group ithome --start-ip-address=<your-ip-address> --end-ip-address=<your-ip-address>

https://ithelp.ithome.com.tw/upload/images/20200912/20072651NqFJbckDxU.png

  1. 建立資料庫
    資源群組: ithome
    伺服器名稱: pellokSqlServer
    資料庫名稱: pellokSqldb
    服務等級: Free
az sql db create -g ithome -s pellokSqlServer -n pellokSqldb --service-objective Free

https://ithelp.ithome.com.tw/upload/images/20200912/20072651ZI7JHZAaAf.png

  1. 建立連接字串
    連線端: ado.net
    伺服器名稱: pellokSqlServer
    資料庫名稱: pellokSqldb
az sql db show-connection-string --client ado.net -s pellokSqlServer -n pellokSqldb

內容如下,記得替換username和password

"Server=tcp:pellokSqlServer.database.windows.net,1433;Database=pellokSqldb;User ID=<username>;Password=<password>;Encrypt=true;Connection Timeout=30;"

設定應用程式以連線到生產資料庫

修改 Startup.cs 檔案,如果環境不是開發環境,就切換使用 UseSqlServer

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    if(Environment.IsDevelopment()){
        services.AddDbContext<PellokITHomeContext>(options =>
            options.UseSqlite(Configuration.GetConnectionString("ArticleContext")));
    }
    else
    {
        services.AddDbContext<PellokITHomeContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("ArticleContext")));
    }
}

https://ithelp.ithome.com.tw/upload/images/20200912/20072651kdcUvmePOu.png

對生產資料庫執行資料庫移轉

設定 ConnectionStrings 在環進變數裡面,
我們使用 Bash 環境,在 Bash 環境無法使用 : 符號,
所以改用 兩個底線替代,
所以變數名稱變成 ConnectionStrings__ArticleContext

# 創建 ConnectionStrings__ArticleContext 變數,裡面儲存 SQL DB 的連線字串,記得更換<Password>
export ConnectionStrings__ArticleContext='Server=tcp:pelloksqlserver.database.windows.net,1433;Database=pellokSqldb;User ID=sqladmin;Password=<password>;Encrypt=true;Connection Timeout=30;'

# 創建 SQL Database Table
dotnet ef database update

遇到問題 "Keyword not supported: 'server'"
https://ithelp.ithome.com.tw/upload/images/20200912/20072651tYLWiQS6nY.png
解決步驟,使用 -v 查看細節,發現 "Using environment 'Development'."

dotnet ef database update -v

所以我們要修改環境變數,在嘗試一次

# 創建 ASPNETCORE_ENVIRONMENT 變數,內容是 Production
export ASPNETCORE_ENVIRONMENT="Production"
# 創建資料表
dotnet ef database update

啟用服務

dotnet run

遇到問題:再次遇到 "System.ArgumentException: Keyword not supported: 'server'."
https://ithelp.ithome.com.tw/upload/images/20200912/20072651RXROanQnum.png
解決步驟,使用 -v normal 查看執行細節,
發現啟動服務預設使用了launchSettings.json的設定
launchSettings.json裡面的 "ASPNETCORE_ENVIRONMENT": "Development"
覆蓋了我們設定環境變數,所以我們需要不使用 launch-profile

dotnet run -v normal
dotnet run --no-launch-profile

https://ithelp.ithome.com.tw/upload/images/20200912/20072651hh8HTUlIEc.png

在實作上面從本機的 SQLite DB 切換到使 SQL Server 遇到很多環境設定的問題
後來在 在 ASP.NET Core 中使用多個環境,暸解到設定環境與launchSettings.json的設定。

更安全一點需要保護我們的 SQL Server 連線字串可以參考
在 ASP.NET Core 的開發中安全儲存應用程式秘密

設定本機 git 部署

az webapp deployment user set --user-name <username> --password <password>

https://ithelp.ithome.com.tw/upload/images/20200912/20072651bynD45Fj1N.png

建立應用程式服務方案

應用服務可以參考之前的 Day07 WebApp服務-原始碼部署,比對教學的之後,有一些不太一樣的做法。
資源群組: ithome
名稱: pellokITHomePlan
容器: Linux 容器
定價層: 免費

az appservice plan create -g ithome -n pellokITHomePlan  --sku F1 --is-linux

https://ithelp.ithome.com.tw/upload/images/20200912/20072651S1hIFHVyAL.png

建立 Web 應用程式

資源群組: ithome
方案名稱: pellokITHomePlan
Webapp名稱: pellokITHome
執行: DOTNETCORE|3.1
部署方式: --deployment-local-git

az webapp create -g ithome -p pellokITHomePlan -n pellokITHome --runtime "DOTNETCORE|3.1" --deployment-local-git

https://ithelp.ithome.com.tw/upload/images/20200912/20072651FZC8QqOi6g.png

注意留意上面的顯示訊息,記住 Local git is configured with url of
https://pellok@pellokithome.scm.azurewebsites.net/pellokITHome.git

設定連接字串

若要設定 Azure 應用程式的連接字串,請在 Cloud Shell 中使用 az webapp config appsettings set 命令。 在下列命令中,將 與 參數取代為您稍早建立的連接字串。

資源群組: ithome
Webapp名稱: pellokITHome
變數名稱: ArticleContext
變數內容: 連線字串
連線類型: SQLAzure

az webapp config connection-string set -g ithome -n pellokITHome --settings ArticleContext="Server=tcp:pelloksqlserver.database.windows.net,1433;Database=pelloksqldb;User ID=sqladmin;Password=<password>;Encrypt=true;Connection Timeout=30;" --connection-string-type SQLAzure

在 App Service 中執行時,App Service 中所定義的連接字串會優先於 appsettings.json** 中所定義的連接字串。

https://ithelp.ithome.com.tw/upload/images/20200912/200726513janntfiW3.png

從 Git 推送至 Azure

# 增加遠端位置
git remote add azure https://pellok@pellokithome.scm.azurewebsites.net/pellokITHome.git
# 上傳到遠端,會詢問密碼,在上面的設定本機 git 部署有設定
git push azure master

https://ithelp.ithome.com.tw/upload/images/20200912/20072651FSNnqzt6NV.png

瀏覽至 Azure 應用程式

https://pellokithome.azurewebsites.net/

https://ithelp.ithome.com.tw/upload/images/20200912/20072651XZffPjPU88.png

遇到問題 "Development Mode"
https://ithelp.ithome.com.tw/upload/images/20200912/20072651ieXHqXLXEJ.png
解決

az webapp config appsettings set -g ithome -n pellokITHome --settings ASPNETCORE_ENVIRONMENT="Production"

資料流診斷記錄

開啟服務Log紀錄

az webapp log config -g ithome -n pellokITHome --application-logging true --level information

查看服務紀錄檔

az webapp log tail -g ithome -n pellokITHome 

完成以上設定後,每次有新版本就推上Azure提供的遠端倉庫,就會馬上進行更新部署
https://ithelp.ithome.com.tw/upload/images/20200912/200726519tEKjnr9rE.png
https://ithelp.ithome.com.tw/upload/images/20200912/20072651zWANg6COk5.png
https://ithelp.ithome.com.tw/upload/images/20200912/20072651fA1xEXc3fz.png

相關連結:

上一篇 Day12 實作官網 ASP.NET Core 教學(四)
下一篇 Day14 實作 ASP.NET Core 建立 Web API 教學


上一篇
Day12 實作官網 ASP.NET Core 教學(四)
下一篇
Day14 實作 ASP.NET Core 建立 Web API
系列文
Azure 的自我修煉30

尚未有邦友留言

立即登入留言