最近在学习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也能够来这里反应。
|