Azure 入门系列 (第三篇 Publish Web Application to VM)
本系列
这个系列会介绍从 0 到 1 搭建一个 Web Application 的 Server. 间中还会带上一些真实开发常用的功能.
一共 6 篇
1. Virtual Machine (VM) 和 SQL Server
3. Publish Web Application to VM (IIS, HTTPS) <-- 你在这里
5. Azure Storage (with custom domain)
6. Computer Vision (smart-cropped thumbnails, OCR)
本篇介绍
安装 IIS
安装 .NET
一个 Web Application Razor page + Ef core 发布上去
point DNS
安装 SSL
安装 IIS
通过 RDP 进入 VM
打开 Server Manager (管理 VM 的软件)
一路 next, 然后选择 IIS
这 4 个要自己加, 其它默认就可以了
一路 next 安装.
IIS 附带了很多功能 module, 而大部分 module 都被 asp.net core 替代了, 比如 static file 等.
web application 可以通过 web config 移除这些 IIS module. 大家依据自己的项目调整吧.
这是我的 web config
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <!-- for debug --> <!-- <aspNetCore processPath="dotnet" arguments=".\Project.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> --> <aspNetCore processPath="dotnet" arguments=".\Project.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> <modules> <remove name="RewriteModule" /> <remove name="AspNetCoreModule" /> <!-- <remove name="RequestFilteringModule" /> --> <remove name="iisnode" /> <!-- <remove name="ProtocolSupportModule" /> --> <!-- <remove name="IsapiModule" /> --> <remove name="IpRestrictionModule" /> <!-- <remove name="IsapiFilterModule" /> --> <remove name="HttpRedirectionModule" /> <remove name="DynamicIpRestrictionModule" /> <!-- <remove name="DirectoryListingModule" /> --> <!-- <remove name="DefaultDocumentModule" /> --> <remove name="CorsModule" /> <!-- <remove name="ConfigurationValidationModule" /> --> <remove name="ApplicationInitializationModule" /> <remove name="WebSocketModule" /> <remove name="AnonymousIdentification" /> <remove name="DefaultAuthentication" /> <remove name="FileAuthorization" /> <remove name="FormsAuthentication" /> <remove name="Profile" /> <remove name="OutputCache" /> <remove name="UrlAuthorization" /> <remove name="RoleManager" /> <remove name="ScriptModule-4.0" /> <remove name="UrlMappingsModule" /> <remove name="UrlRoutingModule-4.0" /> <remove name="WindowsAuthentication" /> <remove name="Session" /> <!-- <remove name="StaticFileModule" /> --> <!-- <remove name="StaticCompressionModule" /> --> </modules> <!-- for debug --> <!-- <httpErrors errorMode="Detailed" /> --> <httpErrors errorMode="DetailedLocalOnly" /> </system.webServer> </location> </configuration> <!--ProjectGuid: 3a959090-ed3e-49e4-b27a-4f580feb1d39--> <!-- sometime odata 需要很长的 query --> <!-- <security> <requestFiltering> <requestLimits maxQueryString="8192" /> </requestFiltering> </security> --> <!-- 以前有放这个, 不知道还需要吗, 留着先 --> <!-- <urlCompression doStaticCompression="false" /> -->
安装 .NET
到官网下载 Hosting Bundle
一路 next 安装
Setup Web App Razor Page + EF Core
git clone https://github.com/keatkeat87/cnblogs-azure-get-started
git checkout 5ef29baef0cb76c0d0daff66d7dad93b6f7c257b
dotnet publish AzureGetStarted.csproj -o C:\keatkeat\projects\release
更新 2022-01-15:
不小心在这篇文章里看到 connect SQL Server by IP port 的讯息
直觉告诉我, SQL 和 Web 都在一台 VM, 最好是不要搞 IP port 去访问, 应该直接用名字.
所以 connection string 应该要改成 Server=JBReviews-VM;Database=JBReviews;User Id=JBReviews.
然后继续把文档 copy paste 去 VM
打开 IIS create Website, binding to 刚才的 folder.
提醒: www 和 non-www 都要 binding 哦
打开 folder 写权限, 让 web app 可以写入文件
数据库我的做法是, 把本地的 database backup 然后 restore to VM, 再创建一个 login account as the database owner.
Point domain DNS
Azure 有卖 DNS service, 如果是买 Azure 的就把 domain 的 Name server point to Azure, 然后到 Azure 的 DNS 写入 record, point to VM IP.
如果不是 Azure DNS, 那就去 hosting 调. 我是用 hosting 的 DNS, 这里就不多介绍了.
如果要马上测试, 可以 cmd run ipconfig/flushdns, 或者提早把 TTL set 成很小, 比如 3600 seconds
安装 Certify The Web
装完全部就可以访问了.