Azure 入门系列 (第三篇 Publish Web Application to VM)

本系列

这个系列会介绍从 0 到 1 搭建一个 Web Application 的 Server. 间中还会带上一些真实开发常用的功能.

一共 6 篇

1. Virtual Machine (VM) 和 SQL Server

2. Backup & Recovery Disaster 

3. Publish Web Application to VM (IIS, HTTPS) <-- 你在这里

4. Azure Key Vault

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" /> -->
View Code

 

安装 .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

参考: 免费 SSL Certify The Web

装完全部就可以访问了.

 

posted @ 2021-07-23 12:05  兴杰  阅读(110)  评论(0编辑  收藏  举报