最近在学习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) [转]的更多相关文章

  1. 使用 Visual Studio 部署 .NET Core 应用 ——.Net Core 部署到Ubuntu 16.04

    .Net Core 部署到Ubuntu 16.04 中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk-2.0) 3.Supervisor(进程管理工具,目的是服务 ...

  2. Asp.Net Core部署到Linux服务器

    从2016年7月, .NET Core1.0 正式发布开始,由于时间问题,我没怎么关注过.NET Core,最近刚抽出点时间研究了下,先讲下如何把ASP.NET Core部署到Linux上吧.这里我用 ...

  3. ASP.NET CORE部署到Linux

    ASP.NET CORE部署到CentOS中 在Linux上安装.NET Core 参考:https://www.microsoft.com/net/core#linuxcentos 配置Nginx ...

  4. ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成

    ASP.NET Boilerplate 学习   1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...

  5. 从零开始,将ASP.NET Core部署到Linux生产环境

    研究.NET Core已经一段时间了,一直都是在Windows上开发,这2天尝试着将公司一个很简单的内部Web项目改造成了ASP.NET Core,并且部署到Linux上.生产环境如下: Linux ...

  6. 系列13 docker asp.net core部署

    一.介绍   本篇完整介绍asp.net core web api如何部署到docker容器中,并通过外部访问web api服务.在编写完成dockerfile之后,可以通过docker [image ...

  7. asp.net core 部署 提示DataProtectionServices 错误

    今天在部署asp.net core网站时,因为调用到阿里云的api,api的参数需要加密签名,系统报出了如下错误: warn: Microsoft.Extensions.DependencyInjec ...

  8. Asp.net Core 部署到Azure.cn的一个小问题

    前一段尝试在azure.cn上部署Aps.net Core未成功,报503错误!在网上查到是Azure.cn的问题,未能完美支持Asp.net Core! Asp.net Core发表正式版了,又尝试 ...

  9. ASP.NET Core部署到Windows IIS

    网上已经有许多ASP.NET Core关于Widows IIS部署的文章,在部署到服务器时遇到了一些问题,在这里我就不再对原理进行阐释(复制)了,只写下一些关键环节,想看原理的同学请参考官网,此文章作 ...

随机推荐

  1. 第一章.C语言简介

    C语言第一章 C语言简介   目录 一.C语言介绍 二.C语言特点 三.Hello World 四.转义符 五.占位符 六.俄罗斯方块游戏 七.文件下载 一.C语言介绍 C是一种通用的编程语言,广泛用 ...

  2. Glide 图片加载库

    compile 'com.github.bumptech.glide:glide:3.7.0' Glide.with(context) //图片url .load("http://www.b ...

  3. 关于小黄车(ofo共享单车)使用的问题

    小黄车即ofo共享单车,号称是全球创立最早.成长最快.规模最大的无桩共享单车创业公司,缔造了"共享单车"概念,致力于解决城市出行问题.它的出现给大家带来了方便,作为一个商业运行的公 ...

  4. 如何静态添加toolbar到datagrid

    这个示例向你展示如何添加toolbar到datagrid. 创建 DataGrid <table id="tt" class="easyui-datagrid&qu ...

  5. 【Treap】bzoj1588-HNOI2002营业额统计

    一.题目 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司 ...

  6. Linux下查看/管理当前登录用户及用户操作历史记录

    转载自: http://www.cnblogs.com/gaojun/archive/2013/10/24/3385885.html 一.查看及管理当前登录用户 1.使用w命令查看登录用户正在使用的进 ...

  7. 相机位姿估计1_1:OpenCV:solvePnP二次封装与性能测试

    关键词:OpenCV::solvePnP 文章类型:方法封装.测试 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-27 @Lab: CvLab20 ...

  8. js 睡觉

    js睡觉 function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMilli ...

  9. img和css背景的选择

    在什么情况下更适合使用HTML IMG标签来显示一个图像,而不是一个CSS有背景图像,反之亦然? 如下场景使用img标签比较合适: 1.如果图像是等内容的一部分或图表或人(真正的人,而不是股票图人), ...

  10. [JS复习] JS 基础知识

    项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display  :inline or bloc ...