投资网站建设公司多少钱,上海市工程信息网站,wordpress 过滤,广州番禺发布公众号前言上一篇文章介绍了如何将开发好的 Asp.Net Core 应用程序部署到 IIS#xff0c;且学习了进程内托管和进程外托管的区别#xff1b;接下来就要说说应用 Asp.Net Core 的特性#xff08;跨平台#xff09;#xff0c;将 .NetCore 部署到 Linux 中#xff0c;主流的 Linu… 前言上一篇文章介绍了如何将开发好的 Asp.Net Core 应用程序部署到 IIS且学习了进程内托管和进程外托管的区别接下来就要说说应用 Asp.Net Core 的特性跨平台将 .NetCore 部署到 Linux 中主流的 Linux 有多个版本的操作系统这里以 Centos-7.5 为例子其它版本的操作系统下的部署基本都是大同小异的除了了一些命令上的区别。在 Linux 上部署 .Net Core 应用程序通常的做法是使用托管宿主早在 1.0.4 的时代曾经推荐的做法是使用自托管即 Kestrel后来官方主力推荐使用 Supervisor 进行托管部署当然还有如今最流行的 Docker 部署但是 Docker 部署不在本文讨论范围这次我们主要讲讲怎么使用 “Kestrel” 和 “Supervisor” 进行部署。准备过程为了演示部署我专门到 Azure 上申请了 1 元使用套餐创建了一个 Centos-7.5 的虚拟机申请过程非常轻松愉快支付 1 元即可完成 1500 元的信用额度使用期限 30 天童叟无欺推荐大家申请用作测试学习的机器。花了几分钟机器拿到了感谢 Azure 的友情支持SSH 连接到虚拟机他是长这个样子的输入命令 cat /etc/redhat-release 查看版本大家拿到一台机器的时候一定要确认一下操作系统的版本因为 ubuntu 和 centos 下的有些命令是不同的比如 ubuntu 使用 apt-get,而 centos 使用 yun1. 自托管的部署-使用 Kestrel好了机器已经拿到系统已经确认下面的工作首先就是要在 Centos 上安装 .net core因为是 Azure 我抱着幻想输入 dotnet --version果然提示命令不存在这很工业标准。1.1 安装环境好的没问题我们就按照 https://dotnet.microsoft.com/learn/web/aspnet-hello-world-tutorial/install 的指引进行安装即可依次输入下面的命令sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpmsudo yum updatesudo yum install dotnet-sdk-2.2因为现在我们登录的账号不是 root所以执行命令期间可能会提示输入密码照做即可由于是新机器第一次进行 yum update 可能各种依赖比较多请耐心等待安装完成。如果是第一次使用 Linux 的同学请把 Linux 想象成 Windows 下的 dos 系统操作这样就可以实现平滑过渡了。安装完成输入 dotnet --version 输出下面的信息证明安装成功了1.2 配置服务运行的端口配置服务运行的端口有两种方式之前的文章介绍了使用 hosting.json 文件的方式这里演示为了方便因为 linux 下要配置防火墙等操作会把新手搞懵逼我们直接的代码中指定 80 端口代码如下 public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) WebHost.CreateDefaultBuilder(args) .UseKestrel(options { options.Listen(IPAddress.Parse(0.0.0.0), 80); }) .UseStartupStartup(); }非常简洁的代码仅仅使用 UseKestrel 就可以配置侦听地址和端口如果有多块网卡的朋友注意最好还是指定 IP 地址。2. 开始发布2.1 发布到本地文件夹定位到项目 D:\Learning\Deploy.Linux\Deploy.Linux输入 cmd 启动命令行输入以下命令dotnet publish --runtime centos.7-x64 --framework netcoreapp2.2 --configuration release执行上述命令后将会在项目 bin\release\netcoreapp2.2\centos.7-x64\publish 下看到有发布好的项目文件和依赖项目注意参数 --runtime 是有固定 RID 的想了解更多有关 RID 的知识请移步 .NET Core RID 目录接下来在服务器中新建一个文件夹在控制台中输入命令sudo mkdir -p /data/sites/demo// 修改权限为当前登录用户否则无法上传sudo chown -R ron:ron /data将 publish 文件夹上传到服务器上刚才创建好的文件夹 /data/sites/demo 下我这里使用的是 SecureFx 简单粗暴直接复制上传2.2 测试启动上传成功后先不要着急的写服务文件先测试一下是否可以启动先使用控制台进行测试输入命令定位到 publish 文件夹cd /data/sites/demo/publish// 启动因为要侦听端口而且我们使用的不是 root 用户这里需要使用 sudo 进行提权如果提示输入密码请输入当前登录用户的密码即可sudo dotnet Deploy.Linux.dll测试启动成功上面输出的信息表示我们的发布是没有问题的先来了解一下上面的输出信息// 主机环境ProductionHosting environment: Production// 根目录Content root path: /data/sites/demo/publish// 侦听地址和端口Now listening on: http://0.0.0.0:80// 提示关闭技巧CtrlC 可以关闭此主机Application started. Press CtrlC to shut down.没有太多的信息同样的简单明了实际上现在我们已经通过 80 端口来访问该站点了但是作为服务必须要常驻内存中运行而不是关闭窗口就停止了站点。2.3 创建常驻服务所以接下来我们就编写一个脚本文件将该站点托管到 Linux 服务中这个脚本文件官网有示例我们可以直接拿过来用但是首先我们得先在系统中创建一个服务文件 kestrel-dotnet.service定位到文件夹 /etc/systemd/system输入命令sudo vi kestrel-dotnet.service// 按 i 将编辑器转换为输入模式// 将以下内容 copy 到当前编辑器中[Unit]DescriptionExample .NET Web Site running on Centos[Service]WorkingDirectory/data/sites/demo/publishExecStart/usr/bin/dotnet Deploy.Linux.dllRestartalways# Restart service after 10 seconds if the dotnet service crashes:RestartSec10KillSignalSIGINTSyslogIdentifierdotnet-exampleUserrootEnvironmentASPNETCORE_ENVIRONMENTProductionEnvironmentDOTNET_PRINT_TELEMETRY_MESSAGEfalse[Install]WantedBymulti-user.target// 按 esc 键推出编辑模式输入命令 :wq! 保存并退出通过上面这波操作以后你就得到了一个服务文件 kestrel-dotnet.service这是一个标准的 Linux 服务配置文件经过上面的一系列操作对于还没有接触过 Linux 的同学来说已经有点疲惫了再坚持一下马上就好现在将创建好的服务文件注册到系统中然后启动它依次输入以下命令// 注册服务sudo systemctl enable kestrel-dotnet.service// 启动服务sudo systemctl start kestrel-dotnet.service好了现在访问我们的站点目前我的站点是 http://139.219.9.102/ 在服务没有到期之前大家应该都是该地址应该是可以访问的结束语写到这里发现文章居然有点长了对于入门文章来说这是不合适的好吧下一篇再继续介绍使用 Supervisor 进行托管部署 Asp.Net Core 应用程序演示代码下载 https://github.com/lianggx/EasyAspNetCoreDemo/tree/master/Deploy.Linux原文地址https://www.cnblogs.com/viter/p/10408012.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com