Windows下IIS+.net framework+Mysql接入實踐
本章介紹如何在Windows系統下,使用Docker For Windows打包Asp.Net應用鏡像,并使用自研鏡像初始化第三方MySQL數據庫部署并運行應用。
準備工作
1、環境準備
以下的說明都是基于Docker For Windows下打包并運行,請確保Docker運行在Windows Container模式下,設置方法:在系統任務欄找到Docker圖標并右鍵,打開設置對話框:
注意:本例子并不適用通過Virtualbox在Widows下運行Docker應用。另外,Docker For Windows需要運行在Win10 64bit(專業版或企業版),并確保更新到1809或以上版本。目前Iot平臺暫不支持在Windows Server系統打包生成的鏡像。
2、準備數據庫初始化文件
創建用于數據庫初始化的sql文件,在文件中寫入數據庫表的創建等相關初始化腳本,可以從現有的數據庫中直接導出初始化sql腳本文件來使用。腳本示例如下:
/******************************************/
/* 創建user數據表,并插入兩條初始化數據 */
/******************************************/
CREATE TABLE IF NOT EXISTS `user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`gmt_create` datetime NOT NULL COMMENT '創建時間',
`gmt_modified` datetime NOT NULL COMMENT '修改時間',
`name` varchar(256) NOT NULL COMMENT 'name',
`phone` varchar(64) NOT NULL DEFAULT '' COMMENT 'phone',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE utf8_general_ci COMMENT='用戶表';
INSERT INTO `user` (id, gmt_create, gmt_modified, name, phone) VALUES ('1', '2018-11-26 10:00:00', '2018-11-26 10:00:00', '測試', '1388888888');
INSERT INTO `user` (id, gmt_create, gmt_modified, name, phone) VALUES ('2', '2018-11-26 10:00:00', '2018-11-26 10:00:00', 'test', '1366666666');
3、準備Dockerfile文件
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019
Copy aspnetdemo /inetpub/wwwroot
#增加最大內存限制
使用微軟官方的aspnet:4.7.2鏡像作為基礎鏡像,該鏡像包含:
Windows Server Core
IIS 10
.NET Framework (支持.Net框架多個版本,最高支持4.7.2)
對 IIS 在 .NET 方面的擴展
4、約定MySQL服務器配置
為了方便起見,我們約定MySQL服務器節點相關的配置如下:
服務名稱:mysqldbsvc
數據庫:mysqlhadb
用戶名:root
密碼:123456Aa
這些配置信息可根據實際情況進行調整。稍后在配置托管應用將會用到。另外,當我們在阿里云物聯網托管平臺部署成功后,這些配置信息會以環境變量的方式注入到我們的Demo應用運行環境內。所以,Demo的數據庫連接字符串可以這樣寫:
using System;
using System.Data;
using MySql.Data.MySqlClient;
namespace aspnetDemo.Extensions
{
public class DbHelper
{
public static string strConn = string.Empty;
static DbHelper()
{
string uid = Environment.GetEnvironmentVariable("IOT_HOSTING_MYSQLDBSVC_MYSQLUSER");
string pwd = Environment.GetEnvironmentVariable("IOT_HOSTING_MYSQLDBSVC_MYSQLPASSWORD");
string server = Environment.GetEnvironmentVariable("MYSQLDBSVC_SERVICE_HOST");
string database = Environment.GetEnvironmentVariable("IOT.HOSTING.MYSQLDBSVC.MYSQLDATABASE");
string port = Environment.GetEnvironmentVariable("MYSQLDBSVC_SERVICE_PORT_YKMDBSERVICE");
strConn = $"server={server};port={port};user={uid};password={pwd}; database={database};";
}
public static DataTable GetTable(string strSQL, MySqlParameter[] pas, CommandType cmdtype)
{
DataTable dt = new DataTable(); ;
using (var conn = new MySqlConnection(strConn))
{
var da = new MySqlDataAdapter(strSQL, conn);
da.SelectCommand.CommandType = cmdtype;
if (pas != null)
{
da.SelectCommand.Parameters.AddRange(pas);
}
da.Fill(dt);
}
return dt;
}
public static int ExcuteSQL(string strSQL, MySqlParameter[] paras)
{
return ExcuteSQL(strSQL, paras, CommandType.Text);
}
public static int ExcuteSQL(string strSQL, MySqlParameter[] paras, CommandType cmdType)
{
int i = 0;
using (var conn = new MySqlConnection(strConn))
{
var cmd = new MySqlCommand(strSQL, conn);
cmd.CommandType = cmdType;
if (paras != null)
{
cmd.Parameters.AddRange(paras);
}
conn.Open();
i = cmd.ExecuteNonQuery();
conn.Close();
}
return i;
}
}
}
5、發布Demo應用
以文件夾方式發布asp.net mvc應用(基于4.5 .Net Framework)
鏡像打包
將以上準備好的Dockerfile文件與Demo應用放到同一目錄下:使用docker build -t aspnetdemo:v1.0.0 .
命令進行鏡像打包。打包成功后如下圖:
鏡像上傳
請參照鏡像倉庫,第5小節,或者登錄物聯網平臺后在鏡像管理
,鏡像列表中點擊查看
,也可以看到鏡像上傳相關方法。
鏡像部署
登錄到阿里云物聯網平臺,在左邊菜單欄中找到
并打開。然后點擊右上角的使用鏡像創建配置填寫好相關配置信息:配置創建后,在配置列表中點擊編輯進入相關節點配置頁面,依次拖動MysqlHA節點、Mysql初始化節點與自研節點各一個到右邊的畫布,填寫好每個節點的相關配置并連線,詳細配置如下:
1、Mysql服務器節點配置
這里按照之前約定的Mysql服務器配置信息進行填寫。
2、Mysql服務器初始化節點配置
在數據庫的初始化需要較長時間或初始化需要寫入大量數據情況下,把數據庫相關的初始化工作放到Mysql初始化節點中是最佳實踐。現在只需要把上面準備好的數據庫初始化sql腳本文件上傳至該節點中,當應用部署實例時就會執行該腳本文件,注意數據庫相關配置信息要與MysqlHA節點配置保存一致。見下圖:
區域①:請仔細核對區域中的這幾項配置,注意與mysqldbsvc數據庫節點配置保持一致。
區域②:在此處上傳數據庫sql初始化腳本。
3、自研節點配置
自研節點是運行我們Demo應用的節點,鏡像版本選擇剛打包上傳的版本1.0.0。注意限制應用的內存使用,避免因內存不足導致節點重啟或發生錯誤。注意配置應用端口與外網的端口映射對,Demo應用使用的是端口80(IIS默認端口),外部端口可根據實際情況填寫。把外網處勾選上,不然外網將無法訪問Demo應用。請仔細核對各個配置信息是否填寫正確,以免導致稍后部署運行失敗。
4、部署并運行
在左側菜單欄中打開應用管理,選擇之前的配置進行部署,等待部署成功后,點擊應用列表中進入管理頁面,點擊打開臨時域名鏈接就可以查看部署的Demo應用了,見下圖: