前言

笔者在毫无Linux部署.net core的经验下,第一次用了15分钟完成部署,第二次在生产环境用了5分钟。下文将说明如何在CentOS7下完成.NetCore2.1的部署,包括如何创建ASP.NET Core项目并将程序持久运行在Kestrel上,如何修改代码和防护墙进而使代码可以远程访问。最后也会提及生产环境使用的不同点。

1.安装RunTime

ASP.NET Core在Linux运行的首要条件便是需要安装Runtime。

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7.4/packages-microsoft-prod.rpm
sudo yum update
sudo yum install aspnetcore-runtime-2.1

微软对不同的Linux发行版本(包括RHEL,Ubuntu,Debian,Fedora,CentOS,openSUSE和SLES)提供了相似的解决方案.

如果想要在Linux做 .NET Core的开发和编译工作,那么需要同时安装 Dotnet Core SDK(SDK的安装并不是必须的,可以在开发环境编译后上传到Linux服务器),在CentOS下的指令为:

sudo yum install dotnet-sdk-2.1

2.创建并编译

2.1创建MVC工程

使用如下指令创建ASP.NET Core2.1的工程:

dotnet new MVC -o MvcDemoApp

2.2修改代码

默认的情况下ASP.NET Core2.1本地启动会运行在 Kestrel服务器上,如果想要从其他电脑访问网站,则需要修改绑定。

打开新建的工程文件中的 Program.cs 文件,修改代码如下:

1         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
2 WebHost.CreateDefaultBuilder(args)
3 .UseUrls("https://0.0.0.0:5001")
4 .UseStartup<Startup>();

这样绑定的便是服务器上的所有IP,而不只是默认的 localhost。(???)

2.3编译程序

在终端运行如下指令:

dotnet publish --configuration Release

该指令所有的文件放到 /bin/Release/netcoreapp2.1/publish文件夹中。为了方便管理,我们将该目录下的文件放到Linux服务器下的 /home/RunService/MvcDemo 路径下。

3.运行Web程序

完成了.NET Core程序的创建和编译后,现在开始程序的部署。

3.1直接运行程序

最简单的是直接进入程序的根目录 /home/RunService/MvcDemo ,然后执行指令:

dotnet CoreMvcApp.dll

此时指令会根据代码设定将程序运行在5001端口(结束程序 Ctrl + C),打开浏览器并输入地址 http://localhost:5001/ 或者 http://0.0.0.0:5001/便可以访问web服务。

3.2作为服务运行

直接运行可以用来测试程序,但是每次服务器重启后,需要手动打开服务。更好的方法是将网站当作服务运行。

创建名为 MvcDemo_Conf 的配置文件:

sudo vi /etc/systemd/system/MvcDemo_Conf.service

将以下命令写入打开的配置文件中

[Unit]
Description=.NET Core Test App [Service]
WorkingDirectory=/home/long/RunService/MvcDemo
ExecStart=/usr/bin/dotnet /home/long/RunService/MvcDemo/MvcDemoApp.dll
Restart=always
RestartSec=10
SyslogIdentifier=MvcDemoApp
User=long
Environment=ASPNETCORE_ENVIRONMENT=Production [Install]
WantedBy=multi-user.target

黄色背景的信息需要根据自己的需要修改

3.3配置文件

保存服务的配置文件后,使服务可用

sudo systemctl enable MvcDemo_Conf.service

启动服务

sudo systemctl start MvcDemo_Conf.service

检查服务运行状态

sudo systemctl status MvcDemo_Conf.service

如果操作无误,正常的提示如下图所示

4.设置防火墙

如果想要在远程访问服务,需要打开防火墙的5001端口,从而其他计算机才可以远程访问。

打开防火墙的5001端口:

sudo firewall-cmd --add-port=5001/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

如果端口打开正常,则局域网内的计算机可通过地址 ip访问

5.生产系统部署

上例说明了如何在CentOS上配置ASP.NET Core程序,但因为Kestrel是一个很基本的web服务器,所以需要配置性能更好的IIS、Nginx或者Apache。

正式程序可以不做步骤5,即打开防火墙的步骤。在Kestrel前置Apache服务器,Apache可以作为Kestrel的反向代理。

这样可以通过反向代理将部分链接指向ASP.NET Core,而部分代码仍旧使用php或者java,为程序的迁移提供了便利。

参考

centos安装VsCode

CentOS7部署Dotnet Core2.1的更多相关文章

  1. CentOS7部署.Net Core2.0站点(上)

    其实类似的教程网上已经有很多了,之所以要写,是应为发现在使用最新的centos7和.netcore2.1版本时还是遇到了不少坑,所以记录下,以后希望大家能少走弯路. 一.安装CentOS7 我是用虚拟 ...

  2. Centos7 部署.net core2.1 详细步骤

    安装dotnet sdk(添加产品秘钥与yum源) 添加yum源:sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages ...

  3. centos7部署.net core2.1

    1.centos 7.0及以上服务器 2..NET SDK 安装 2.1 安装 https://www.microsoft.com/net/download/linux-package-manager ...

  4. CentOS7部署.Net Core2.0站点(中)

    继续上篇的内容,本篇来学习下nginx的配置和守护进程supervisor的使用. 一.Nginx安装及配置 (1)安装nginx sudo yum install epel-release #添加源 ...

  5. [原]CentOS7部署osm2pgsql

    转载请注明原作者(think8848)和出处(http://think8848.cnblogs.com) 部署Postgresql和部署PostGis请参考前两篇文章 本文主要参考GitHub上osm ...

  6. centos7 部署ssserver

    centos7 部署shadowsocks服务端 为什么要选centos7? 以后centos7 肯定是主流,在不重要的环境还是尽量使用新系统吧 centos7 的坑 默认可能会有firewall 或 ...

  7. centos7 部署 docker compose

    =============================================== 2019/4/10_第1次修改                       ccb_warlock == ...

  8. centos7 部署 docker ce

    =============================================== 2019/4/9_第1次修改                       ccb_warlock === ...

  9. centos7 部署 open-falcon 0.2.0

    =============================================== 2019/4/29_第3次修改                       ccb_warlock 更新 ...

随机推荐

  1. 把exe注册为windows服务

    1.需要工具 Instsrv.exe(可以给系统安装和删除服务) Srvany.exe(可以让程序以服务的方式运行) 2.运行cmd,输入注册服务命令 "instsrv.exe完整路径&qu ...

  2. log4j控制指定包下的日志

    最近观察日志发现如下两个问题: 1.项目用的是springboot项目,整合了rabbitmq,项目启动后,会自动监控rabbitmq谅解是否正常,导致控制台一直输出监控日志,此时就想阻止该类日志输出 ...

  3. python之函数对象、函数嵌套、名称空间与作用域、装饰器

    一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if de ...

  4. mmap:速度快+整块操作

    mmap使得可以将设备内存映射到用户空间,从而使得用户程序获得访问硬件的能力,mmap的动作需要由内核中的驱动来实现.在使用mmap映射后,用户程序对给定范围的内存的读写就变成了对设备内存的读写,也就 ...

  5. 理解OSI参考模型(转)

    文章转自 https://www.cnblogs.com/evablogs/p/6709707.html 一个视频网站上不小心搜到网络知识的视频,突然以前大学的没有真正接受的知识点,一下子豁然开朗,赶 ...

  6. Autoware(2)—加载地图数据

    选择Point cloud.Ref选择.autoware/.data/map/pointcloud_map/里面的全选 点Point cloud加载 vector Map和TF同理

  7. 乡下人重拾MVC——@RenderBody @RenderSection @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction

    1.   @RenderBody()  代表:是一个占位符,是留给子页面的位置,子页面使用这个模版,子页面中的内容会被放到@RenderBody的位置.合并后当作一个整体加载 2.   @Render ...

  8. JS 设计模式二 -- 单例模式

    单例模式 概念 单例模式 就是保证一个类只有一个实例,并提供一个访问它的全局访问点. 实现方法 先判断实例是否存在,如果存在直接返回,如果不存在就创建实例后在返回,确保了一个类只有一个实例对象. va ...

  9. JQ面向对象的放大镜

    index.html <!DOCTYPE html><html> <head> <meta charset="utf-8" /> & ...

  10. MacOS搭建本地服务器

    MacOS搭建本地服务器 一,需求分析 1.1,开发app(ios android)时通常需往app中切入web页面,直接导入不行,故需搭建本地的测试网站服务,通过IP嵌入访问页面. 1.2,开发小程 ...