.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的部署与开发
.NET Core跨平台部署的更多相关文章
- .NET Core跨平台部署于Docker(Centos)- 视频教程
(双击全屏播放) 往期教程: .NET开发框架(一)-框架介绍与视频演示 .NET开发框架(二)-框架功能简述 .NET开发框架(三)-高可用服务器端设计 .NET开发框架(四)-服务器IIS实践教程 ...
- .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上
今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站点部署到了 Linux 服务器上,这是我们解决了在 .NET Core 上使用 EnyimMem ...
- .NET Core跨平台:.NET Core项目部署到linux(Centos7)
1.开篇说明 a 上篇博客简单的说明了一下 使用.NET Core开发的一个总结,地址是:(http://www.cnblogs.com/hanyinglong/p/6442148.html),那么这 ...
- ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署
本文聊一下如何在Windows上用VS开发并发布, 然后将其部署到CentOS上.对于我们一些常在Windows上逛的来说,CentOS用起来还真有些麻烦.MSDN官方有篇文章大概讲了一下(链接),按 ...
- .net core系统跨平台部署手册
前言 .net core跨平台版本基于.net core 3.1 SDK开发,剥离原来的基于MS Office进行文档转换功能的模块,使用基于开源跨平台的LibreOffice进行文档转换的模块.以此 ...
- NET Core站点部署到Linux服务器
.NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上 今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站 ...
- .NET Core跨平台:使用.NET Core开发一个初心源商城总括
1..NET Core基本介绍 a 作为一个.NET的开发者,在以前的开发中,我们开发的项目基本都是部署在windows服务器上,但是在windows服务器上的话某些比较流行的解决访问量的方案基本都是 ...
- [.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建
[.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建 1.概述 读前必备:认识.NET Core 上篇介绍了.NET 新的生态环境:包括.NET Framework..NET ...
- ASP.NET Core:部署项目到Ubuntu Server
概述 基于上一篇成功安装Ubuntu Server 16.10的基础上,接下来继续我们ASP.NET Core项目的部署之旅! 只是对于这些年整天和Windows打交道的我,初次使用Linux确实有点 ...
随机推荐
- 关于pycharm安装出现的interpreter field is empty,无法创建项目存储位置
关于pycharm安装出现的interpreter field is empty(解释器为空) 关于pycharm安装出现的interpreter field is empty,无法创建项目存储的位置 ...
- 【转】关于 python ImportError: No module named 的问题
今天在 centos 下安装 python setup.py install 时报错:ImportError: No module named sysconfig, 当时急着用,就顺手直接源码编译了一 ...
- Jquery Live方法
$("button").live("click",function(){ $("p").slideToggle();}); ive() 方法 ...
- 『离散化 discrete』
离散化(discrete) 离散化可以说是一个很基础的算法吧,但是有些时候还是很好用很有必要的算法. 离散化的排序的一个运用,具体地讲,离散化算法是将无穷大集合中的若干个元素映射到有限大小的集合中,以 ...
- Solr 05 - Solr Web管理界面的基本使用
目录 1 Dashboard - 仪表盘 2 Logging - 日志信息 3 CoreAdmin - Solr核心 4 Java Properties - Java参数 5 Thread Dump ...
- React Native (一) 入门实践
上周末开始接触react native,版本为0.37,边学边看写了个demo,语法使用es6/7和jsx.准备分享一下这个过程.之前没有native开发和react的使用经验,不对之处烦请指出.笔者 ...
- leetcode — reverse-linked-list-ii
/** * Source : https://oj.leetcode.com/problems/reverse-linked-list-ii/ * * * Reverse a linked list ...
- PE知识复习之PE的两种状态
PE知识复习之PE的两种状态 一丶熟悉PE的整体结构 从下面依次网上看.可以得出PE结构 其中DOS头有DOS头结构 也就是 IMAGE_DOS_HEADER 关于结构体的各项属性.前边已经写过了.本 ...
- flume 1.8.0 开发基础
本文由云+社区发表 作者:皮皮熊 概述 Apache Flume是一个用于高效地从大量异构数据源收集.聚合.传输到一个集中式数据存储的分布式.高可靠.高可用的系统. Apache Flume是Apac ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...