• ASP.net Core部署说明(Ubuntu) [转]


    最近在学习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也可以来这里反应。
  • 相关阅读:
    SPARK 中 DriverMemory和ExecutorMemory
    Logistic Regression vs Decision Trees vs SVM: Part II
    Logistic Regression Vs Decision Trees Vs SVM: Part I
    Scala _ [underscore] magic
    spark-shell --conf
    spark-submit [options]
    maven 将依赖的jar包打入jar包中
    log4j
    eclipse java工程和maven工程的互相转换
    插件上传2
  • 原文地址:https://www.cnblogs.com/whtydn/p/5723231.html
Copyright © 2020-2023  润新知