.NET Core跨平台部署
原文:.NET Core跨平台部署

.NET Core跨平台部署

1. Windows-IIS

大家对于在IIS上部署.NET站点已经驾轻就熟了,部署.NET Core也没有什么本质区别,但是这其中仍然有一些细节是不同的,下面记录了一些我在部署时遇到的问题

1.1 安装.NET Core Windows Server Hosting

要在IIS上运行ASP.NET Core,必须安装.NET Core Windows Server Hosting

安装完成后最好重启IIS

如果没有安装该组件就直接打开部署的网站会出现 500.19 相关的配置数据无效

1.2 配置应用程序池

Core的IIS站点应用程序池的.NET CLR版本要选择 无托管代码

1.3 使用发布文件

我最开始测试的时候,仍然使用Web根目录作为网站的物理路径,但是网站无法访问,报HTTP403错误——Web 服务器被配置为不列出此目录的内容,也是就是这个文件夹下没有可以访问的文件,在查阅网上的资料后发现其他人都是使用了发布文件夹作为物理路径,生成发布版本设置相应路径后.NET Core的示例站点即可正常访问

发布文件夹结构

成功访问

2 Linux

微软官方给出了不同系统的部署方法Tutorial Guide,由于Linux有不同的版本,所以这里选择CentOS作为示例,有以下几个步骤

2.1 添加.NET产品依赖

在安装.NET之前,你需要注册微软的Key,注册产品仓库,并且安装需要的依赖,在每台机器上只需要做一次。

直接执行以下命令:

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

2.2 安装.NET SDK

更新可供安装的产品,然后安装.NET SDK

输入以下命令:

sudo yum update
sudo yum install dotnet-sdk-2.2

中间有两次手动确认,然后等待安装完成即可

2.3 创建你的应用

通过输入命令就可以创建一个官方的示例.NET Core程序

dotnet new console -o myApp
cd myApp

第一条命令新建应用,第二条进入应用文件夹

通过 ls 命令我们可以看到该文件夹下只有两个文件,obj是文件夹

默认的主文件Program.cs的内容如下:

using System;namespace myApp
{class Program{static void Main(string[] args){Console.WriteLine("Hello World!");}}
}

2.4 运行应用

dotnet run

2.5 创建web应用

使用mkdir命令新建一个文件夹mvc,然后进入目录

创建网站

dotnet new mvc

然后发布这个网站程序

dotnet restore
dotnet publish -c release

默认的发布目录是在/bin/release/netcoreapp2.x/publish/里,可以新建一个目录拷贝进去

scp -r /root/mvc/bin/release/netcoreapp2.2/publish/* /root/www/firstapp

2.6 从外网访问web应用

完成发布后,已经可以通过执行dotnet命令来启动网站了,但是只能在内网访问,显然这不是我们想要的,要想从外网访问,我们需要反向代理服务器,这里选择Nginx

使用yum命令远程安装

sudo yum install epel-release
yum install nginx

启动

systemctl start nginx #启用Nginx
systemctl enable nginx #设置开机启动

这时候已经可以直接通过服务器的IP地址的80端口访问Nginx的测试页了,需要注意的是如果使用阿里云服务器,需要在安全组配置中开放80端口才能够访问

接下来根据需要进行一些端口的配置,dotnet默认的访问端口为5000,但是我测试的时候好像是在linux上被占用了,所以对 Program.cs 进行修改,使其可以通过其他端口访问,这里使用8080

public class Program
{public static void Main(string[] args){CreateWebHostBuilder(args).Build().Run();}public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseUrls("http://*:8080").UseStartup<Startup>();
}

改完之后需要重新生成发布,开始我使用的是微软官方的示例程序,这里为了对比端口,我在自己Windows系统下新建了一个2.1的示例程序,使用VS2017进行程序修改,发布后通过xftp再上传到Linux服务器上

然后去修改Nginx的配置,默认的路径应该是/etc/nginx/nginx.conf,在server节点下的location节点加一句 proxy_pass http://localhost:8080; 就可以

server {listen       80 default_server;listen       [::]:80 default_server;server_name  _;root         /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {proxy_pass http://localhost:8080;}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}
}

修改完成后测试并重启Nginx服务

sudo nginx -t         #测试配置
sudo nginx -s reload  #重新加载配置

配置完成之后,启动网站访问服务器IP地址的8080端口即可

但是启动网站这里存在一个问题,如果像上面那样没有使用cd命令进入网站目录启动,样式和脚本等文件的路径就会出现错误,导致页面显示不正常所以要在网站目录启动

基本的网站部署就到这里,下一次讲讲用Docker如何进行.NET Core的部署与开发

posted on 2018-12-10 14:05 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/10096141.html

.NET Core跨平台部署相关推荐

  1. .NET Core跨平台部署于Docker(Centos)- 视频教程

    .NET Core跨平台部署于Docker, Docker部署于Centos中, 演示跨平台特性! 以下视频教程,请带上耳机开始聆听 往期教程: .NET开发框架(一)-框架介绍与视频演示 .NET开 ...

  2. 网站部署后无法访问sqlserver_.NET Core跨平台部署

    1. Windows-IIS 大家对于在IIS上部署.NET站点已经驾轻就熟了,部署.NET Core也没有什么本质区别,但是这其中仍然有一些细节是不同的,下面记录了一些我在部署时遇到的问题 1.1 ...

  3. ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署

    本文聊一下如何在Windows上用VS开发并发布, 然后将其部署到CentOS上.对于我们一些常在Windows上逛的来说,CentOS用起来还真有些麻烦.MSDN官方有篇文章大概讲了一下(链接),按 ...

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

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

  5. views 多个文件夹 netcore_Visual Studio 2019发布.NET Core项目部署或者独立运行的方法...

    Visual Studio 2019发布.NET Core项目部署或者独立运行的方法 Visual Studio 2019是一款专为程序开发人员设计,支持 Windows 和 Mac系统,适用范围广, ...

  6. ASP.NET Core跨平台技术内幕

    ASP.NET Core设计初衷是开源跨平台.高性能Web服务器,其中跨平台特性较早期ASP.NET是一个显著的飞跃,.NET现可以理直气壮与JAVA同台竞技,而ASP.NET Core的高性能特性更 ...

  7. 小白开学Asp.Net Core 《六》 —— 探究.Net Core 跨平台的奥秘

    1.写这篇文章的初衷 有好多朋友反馈看不懂我写的开源的一个练手项目(GitHub:https://github.com/AjuPrince/Aju.Carefree)也有好多人都希望我能写一些简单的入 ...

  8. .Net Core跨平台应用研究-HelloArm(串口篇)

    引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行,针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证 ...

  9. .NET Core 跨平台物联网框架 ServerSuperIO.Core,一套设备驱动通吃嵌入式、上位机、云服务...

    一.概述 我们的大数据平台(云)平台的数据接收服务基于ServerSuperIO开发,因为集成的功能比较多,无法实现跨平台,现在跑在Windows下. 但是云端体系化.标准化建设,跨平台是必走的技术路 ...

最新文章

  1. MavenAnt使用
  2. 学习Java需要达到的25个目标
  3. HTML控制文本框只能输入数字和小数点,并且只能保留小数点后两位 金额转换,阿拉伯数字的金额转换成 面试题
  4. 去重是distinct还是group by?
  5. 文本编辑器实现光标定位的功能
  6. mysql主从授权_MySQL主从复制(10)读写分离授权多种方案
  7. linkedHashMap源码解析(JDK1.8)
  8. dart系列之:手写Library,Library编写实践
  9. 35.使用拦截器实现权限验证
  10. Android 进程间通信
  11. matlab动力学仿真_机械系统动力学MATLAB仿真(上)
  12. strrev php_PHP使用strrev翻转中文乱码问题的解决方法
  13. 前端通信实现l聊天室
  14. 后场村的加班别有不同
  15. CDH 端口未授权访问:hdfs-50070, yarn-8088, jetty漏洞修复
  16. 抖音算法揭秘,百万粉丝的背后逻辑
  17. 美化Ubuntu18桌面伪装成MAC桌面
  18. jmeter性能测试脚本录制不了的几种情况
  19. Vue处理后台返回List集合带有Object对象的数据
  20. JS生成 GUID 或 UUID 四种方法

热门文章

  1. 带网格的_雨花区井圭路社区开展消防安全网格化实战演练活动
  2. FFMPEG结构体分析:AVFrame
  3. VC2010 编译 Media Player Classic - Home Cinema (mpc-hc)
  4. dd linux 格式化u盘启动盘_Ubuntu to go启动盘制作
  5. SQL查找是否“存在“,别再count了!
  6. 模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)
  7. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(3)签到题3题
  8. 配置Git for windows(Git bash)登录GitHub
  9. 【SHOI2002】【Luogu1434】滑雪(记忆化)
  10. php为什么要创建类,php – 是否有理由为单一功能创建类?