点击上方蓝字关注“汪宇杰博客”

导语

微软智慧云 Azure 上虽然早就有 App Service 这种完全托管的 PaaS 服务可以让我们分分钟建网站。但是不自己配一下环境,就不能体现技术含量,容易被说微软的人都只会点鼠标。年轻的时候不敲命令,什么时候可以?今天就教大家如何在 Azure 上用 Windows Server 2019 (Server Core) VM 的方式自己配环境部署 ASP.NET Core 网站。

什么是 Windows Server Core

在微软开天辟地之时,先知比尔盖茨认为微软的使命是让复杂的计算机变得易用,因此 Windows 用图形化界面实现了“让每张桌子、每个家庭都拥有一台电脑”的使命。而图形界面也包含了 Windows 的服务器版本,绝大多数服务器组件都可以点鼠标分分钟装完。

但微软不明白,程序员需要的是通过命令行装逼,而不是早点下班。于是 Linux 靠命令行、模块化、轻量级统治了服务器的半壁江山,让程序员和运维充分装到了逼。而且 Windows 服务器还有个问题,就是由于有完整的桌面 GUI,因此服务器硬件的资源并没有最大化利用来处理业务。微软一看,这样不行啊,于是在 Windows Server 2008 的时候推出了 Core 版本。

它是在部署 Windows Server Standard 或 Datacenter 版本时可用的最小安装选项。Server Core 包括大多数但并非全部服务器角色。相比完整桌面,Core 版本剔除了绝大部分GUI,并且你只安装需要的服务器角色,这样不仅降低了硬件开销,也降低了被攻击的风险。管理 Server Core 服务器基本通过命令行完成,易于装逼。

如果想要完全没有 GUI 的 Windows 服务器,可以了解一下 nano server,但这不是本文的议题,因此不暂不讨论。

使用传送门了解 Windows Server Core:

https://docs.microsoft.com/en-us/windows-server/administration/server-core/what-is-server-core

在 Azure 创建 Server Core 虚拟机

和创建其他虚拟机一样,在 Azure Portal 中创建 Server Core 虚拟机。镜像不在默认下拉列表里,需要自己从 "Browse all public and private images" 里搜出来。

镜像名称:

Windows Server 2019 Datacenter Server Core

由于我们要运行的是 ASP.NET Core 网站,并需要使用RDP登录服务器进行配置,所以建议开放 80,443,3389端口。

因为测试用途,我选择不配置防火墙,暴露所有端口到公网(也会忽略上一步的端口设置)。在真实环境中,请不要这样操作。

等服务器部署完成后,点击 DNS name 中的 "Configure" 配置一个域名。这是因为Azure上的VM默认IP地址是动态的,所以最好通过域名来访问,保证随时能找到你的服务器。

分配一个域名前缀

配置完成后,刷新 VM 主页,可以查看和复制用于访问虚拟机的域名。

登录 Server Core 服务器

点击 "Connect"

选择 Download RDP File

使用创建服务器时设置的账号密码登录 Server Core VM

此时大家会发现,Server Core 并不是完全没有GUI,而是最小化了 GUI 的存在。cmd 窗口依然是Windows渲染的。之后我们要用到的注册表编辑器也是 GUI 方式操作。

安装和配置 IIS

首先,借用我以前写的自动装机脚本(https://github.com/EdiWang/EnvSetup)里的一部分来安装IIS(除ASP.NET,因为我们用的是.NET Core,和经典ASP.NET没关系)

使用powershell命令,在cmd下启动powershell

powershell

然后依次执行

Enable-WindowsOptionalFeature-Online -FeatureName IIS-DefaultDocument -All

Enable-WindowsOptionalFeature-Online -FeatureName IIS-HttpCompressionDynamic -All

Enable-WindowsOptionalFeature-Online -FeatureName IIS-HttpCompressionStatic -All

Enable-WindowsOptionalFeature-Online -FeatureName IIS-WebSockets -All

Enable-WindowsOptionalFeature-Online -FeatureName IIS-ApplicationInit -All

Enable-WindowsOptionalFeature-Online -FeatureName IIS-ServerSideIncludes

Enable-WindowsOptionalFeature-Online -FeatureName IIS-BasicAuthentication

Enable-WindowsOptionalFeature-Online -FeatureName IIS-WindowsAuthentication

这一步应该也能通过 Install-WindowsFeature Web-Server 命令完成,但我没试过,大家可以自己实践

然后安装管理服务

Install-WindowsFeatureWeb-Mgmt-Service

运行 regedit 启动注册表编辑器,改一个注册表值

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WebManagement\Server

将 EnableRemoteManagement 改为 1

执行 exit 退出 powershell 回到 cmd,我们要将 wmsvc 设置为开机自启动

scconfig wmsvc start=auto

然后启动 wmsvc 服务

netstart wmsvc

并且要允许Windows防火墙(和Azure NSG无关)通过这个服务

netsh advfirewall firewall add rule name=”IIS Remote Management” dir=in action=allow service=WMSVC

安装 ASP.NET Core 服务器环境

尽管我们可以通过 powershell 去下载.NET Core运行时然后手工安装,但这样并不方便,逼格也不高。Windows上其实有个类似 Linux 里 apt 那样的命令行包管理工具,叫做 chocolatey,我们可以通过它在命令行下全自动安装大量软件。

再次键入 powershell,然后执行以下命令安装 choco

Set-ExecutionPolicyBypass -Scope Process -Force; iex ((New-ObjectSystem.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

完成后,键入 choco 检查是否能识别

执行以下命令,全自动安装 ASP.NET Core 服务器运行环境

chocoinstall dotnetcore-windowshosting -y

它将安装 x86, x64 两个运行时,以及 IIS 的 ANCM 模块

安装和配置 Web Deploy

使用 choco 安装 Web Deploy,该组件之后用于远程发布 ASP.NET Core 网站。

chocoinstall webdeploy -y

完成后重启一下 w3svc 服务

net stop w3svc

net start w3svc

IIS 远程管理

现在,我们能够在IIS管理器里远程连接到这台服务器进行网站发布。这可以在任何带有 IIS 7 以上管理器的机器上完成,比如我们自己的 Windows 10 客户端。

如果没有安装过 IIS 管理器,可以运行 optionalfeatures 并勾选 Internet Information Serviece / Web Management Service / IIS Management Console 安装。

然后要自己去下一个 IISManager for Remote Administration 1.2,传送门:

https://www.microsoft.com/en-us/download/details.aspx?id=41177

安装完成后,启动 IIS 管理器,选择 File-> Connect to a Server 

输入我们的服务器地址,即 Azure 上配过的那个DNS名称

忽略证书警告,点 Connect 

这时候可能会弹一堆关于 Web Deploy 的可选安装组件,全选并安装

然后在IIS里就能用你熟悉的点鼠标方式,管理服务器上的网站了,非常不996,一点也没有福报。

我们做的第一件事应该是检查 ASP.NET Core 的 ANCM 模块有没有安装成功。进入 Modules

检查是否有 AspNetCoreModule 以及 AspNetCoreModuleV2

当然,你也可以在服务器上使用 dotnet --info 命令检查运行时版本。

因为要刷新环境变量最方便的办法是重启cmd,然而我们在服务器上退出cmd以后,因为没有完整桌面,不知道哪里去启动cmd,其实可以通过 CTRL SHIFT ESC 调出任务管理器,然后运行cmd命令,开一个新的cmd出来。

然后就能愉快的运行 dotnet --info 了

服务器玩够了,就回到我们老实的 Windows 10 客户端。在 IIS 里给默认网站开个https支持,因为 .NET Core 现在默认会启用https(尽管我们没有证书)

在 Bindings 里,添加https/443的支持,并勾选一个IIS自带的临时证书

然后尝试访问 http/https 两个协议的网址,也就是你的VM DNS名称,忽略证书警告,应该都能打开

万一打不开,或者无法连接远程服务器的IIS,可以先喝热水,然后到服务器上用 Powershell 的 Restart-Computer 命令重启试试。实在不行,删库跑路,也挺省心,Azure 删 VM 只要几秒钟……

发布 ASP.NET Core 网站

虽然类似于Azure DevOps 的 CI / CD 工具完全能对接 Web Deploy 全自动发布网站,但这样的体验太没技术含量了,无法 996,没有梦想。因此我教大家开手动挡操作:

将一个 ASP.NET Core 网站编译,并发布到本地文件系统。然后把发布出来的文件打个zip压缩包。

然后回到IIS里,在服务器端的网站上点右键,选择 Deploy / Import Application

选择刚才打包的zip文件

选择zip包内全部内容

输入网站名称(一定要和IIS管理器里显示的网站名称一毛一样)

根据自己需要,选择是否删除目标位置多余文件

完成zip包导入

现在IIS管理器里就能看见网站目录下的所有文件了~

尝试访问一下VM的网址,网站成功运行,非常牛逼

参考文档:https://blogs.msdn.microsoft.com/benjaminperkins/2015/11/02/configure-an-iis-server-core-server-for-remote-management/

Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站相关推荐

  1. 在Azure Container Service创建Kubernetes(k8s)群集运行ASP.NET Core跨平台应用程序

    引子 在此前的一篇文章中,我介绍了如何在本地docker环境中运行ASP.NET Core跨平台应用程序,看起来非常不错,不是吗?那么,如果我们希望真正在实际的生产环境去部署和运行这个应用程序,应该怎 ...

  2. 在Linux和Windows的Docker容器中运行ASP.NET Core

    译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇 ...

  3. Centos7笔记之Docker-ce上运行ASP.NET CORE程序

    一.目标 centos7.6下Docker-ce上运行ASP.NET CORE程序 二.平台 [root@hiibm ~]# uname -r 3.10.0-957.el7.x86_64 [root@ ...

  4. .NET Core amp; ASP.NET Core 1.0在Redhat峰会上正式发布

    众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项.这个团队已经一起工作好几个月了,RHEL对.NET有许多需求.今天在 ...

  5. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  6. windows 服务中托管asp.net core

    在windows 服务中托管asp.net core SDK 2.1.300 官方示例 1.添加运行标识符 xml <PropertyGroup> <TargetFramework& ...

  7. 恭喜我自己装上了Windows Server 2008 R2 和使用Windows Live Writer 写日志

    由于工作上的关系,在公司几经周折后装上了Windows Server 2008 X64 SR2的系统后,我借此机会也在自己使用的电脑上装了这个系统.不过还算成功,虽然我没有找到完全破解的Key,只有1 ...

  8. 微软BUG Bounty悬赏项目扩展至.NET Core和ASP.NET Core

    微软宣布自 2016 年 9 月 1 日开始将 .NET Core 和 ASP.NET 纳入到 BUG Bounty 悬赏项目范围内,微软将会为 Windows 和 Linux 平台上的两个编程代码提 ...

  9. core+2.0+mysql_【Asp.Net Core】ASP.NET Core 2.0 + EF6 + Linux +MySql混搭

    好消息!特好消息!同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦! 是的,你没有看错!ASP.NET Core 2.0,.NET Frame ...

最新文章

  1. android 底部弹框 BottomSheetDialog 的使用
  2. Elasticsearch简史:源自给老婆开发烹饪App
  3. 告警系统邮件引擎、运行告警系统
  4. 分享一些书籍,方方面面,很多值得一读
  5. uvalive5790(DP)
  6. 读书笔记_代码大全2第十一章_选择好的变量名
  7. C语言实现双向链表Doubly Linked List(附完整源码)
  8. java文本区显示在右边_怎么让文本区从右边开始显示文本
  9. (\w+)\s*, \s*(\w+)
  10. SpringCloud工作笔记082---自动化部署Jenkins_Windows下安装使用Jekins
  11. for (;;) 与 while (true),哪个更快?
  12. 语言纸对折的厚度编写代码_分享几款由“Python”语言编写的“有趣、恶搞、好玩”的程序代码...
  13. 再聊一聊测试职业发展
  14. resources 下字体文件报错 simsun.ttc is not a valid TTF file
  15. 算法工程师书籍推荐——典藏版
  16. 《非常网管:网络管理从入门到精通(修订版)》——第1章 网络基础知识回顾1.1 计算机网络基础...
  17. 游戏界的奥斯卡奖是什么?还有哪些权威游戏奖项?
  18. 【nexusyum】CentOS7.x上用nexus搭建yum仓库
  19. IM互通新方案-GTalk to VoIP回拨服务
  20. android MDE工程师,Android Application Addon(插件) 架构及管理

热门文章

  1. chromebook刷机_如何将网站添加到您的Chromebook架子上
  2. ZBLOG-ASP2.2如何给图片增加ALT标签说明文字?
  3. 设计模式-工厂方法(Factory Method)
  4. Asp.Net MVC4入门指南(9):查询详细信息和删除记录
  5. python基础知识纵览(下)
  6. 5.03 列出表的索引
  7. HDU1232 畅通工程
  8. hdoj-1005-Number Sequences
  9. 4.7、Bootstrap V4自学之路------组件---广告屏
  10. java web程序 上机考试做一个登陆注册程序