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

最新文章

  1. HTML Select 标签选择后触发jQuery事件代码实例
  2. python进程池:multiprocessing.pool
  3. linux网络:常用命令(二)
  4. paip.提升性能---jvm java 工具使用.
  5. Spring源码下载
  6. 2016年JavaScript技术栈展望
  7. Aspose 导出excel小demo
  8. Array.Copy
  9. URL重写 UrlRewrite
  10. android邮件发送几种方式
  11. IE下支持文本框和密码框placeholder效果的JQuery插件
  12. URL伪静态设置 (apache2.4)
  13. POI读入excel文件到Java中
  14. js 图片点击放大功能
  15. Redis .Net 基本类型使用之南
  16. eayUi panel实现上一页下一页
  17. Mysql 导入导出表结构与数据
  18. BZOJ 1977 严格次小生成树(算竞进阶习题)
  19. RocketMQ事务消息回查设计方案
  20. centos7.5安装golang

热门文章

  1. jstl-vaStatus 属性count与index
  2. 修正iOS从照相机和相册中获取的图片方向(转)
  3. 。U盘安装CentOS6.5
  4. IPMI
  5. 关于php的开源
  6. 详解MVC设计模式
  7. docker compose 笔记
  8. iscroll 下拉刷新功能
  9. raw转qcow2
  10. [Java] Java解析XML格式Response后组装成Map