长期以来,使用.NET开发的应用只能运行在Windows平台上面,而目前国内蓬勃发展的互联网公司由于成本的考虑,大量使用免费的Linux平台,这就使得.NET空有一身绝技但无法得到广大的施展空间,.NET平台被认为只适合开发企业内部应用系统。

2016年6月27日,微软正式发布.NET Core 1.0、ASP.NET 1.0和Entity Framework Core 1.0,通吃 Windows、OS X和Linux三大操作系统。.NET Core作为新一代跨平台、开源的.NET平台备受瞩目,有人说,.NET程序员的春天来了。

本文将介绍如何把ASP.NET Core的网站发布到Linux服务器上。

环境准备

本文用到的操作系统和软件版本如下:
Visual Studio 2017企业版
.NET Core 1.1
CentOS 7 X64

创建发布ASP.NET Core网站项目

1.创建项目
打开VS2017,新建项目,选择ASP.NET Core Web应用程序(.NET Core)


选择Web应用程序模板。

直接F5测试网站是否正常。

2.增加Url网址配置文件
项目默认使用http://localhost:5000的Url进行侦听,我们可以增加一个配置文件来随时修改Url地址。
在项目根目录中增加一个hosting.json文件,文件内容如下(8080端口可以改成自己喜欢的):

{"server.urls": "http://*:8080"
}

编辑Program.cs文件,修改为内容如下:

        public static void Main(string[] args) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json", optional: true) .Build(); var host = new WebHostBuilder() .UseKestrel() .UseConfiguration(config) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseApplicationInsights() .Build(); host.Run(); }

3.发布项目
右键项目-发布,选择文件夹模式。
把发布的PublishOutput文件夹压缩成zip格式,上传到CentOS服务器。

安装.NET Core

1.下载最新的.NET Core版本
官网下载地址:https://www.microsoft.com/net/download/linux
我使用的版本是dotnet-centos-x64.1.1.1.tar.gz。
2.上传并解压下载的安装文件。

$ # 创建dotnet文件夹
$ mkdir ~/dotnet
$ # 复制dotnet安装文件到dotnet文件夹下 $ cp dotnet-centos-x64.1.1.1.tar.gz ~/dotnet $ # 解压安装文件 $ tar -xzf ~/dotnet/dotnet-centos-x64.1.1.1.tar.gz $ # 添加软连接,可以在全局使用 $ ln -s ~/dotnet/dotnet /usr/local/bin $ # 测试安装是否成功,成功会显示版本号 $ dotnet –version 

启动网站

$ #解压之前上传的网站压缩文件,如果没有安装unzip,运行yum install -y unzip zip安装
$ unzip ~/dotnet/PublishOutput.zip
$ #先关闭防火墙 $ systemctl stop firewalld.service $ #启动网站 $ cd PublishOutput $ dotnet TestAspNetCoreWeb.dll $ 如果报错Failed to bind to CoreCLR,运行yum install -y libunwind 和 yum install -y icu


启动成功,可以访问http://192.168.57.7:8080打开了(192.168.57.7是虚拟机IP地址,本地访问的话也可以使用localhost)。

安装配置守护进程(Supervisor)

使用Supervisor对ASP.NET Core网站应用进行监控,使网站可以持续运行,不然退出Shell后网站就停止了。

$ # 安装Supervisor
$ yum install python-setuptools
$ easy_install supervisor
$ #配置Supervisor $ mkdir /etc/supervisor $ echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改supervisord.conf文件,将文件最后的内容修改如下:

创建目录conf.d,在目录下创建文件TestAspNetCoreWeb.conf
文件内容如下:

[program:TestDotNetCoreWeb]
command=dotnet TestAspNetCoreWeb.dll
directory=/root/dotnet/PublishOutput
autorestart=true stderr_logfile=/var/log/TestDotNetCoreWeb.err.log stdout_logfile=/var/log/TestDotNetCoreWeb.out.log environment=ASPNETCORE_ENVIRONMENT=Production user=root stopsignal=INT

运行supervisord并查看进程是否生效。

$ supervisord -c /etc/supervisor/supervisord.conf
$ ps -ef | grep TestDotNetCoreWeb


配置文件如有修改,使用命令supervisorctl reload重新加载。
没效果可以看log文件是否有报错。

安装配置Nginx

访问 http://dl.fedoraproject.org/pub/
下载合适版本的epel,并上传到服务器。
如:http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm

$ #安装epel
$ rpm -ivh epel-release-7-9.noarch.rpm $ #安装nginx $ yum install nginx $ #启动nginx $ systemctl start nginx $ #将nginx添加至SELinux的白名单,否则会报502错误。 $ yum install policycoreutils-python $ cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx $ semodule -i mynginx.pp $ #测试nginx是否正常 $ curl http://127.0.0.1

修改配置文件/etc/nginx/nginx.conf中server部分为以下内容,配置Nginx侦听之前的网站。

server {listen  80 ;location / {proxy_pass http://192.168.57.7:8080; 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; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }

$ #修改完后重新加载配置文件
$ nginx -s reload
$#设置开机启动 $ systemctl enable nginx.service

配置完成后即可使用http://192.168.57.7访问网站。

转载于:https://www.cnblogs.com/gbat/p/9134439.html

ASP.NET Core 网站发布到Linux服务器相关推荐

  1. .NET Core网站发布到Linux系统的方法(一)

    我是一名.NET开发者,精通Windows下的应用和网站开发,但对于Linux则算是一个小白.微软推出了.NET Core,让我们可以在Linux下部署.NET程序.痛苦地折腾了两天,终于解决了所有问 ...

  2. ASP.NET Core 程序发布到Linux(Centos7)爬坑实战

    前言 前阶段弄了个Linux系统想倒腾倒腾.NET Core,结果看了下网上的资料,大部分都是过期的,走了不少弯路,不过还好,今下午总算捣鼓出来了.Linux命令太多了,唉.血的教训:安装一定要看官网 ...

  3. .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上

    天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站点部署到了 Linux 服务器上,这是我们解决了在 .NET Core 上使用 EnyimMemc ...

  4. ASP.NET Core 网站在Docker中运行

    Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...

  5. ASP.NET Core网站使用Nginx布署Linux上配置和发布及相关代码

    本文主要介绍使用ASP.NET Core开发的网站,运行布署在Linux上的方法,包括.NET Core SDK找安装,项目的发布和网站运行及开机自动启动及Nginx相关配置方法 . 原文地址:ASP ...

  6. Asp.net Core 打包发布 (Linux+Nginx)

    如果你觉得如下这些文章对你有帮助,请点击链接支持作者原创 http://www.cnblogs.com/savorboard/ .Net Core SDK 命令介绍 前言 本篇主要介绍 asp.net ...

  7. 如何在宝塔面板启用 ASP.NET CORE 网站并自动申请 HTTPS 证书

    要想在 Linux 上部署 ASP.NET CORE 网站,除了使用"宇内流云"大神的 Jexus 之外就是使用 Nginx 对 ASP.NET CORE 网站进行反向代理. 常规 ...

  8. Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站

    点击上方蓝字关注"汪宇杰博客" 导语 微软智慧云 Azure 上虽然早就有 App Service 这种完全托管的 PaaS 服务可以让我们分分钟建网站.但是不自己配一下环境,就不 ...

  9. ASP.NET Core 部署到Cont OS 服务器

    一.前言 当 asp.net core 发布以后,实现了跨平台.基于好奇,我就测试了一下 core 项目部署到 linux 服务器.感觉一路还是有所收获,接下来记录一下操作流程. 工具:window ...

最新文章

  1. [机器学习]机器学习笔记整理12-线性回归概念理解
  2. Spark- Linux下安装Spark
  3. u盘启动 联想一体机_联想Y430pAT-ISE(H)U盘安装Win7系统教程
  4. 矢量合成和分解的法则_专题06 共点力的合成与分解
  5. 荣耀v30鸿蒙5g是什么版本,标配双模5G全国通手机 荣耀V30马上就要来了
  6. 第7章 PCA与梯度上升法 学习笔记上
  7. 大一计算机word排版试题,Word排版练习题
  8. Bootstrap系列---按钮
  9. 抛开Wintel体系和AA体系
  10. CPU、GPU、TPU、NPU等到底是什么?
  11. 关于流程图的场景提炼,这一次终于说清楚业务流程图、功能流程图、页面流程图了
  12. 3 天天向上的力量 c语言
  13. 计算机应用基础165791,人大网大计算机应用基础试题答案解析.doc
  14. DUL 更新2016
  15. 理解透彻!java微信公众号开发流程
  16. 【宋词】之《鹧鸪天·代人赋》
  17. win10 调用计算机,win10系统打开软件总提示是否允许程序修改计算机的解决方法...
  18. 【数据结构】顺序表的创建、插入、删除、合并
  19. android手机版本
  20. 使用kprobe监控linux内核提权(cred方法)

热门文章

  1. 解决写文档对于图片边框的强迫症
  2. [vue] 你了解vue的diff算法吗?
  3. [vue] 说下你对指令的理解?
  4. [css] 移动端1px像素的问题及解决方案是什么?
  5. 前端学习(2697):重读vue电商网站18之监听图片删除事件
  6. 前端学习(2649):vue3.0的处理展示
  7. 工作162:选择日期自传父
  8. 工作总结8:关于Vue中的slot-scope=“scope“
  9. 前端学习(2136):使用es6模块化出现Access to script at ‘file:///... ..from origin ‘null‘ has been blocked。。。错误
  10. 前端学习(1760):前端调试值之如何让浏览器阻止请求相关资源