.NET Core跨平台部署

.NET Core跨平台部署

1. Windows-IIS

你们对于在IIS上部署.NET站点已经得心应手了,部署.NET Core也没有什么本质区别,可是这其中仍然有一些细节是不一样的,下面记录了一些我在部署时遇到的问题linux

1.1 安装.NET Core Windows Server Hosting

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

安装完成后最好重启IISweb

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

1.2 配置应用程序池

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

选择无托管代码

1.3 使用发布文件

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

站点设置

发布文件夹结构mvc

发布文件夹结构

成功访问app

成功访问

2 Linux

微软官方给出了不一样系统的部署方法Tutorial Guide,因为Linux有不一样的版本,因此这里选择CentOS做为示例,有如下几个步骤ide

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是文件夹

Linux下的文件结构

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

using System;

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

2.4 运行应用

dotnet run

Hello World

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的部署与开发

相关文章
相关标签/搜索