前言:

上一节中,通过一系列的步骤,已经将项目部署到IIS上,虽然遇到了一些问题,但最终解决并成功运行了。而在这一节中,将尝试通过linux系统的环境下,部署项目,实现Net Core跨平台的亮点。

虽然网上已经有很多关于asp.net core在linux下的部署教程了,但我还是想写一篇,主要增强我自己的记忆,同时分享下我部署遇到的坑。

我在我电脑win7的操作系统中用来虚拟机建了个CentOS7,来演示,我们的项目如何发布在Linux上运行。

开始:

一、安装.Dotnet Core 2.2

Linux上运行Dotnet Core程序的前提是安装Dotnet Core Runtime,如果想要在Linux做 .NET Core的开发和编译工作,那么需要安装 Dotnet Core SDK。Dotnet Core SDK中包括了Dotnet Core Runtime,所以这里就直接安装了Dotnet Core SDK

Step 1:安装Dotnet产品的必要前提

在安装Dotnet Core前,需要注册Microsoft签名密钥并添加Microsoft产品提要,每台机器只需注册一次,执行如下命令:

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

Step 2:安装Dotnet Core SDk,执行下列命令

sudo yum update
y
sudo yum install dotnet-sdk-2.2
y
  大家注意,会有两个“y”的原因是,命令执行的中途停顿了,让你确认下是否进行安装,你要输入“y”确认安装才会执行安装

  安装完后,我们输入如下命令看下是否安装成功

二、部署Asp.net Core 应用程序

在CentOS系统中,新建publish文件夹

上传上一节发布的文件到至/home/publish/。

这边我使用了Xftp进行文件的上传。(如果是在本地虚拟机操作的话,也可以直接复制到系统对应的文件夹目录下)

进入目录:cd publish

检查是否可以运行:dotnet LCzarCms.Admin.dll

如果出现这些信息则表示成功运行

到此,项目就运行成功了,这时候我们是无法访问到这个页面的,这时候我们需要部署一个web容器来进行转发,我们可能还要安装 nginx 、配置我们的 FireWall 以及配置守护服务 Supervisor 等等

三、配置Nginx托管

微软官方提供的https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2#monitor-the-app,把dotnet创建成一个服务

安装nginx

curl -o  nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

 rpm -ivh nginx.rpm

yum install nginx

启动 Nginx

systemctl start nginx

设置开机启动(linux宕机、重启会自动运行nginx不需要连上去输入命令):

systemctl enable nginx

四、配置防火墙

开放80端口

firewall-cmd --zone=public --add-port=/tcp –permanent

重启防火墙以使配置即时生效

systemctl restart firewalld

测试nginx是否可以访问

五、配置Nginx对ASP.net Core 应用的转发

修改Nginx的default.conf文件

将文件内容替换为:

server {
listen ;
location / {
proxy_pass http://localhost:5000;
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;
}
}

进行修改覆盖

重新加载,即时生效

nginx -s reload

再次运行ASP.NET Core应用程序

但是,测试我们再次浏览运行的时候,会出现如下这种情况:

这是什么情况?经过后续了解,这个问题是由于SELinux保护机制所导致,我们需要将nginx添加至SELinux的白名单

接下来我们通过一些命令解决这个问题

①   yum install policycoreutils-python

②     sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

③     sudo semodule -i mynginx.pp

我们再次访问运行一下:

这次已经可以成功的运行起来了。

至此基本完成了部署

但是,我们还是存在着其他的问题:

1.ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生产环境对这种情况是零容忍的。

2.如果ASP.NET Core进程意外终止那么需要人为连进shell进行再次启动,往往这种操作都不够及时。

3.如果服务器宕机或需要重启我们则还是需要连入shell进行启动。

为了解决这些问题,我们需要有一个程序来监听ASP.NET Core 应用程序的状况。

那么要解决这些问题,我们就必须要实现这么一个功能:如果ASP.NET Core 意外终止,那么我们要自动重启;如果服务器服务器重启后,我们要有个类似脚本命令一样,自动执行 dotnet 命令。现在正好有个基于 Python 开发的工具 Supervisor 可以解决我们上述问题

六、配置Supervisor守护服务

在应用程序停止运行的时候立即重新启动。这边我们用到了Supervisor这个工具,Supervisor使用Python开发的。

安装Supervisor

yum install python-setuptools

easy_install supervisor

配置Supervisor

①运行supervisord 服务的时候,需要指定 Supervisor 配置文件,所以,先通过如下命令创建目录,以便让 supervisor 成功加载默认配置:

mkdir /etc/supervisor

②目录创建成功后, 通过 echo_supervisord_conf 程序(用来生成初始配置文件,文件名可以自定义)来初始化一个配置文件:

echo_supervisord_conf > /etc/supervisor/supervisord.conf

③通过vim命令修改创建好的supervisord.conf配置信息:

vi /etc/supervisor/supervisord.conf

④最下边找到如下文本片段:

修改为:

为我们部署的.NET Core添加进程配置文件

①创建配置文件LCzarCmsAdmin.ini(文件名自定义)

[program:LCzarCmsAdmin]
command=dotnet /root/publish/LCzarCms.Admin.dll
directory=/root/publish/
autostart=true
autorestart=true
stderr_logfile=/var/log/LCzarCms.err.log
stdout_logfile=/var/log/LCzarCms.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT

②在/etc/supervisor/目录下创建一个文件夹conf.d

mkdir /etc/supervisor/conf.d/

将刚创建的配置文件LCzarCmsAdmin.ini移到conf.d文件夹下

如果服务已经启动,则需要使用 supervisorctl reload 命令来使新的配置生效,当然,我们这里并没有启动,所以不需要这一步。

启动 Supervisor 服务

supervisord -c /etc/supervisor/supervisord.conf

启动服务后,我们可以检测看一下

ps -ef | grep LCzarCms.Admin.dll

这个时候, 我们已经不需要使用dotnet命令运行程序, 同样可以访问我们部署的.NET Core程序了。

至此关于ASP.NET Core应用程序的守护即配置完成

七、配置Supervisor开机启动:

①进入/usr/lib/systemd/system/目录,并创建supervisord.service文件(或者在本地写好了再通过ftp工具传输到指定目录下)

vi /usr/lib/systemd/system/supervisord.service

修改文件

[Unit]
Description=Supervisor daemon [Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

②设置开机启动

激活开机启动:

systemctl enable supervisord.service

启动supervisor进程:

systemctl start supervisord.service

systemctl daemon-reload

验证一下是否为开机启动:

systemctl is-enabled supervisord

重启,测试是否可以开机自启

好了。最终也成功的在重启之后,可以访问地址。

总结:

1.在虚拟机上安装CentOS7操作系统,这里就不做具体的安装内容了,可以参考VMwear安装Centos7

2.学习了linux(CentOS) 环境下,新建、删除、移动文件夹和文件的命令。同时,Linux下路径是区分目录大小写的

3.很多东西都是翻阅了网上大神的资料加上自己的实践理解总结记录的。如果有不对的或不理解的地方,希望大家可以指正和多多交流

ASP.NET Core部署系列二:发布到CentOS上的更多相关文章

  1. ASP.NET Core部署系列一:发布到IIS上

    前言: 当构建一个ASP.NET Core应用程序并且计划将其运行在IIS中时,你会发现Core应用程序和之前版本的ASP.NET程序在IIS中的运行方式是完全不一样的.与ASP.NET时代不同,AS ...

  2. 无法下载apk等格式的文件的解决方案---ASP .NET Core 2.0 MVC 发布到IIS上以后无法下载apk等格式的文件的解决方案

    ASP .NET Core MVC 发布到  IIS 上以后 无法下载apk等格式的文件 使用.NET Core MVC创建了一个站点,其他文件可以下载,但是后来又需求,就把手机端的apk合适的文件上 ...

  3. ASP .NET Core 2.0 MVC 发布到 IIS 上以后 无法下载apk等格式的文件

    ASP .NET Core MVC 发布到  IIS 上以后 无法下载apk等格式的文件 使用.NET Core MVC创建了一个站点,其他文件可以下载,但是后来又需求,就把手机端的apk合适的文件上 ...

  4. ASP NET Core 部署 IIS 和发布

    1. 微软官网原文链接: https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore- ...

  5. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)

    上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...

  6. [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  7. [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  8. 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之二 —— 准备

    ==== 目录 ==== 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之一 —— 开篇 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之二 —— ...

  9. ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成

    ASP.NET Boilerplate 学习   1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...

随机推荐

  1. Python的小整数池

    此处经常会作为面试题!!! 小整数池目的:节省内存,提高执行效率 需要注意的是:Python实现int的时候有个小整数池.为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器 ...

  2. 从KafkaConsumer看看Kafka(一)

      Kafka的消息模型为发布订阅模型,消息生产者将消息发布到主题(topic)中,一个或多个消费者订阅(消费)该主题消息并消费,此模型中发布到topic中的消息会被所有消费者所订阅到,先介绍Kafk ...

  3. Python面向对象-@property装饰器

    python中,我们可以直接添加和修改属性的值: >>> class Student(object): ... pass ... >>> s = Student() ...

  4. 百度大脑UNIT3.0详解之数据生产工具DataKit

    在智能对话项目搭建的过程中,高效筛选.处理对话日志并将其转化为新的训练数据,是对话系统效果持续提升的重要环节,也是当前开发者面临的难题之一.为此百度大脑UNIT推出学习反馈闭环机制,提供数据获取.辅助 ...

  5. Csharp:HttpWebRequest or HttpClient

    /// <summary> /// Define other methods and classes here /// </summary> /// <param nam ...

  6. 视频分享慕课网----Angular 打造企业级协作平台

    慕课网是一个非常不错的视频学习网站,搭建搭建企业协作平台,导师由深到浅,讲解的特别好. 本课程主要学习 Angular 进阶知识点和技巧(Material.动画.依赖注入.表单控件.RxJS,Redu ...

  7. Windows Redis 安装(带视频)

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 疯狂创客圈 高并 ...

  8. Prometheus学习系列(二)之Prometheus FIRST STEPS

    前言 本文来自Prometheus官网手册 和 Prometheus简介 说明 Prometheus是一个监控平台,通过在监控目标上的HTTP端点来收集受监控目标的指标.本指南将向您展示如何使用Pro ...

  9. python中基本类型的连接组合和互相转换13种方式

    本篇总结了一下字符串,列表,字典,元组的连接组合使用和类型的互相转换小例子,尤其列表中的extend()方法和字典中的 update方法非常的常用. 1.连接两个字符串 a = "hello ...

  10. Add the Scheduler Module 添加计划程序模块

    Important 重要 Scheduler requires the Event business class to be in your XAF application model. Follow ...