最近在学习asp.net core,当然学习的目的是想了解一下,Asp.net core是否真的能够是先跨平台部署。 根据目前官网资料说明,asp.net core只有在Redhat 企业版上,才能够实现所有的功能。不过这个版本是收费的,可能不是大多数人的最佳选择。 笔者目前选择的实验环境是Ubuntu 16.4 和CentOS7这两个平台。 从长远角度来说,CentOS7维护周期长,更加适合企业生产环境。Ubuntu择以更加活跃的社区,更加快速的更新受到欢迎,不过他的维护周期一般只有2~3年,也就是说,一旦出现一个新版本,老版本的ubuntu可能就不会受到更新维护了,然而升级大版本,可能会牵扯很多问题,所以具体选择那个系统,还需要用户自行斟酌。 笔者这里首先说一下Ubuntu的部署方法。 这里是微软官方的Getting Started教程:https://docs.asp.net/en/latest/getting-started.html 1.安装.net core. 这里可以看到,目前.net core支持的所有linux系统。我们选择Ubuntu。 这里有个分支,需要确认ubuntu版本。根据版本不通,进行不通配置,更新下载.net core. 版本可以通过命令:cat /etc/issue来查询 Ubutu 14.4 执行: sudo sh -c ‘echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list‘ sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 sudo apt-get update Ubuntu 16.4执行: sudo sh -c ‘echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list‘ sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 sudo apt-get update 然后安装.net core sdk。 sudo apt-get install dotnet-dev-1.0.0-preview2-003121 完成之后,可以参照微软说明,跑一个hello world进行下测试。 2.把使用vs2015,基于asp.net core开发的项目进行发布。这里一定要注意,必须是基于Asp.net Core开发的项目,基于.net framework的项目只能运行在windows平台,切记。同时需要注意好数据库的配置。默认的示例项目是使用的sqlserver compact数据库,这个是不支持跨平台的,当然也就不能部署到linux上去。所以使用示例项目的话,把SeedData的调用注释掉,或者移除掉数据库操作代码再发布。如果是使用的MySql或者其他数据库,请确认提前在Ubuntu上完成部署,并做好相关数据库配置。这里不再记录,总是需要自行试一下的。 对了,还需要注意一个地方, public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); } 记得要UseKestrel()。 3.发布项目。可以用vs2015的发布网站发布,也可以用命令行发布。这里写下命令行发布的方法。 定位到项目目录下,要有project.json的目录下。 dotnet restore 这个是更新所有的项目引用 然后 dotnet publish 这个是发布项目,发布过程中如果出现了错误提示,请自行根据情况解决。 如果出现:“No executable found matching command "bower"”请看这里 4.将发布的项目上传到ubuntu服务器。可以用ssh secure file transfer或者ftp什么的上传。 5.切换到项目目录下,执行 dotnet XXX.dll 笔者这里测试用的WebApplication1.dll 说明环境配置,及项目配置没问题,服务正常启用。 不过没有办法远程访问?这是因为listening on: http://localhost:5000的原因,你只是监听了localhost的5000端口,所以不支持外部ip:5000的访问。这里可以用nginx,待会说到,也可以修改一下代码如下: public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseUrls("http://*:5000") .Build(); host.Run(); } 这里改成了监听http://*:5000,一看就明白了吧,这是监听任意ip的5000端口。重新发布,并上传后 看到第二次执行后,监听地址发生变化,现在浏览器里可以直接访问了。 好吧,这样可以临时凑合用,但是一旦重启,服务并不会自动运行,并且现在主流都是通过nginx做代理使用,下面我们继续说。 6.安装nginx sudo apt-get install nginx nano /etc/nginx/sites-available/default 当然vi也可以。 修改Server节点配置: server { listen 80; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } ctrl+O Ctrl+X 保存,然后退出。 重启Nginx sudo service nginx restart 这样Nginx代理就配置好了,然后是做个自动启动服务。 7.安装Supervisor supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。 通俗的来讲,可以方便的做成启动项自动运行。 sudo apt-get install supervisor 在/etc/supervisor/conf.d/目录下新建文件 XXX.conf nano /etc/supervisor/conf.d/Test.conf 敲入代码: [program:WebApplication1] command=/usr/bin/dotnet /home/robin/publish/WebApplication1.dll directory=/home/robin/publish autostart=true autorestart=true stderr_logfile=/var/log/NetCoreBBS.err.log stdout_logfile=/var/log/NetCoreBBS.out.log environment=ASPNETCORE__ENVIRONMENT=Production user=root stopsignal=INT Ctrl+O Ctrl+X保存 sudo service supervisor restart 重启supervisor。 然后你会发现,不需要你在手动去运行dotnet xxx.dll来启动监听了,并且可以直接通过80端口访问项目了,即使没有配置http://*:5000,使用的localhost也可以正常访问,因为毕竟是走的nginx进行的转发。 总结: .net 总算解决了跨平台的问题,虽然WinForm程序目前还没有实现,但是基础的ConsoleApp,asp.net core,都已经可以实现linux平台部署。可以说,基本的企业级项目开发已经可以通过asp.net core来实现跨平台了。开发工具可以用vs2015(windows)或者Vs code(Mac和linux),就IDE环境来说,甩Eclipse几条街妥妥的。 不过需要注意,System.drawing并没有实现,后台加水印什么的,可能只能依托于其他三方插件实现,不过相信会越来越完善的。 aspnet github社区(https://github.com/aspnet) 还希望大家参与进来,一块完善aspnet core。一些bug也可以来这里反应。 |
ASP.net Core部署说明(Ubuntu) [转]
时间: 2024-10-13 10:34:34
ASP.net Core部署说明(Ubuntu) [转]的相关文章
你真的了解ASP.NET Core 部署模型吗?
原文:你真的了解ASP.NET Core 部署模型吗? ---------------------------- 以下内容针对 ASP.NET Core2.1,2.2出现IIS进程内寄宿 暂不展开讨论-------------------------- 相比ASP.NET,ASP.NET Core 2.1出现了3个新的组件:ASP.NET Core Module.Kestrel.dotnet.exe, 后面我们会理清楚这三个组件的作用和组件之间的交互原理. ASP.NET Core 设计的初
又一篇Centos7下的asp.net core部署教程
原文:又一篇Centos7下的asp.net core部署教程 历程2个多月的学习,我终于从PHP转.Net开发了. 虽然网上已经有很多关于asp.net core在linux下的部署教程了,但我还是想写一篇,主要增强我自己的记忆. 搭建的环境为Centos7 + .net core + nginx + mysql5.7,我的网站是asp.net core后端,vue前端,数据据mysql: 第一次搭建时遇到不少的坑,我会在下面也说到 前提,你有一台可以联网,有root账号密码,有开通ssh的
asp.net core 部署 提示DataProtectionServices 错误
今天在部署asp.net core网站时,因为调用到阿里云的api,api的参数需要加密签名,系统报出了如下错误: warn: Microsoft.Extensions.DependencyInjection.DataProtectionServices[59] Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailabl
asp.net core部署到iis
asp.net core项目部署到IIS稍微不同于之前,记录几个要点: 一.下载安装AspNetCoreModule模块,它包含在.NET Core Windows Server Hosting bundle里面,这个链接或许不是最新的了,官方文档里面有这个链接,到下图所示位置即可找到. 安装完之后,会发现多了个模块: 然后重启iis.如果还是出现以下错误: HTTP Error 502.5 - Process Failure Common causes of this issue: The a
ASP.NET Core部署到Windows IIS
网上已经有许多ASP.NET Core关于Widows IIS部署的文章,在部署到服务器时遇到了一些问题,在这里我就不再对原理进行阐释(复制)了,只写下一些关键环节,想看原理的同学请参考官网,此文章作为留用. 步骤: 1.ASP.NET Core程序内配置 2.Windows Server配置 一.ASP.NET Core应用程序配置 web.config 配置(官方教程) 重点修改 processPath 和 arguments 两个参数 processPath 修改为 dotnet arg
.net core部署到Ubuntu
1.使用vs2017创建Asp.net Core Web应用程序,选择ubuntu中安装的.net core版本,这里选择2.1版本: 2.右键发布该项目,选择文件系统发布: 3.在ubuntu中安装vsftpd(Ubuntu安装vsftpd并通过xftp连接),并通过xftp将发布的publish目录上传到ubuntu服务器,也可以通过ftp直接发布到ubuntu,需要配置vsftpd,配置项比较多,可以参考:FTP服务器vsftpd配置详解 4.执行dotnet WebApp.dll,然后就
ASP.NET Core部署系列一:发布到IIS上
前言: 当构建一个ASP.NET Core应用程序并且计划将其运行在IIS中时,你会发现Core应用程序和之前版本的ASP.NET程序在IIS中的运行方式是完全不一样的.与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kestrel不同端口的ASP.NET Core程序中,随后就将接收到的请求推送至中间件管道中去,处理完你的请求和相关业务逻辑之后再将HTTP响
解决ASP.NET Core部署到IIS,更新项目";另一个程序正在使用此文件,进程无法访问";
问题:部署到IIS上的ASP.NET Core项目,在更新的时候会进程占用的错误 初步解决方案: 1,关闭应用程序池 2,关闭网站 3,更新项目 缺点:网站没法访问,部署项目停的时间过长 查询官方文档后,官方给出的方案: 结合官方文档,找到了一个目前看算是比较好的解决方案(一定要看底部的特别注意) 好点的解决方案(一次配置后,1秒钟更新): 1,在D盘根目录创建一个app_offline.htm文件,注意是.htm文件,不是.html 2,创建一个待发布文件夹,把需要更新的项目文件放到该目录下
Asp.Net Core部署:史上最简单的Web部署
简介 .net core的部署方式多种多样,最好的方式可能就是docker部署了,简单快速还可以集成CI/CD,不过这里给大家介绍的是最简单快速的部署方式,适合新手尝鲜也适合小型项目的单独部署. 本篇介绍的是Windows Server环境部署,了解其他部署方式的客官请止步. 准备 Windows Server服务器,安装.Net Core3.1 部署 Step1:发布Asp.Net Core项目 使用VS或cli dotnet publish -o publish发布项目,建议直接将发布到项目