本文主要介绍了阿里云CentOS7下如何成功的发布ASP.Core应用并使用nginx进行代理, 并对所踩的坑加以记录;

环境、工具、准备工作

开始进行ASP.Net Core 应用程序部署

使用putty连接阿里云CentOS;并根据相关提示输入账户密码登录即可(建议以root权限登录)如下图:

1.进行安装.NET Core SDK

.NET Core SDK的安装很简单, 根据ASP.NET Core 10分钟入门指导一步一步的安装即可;本文简单的将安装步骤进行展示;

使用如下命令注册Microsoft需要的依赖环境;

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

更新可供安装的产品

yum update

64位Centos 需要安装 libunwind (libunwind介绍), 32位系统跳过

yum install libunwind libicu

安装.NET Core SDK

yum install dotnet-sdk-2.1.4

.net core sdk的版本根据自己需要进行选择(官方版本链接) 本文2.1.4版本

安装比较慢, 请耐心等候, 一定要等到Complete!出现;

使用如下命令查看sdk版本

dotnet --version

2.使用VS2017创建一个新的ASP.NET Core MVC程序, 并发布;

创建发布的.NET Core runtime 要和你在CentOS 安装的runtime一致; 本文是2.1.4

3.部署ASP.NET Core 应用程序到阿里云CentOS服务器

使用FTP工具FileZilla将编译发布后的程序文件上传到服务器 /home/wwwroot

4.运行ASP.NET Core 应用程序

通过如下命令运行应用程序, 程序目录为你发布到服务器的物理路径, CoreWebTest.dll为你创建的程序入库DLL

dotnet /home/wwwroot/CoreWebTest/CoreWebTest.dll

当你看到如下内容, 表示程序已成功运行

安装配置Nginx进行反向代理

1.安装Nginx

使用如下命令安装CentOS的EPEL仓库;

yum install epel-release

使用如下命令安装Nginx

yum install nginx

Nginx安装完成后, 系统并不会启动Nginx, 使用如下命令启动Nginx:

systemctl start nginx

使用如下命令设置系统启动后, 默认启动Nginx:

systemctl enable nginx

查看firewall 状态, 并启动防火墙

systemctl status firewalld  //查看防火墙状态 

systemctl start firewalld  //启动防火墙

使用如下命令, 允许HTTP和HTTPS通过防火墙

firewall-cmd  --permanent --zone=public --add-service=http

firewall-cmd  --permanent --zone=public --add-service=https

firewall-cmd  --reload

在浏览器地址栏输入你服务器的IP地址, 如果出现下图表示Nginx安装配置成功;如果无法访问, 请查看firewall 是否开放80端口;

firewall-cmd --zone=public --add-port=80/tcp --permanent   //开放80端口
systemctl restart firewalld.service //重启防火墙

阿里云下还要添加安全规则, 开放80端口;

2.修改Nginx的配置文件

首先,把Nginx的默认配置文件 /etc/nginx/nginx.conf里 80 端口转发配置 server 节点用 # 符注释掉。使用命令vi 或将 nginx.conf 文件下载(使用FileZilla)到本地修改完成后在上传(建议);

vi /etc/nginx/nginx.conf //打开文件编辑模式, 输入i 进行编辑 完成后 按ESC键输入:wq 回车 退出编辑模式

然后我们重新创建一个自定义的Nginx配置文件用来代理Core 程序, 我创建名称为NginxForCore.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;
}
}

proxy_pass http: 后的url为你在core 启动项配置的路径(默认localhost:5000,如何修改请点击连接查看)

将创建好的自定义配置文件上传到 /etc/nginx/conf.d目录下 ,最后执行命令 重启Nginx;

nginx -s reload

3.将Nginx添加到SELinux白名单

查看SELinux状态是否为Enforcing(SELinux默认状态为Disabled如何修改状态请查看连接), 必须保证SELinux的状态为Enforcing否则添加白名单会失败;

使用如下命令:

getenforce

如果查询出状态如下图, 添加Nginx到SELinux白名单

使用如下命令, 将Nginx添加至SELinux白名单;

yum install policycoreutils-python

cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M  AddNginxToWhiteList

semodule -i  AddNginxToWhiteList.pp

红色部分(AddNginxToWhiteList)可自己命名;

在浏览器地址栏输入你服务器的IP地址, 如果出现下图说明我们的ASP.NET Core MVC 已经发布成功了;(要保证你发布的.NET Core程序在Linux已经运行,如何运行见步骤:4.运行ASP.NET Core 应用程序)

如果没有出现上图, 而是

请检查:

1-Nginx是否按上述步骤正确配置;

2-防火墙及阿里云安全组策略是否正确配置(主要指80端口);

3-.NET Core程序是否在CentOS下正常运行;

配置守护进程Supervisor, 让我们的程序能365天24小时不间断运行

  通过上面的操作, 我们已经能正常将.NET Core程序发布到CentOS下来, 但是发布过程中我们也发现了问题, 就是.NET Core不能自动的运行, 一旦我们的命令行工具关掉, 发布的程序就不能访问了;

是不是能安装一个类似于Windows Service一样的服务, 能实时监控程序状态,异常退出时能自动重启。经过各种百度我找到了Supervisor。

   Supervisor是用Python开发的Linux/Unix系统下的一个进程管理工具。它可以使进程(类似Windows Service)脱离终端,变为后台守护进程(daemon)。能实时监控进程状态,异常退出时能自动重启。详细文档请查看官网。

1-安装Supervisor

yum install python-setuptools
easy_install supervisor

2-配置Supervisor

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

mkdir /etc/supervisor

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

echo_supervisord_conf > /etc/supervisor/supervisord.conf

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

vi /etc/supervisor/supervisord.conf

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

将上面配置改为:

该操作的目的是我们创建一个Supervisor 进程配置文件加载目录。让Supervisor自动加载该目录下.conf 后缀的文件作为服务配置。

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

在本地创建文件CoreWebTest.conf 内容如下:

[program:CoreWebTest]                         ;自定义进程名称, 根据自己喜好命名
command=dotnet CoreWebTest.dll ;程序启动命令 使用dotnet 命令
directory=/home/wwwroot/CoreWebTest ;命令执行的目录 你.NET Core 程序存放目录
autostart=true ;在Supervisord启动时,程序是否启动
autorestart=true ;程序退出后自动重启
startretries=5 ;启动失败自动重试次数,默认是3
startsecs=1 ;自动重启间隔
user=root ;设置启动进程的用户,默认是root
priority=999 ;进程启动优先级,默认999,值小的优先启动
stderr_logfile=/var/log/CoreWebTest.err.log ;标准错误日志 路径可以自定义
stdout_logfile=/var/log/CoreWebTest.out.log ;标准输出日志 路径可以自定义
environment=ASPNETCORE_ENVIRONMENT=Production ;进程环境变量
stopsignal=INT ;请求停止时用来杀死程序的信号

通过FileZilla将文件上传到目录:/etc/supervisor/conf.d下

4-启动 Supervisor 服务

命令如下:

supervisord -c /etc/supervisor/conf.d

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

5-配置Supervisor开机启动

  同样我们需要配置Supervisor在CentOS断电或重启的情况下自动开机运行, 从而保证我们的程序能正常访问;

  为Supervisor创建一个服务启动的脚本AutoStartSupervisor.service, 上传到系统目录: /usr/lib/systemd/system/ 脚本内容如下:

[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
[Install]
WantedBy=multi-user.target
# 具体属性作用请官网查看

通过FileZilla将文件上传到目录: /usr/lib/systemd/system/ 下

设置Supervisor开机启动

systemctl enable AutoStartSupervisor.service

使用重启命令验证配置是否成功.

reboot  //验证方式为CentOS正常重启后, 我们能在浏览器里访问到我们发布的.NET Core程序

Supervisor的配置比较复杂,本文只是进行了简单的使用,如需详细深入的配置,请去官网学习;

至此,阿里云CentOS7下部署ASP.NET Core 已经结束;

如果这篇博文对你有所帮助,麻烦动动手指点个赞^-^

阿里云CentOS7部署ASP.NET Core的更多相关文章

  1. 【Docker】 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二)

    系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...

  2. 新手之首次部署阿里云centos7+mysql+asp.net mvc core应用之需要注意的地方

    先来几个字,坑坑坑. 自己业余爱好者,签名一直捣鼓net+mssql,前阵买了阿里云esc,自己尝试做个博客,大体架子都打好了,本地安装了mysql,测试了也没问题. 部署到阿里云centos7,结果 ...

  3. 阿里云CentOS7部署MySql8.0

    本文主要介绍了阿里云CentOS7如何安装MySql8.0,并对所踩的坑加以记录; 环境.工具.准备工作 服务器:阿里云CentOS 7.4.1708版本; 客户端:Windows 10; SFTP客 ...

  4. 分享阿里云推荐码 IC1L2A,购买服务器可以直接打9折,另附阿里云服务器部署ASP.NET MVC5关键教程

    阿里云推荐码为:IC1L2A 阿里云还是不错滴. 以windows server 2008 R2为例,介绍如何从全新的服务器部署MVC5 站点. 新购买的阿里云服务器是没有IIS的,要安装IIS: 控 ...

  5. centos7部署asp.net core 应用程序

    一.运行环境 1.腾讯云与主机一台 2.操作系统是centos7 3.安装.net core sdk 4.安装node及其pm2(安装过程) rpm -Uvh https://packages.mic ...

  6. Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器

    前言: 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器.因为公司的项目一直都是托管在 ...

  7. 阿里云 Centos7 部署 Django 项目

    前期准备 阿里云服务器 mysql数据库 已经本地运行成功的项目 阿里云服务器的环境配置 Git #代码管理 Gitlab #代码托管,要求服务器内存不低于2G,我选择放弃 Mysql #连接数据库 ...

  8. 阿里云Centos7部署私人CSGO服务器

    大四毕业生,论文和答辩分别以1.8%的重复率和只答不辨的态度双双过关.现在就是在家等着学校发毕业证了.顺带学学驾驶...可是我这么一个喜欢折腾的人,怎么能够让自己接受这么无聊的咸鱼时光呢?因为这个寒假 ...

  9. CentOS 7部署ASP.NET Core应用程序

    看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...

随机推荐

  1. QQ群文件下载速度慢-解决办法

    QQ群文件下载速度慢-解决办法 本方法是本人亲测测试出来的,特此和大家分享 没有效果让你打我 解决方法 1.打开[手机版 QQ] 2.进入群文件,找到需要下载文件 3.[分享],先点击[发给好友],选 ...

  2. 网络测速 php代码

    <?php /*=====http://hi.csdn.net/yinyiniao=====*/ $fp=fopen("cs.txt","w"); for ...

  3. forkjoin框架疑问记录

    今天在看jdk1.7的forkjoin框架时候,里面有个例子如下: product类: public class Product { private String name; private doub ...

  4. 如何写一个能在gulp build pipe中任意更改src内容的函数

    gulp在前端自动化构建中非常好用,有非常丰富的可以直接拿来使用的plugin,完成我们日常构建工作. 但是万事没有十全十美能够完全满足自己的需求,这时我们就要自己动手写一个小的函数,用于在gulp ...

  5. 如何检索某个字段在sqlserver中的哪个些存储过程中?很简单的SQL语句。

    SELECT obj.Name 存储过程名, sc.TEXT 存储过程内容 FROM syscomments sc INNER JOIN sysobjects obj ON sc.Id = obj.I ...

  6. SCCM2007日志文件

    Microsoft System Center Configuration Manager 2007 中的所有客户端和站点服务器组件都将过程信息记录在单个日志文件中.您可以使用客户端和站点服务器日志文 ...

  7. 沉淀再出发:如何在eclipse中查看java的核心代码

    沉淀再出发:如何在eclipse中查看java的核心代码 一.前言   很多时候我们在eclipse中按F3键打算查看某一个系统类的定义的时候,总是弹出找不到类这样的界面,这里我们把核心对应的代码加进 ...

  8. 通过webview控件访问网页

    初学android开发,在界面编辑器上放了一个webview控件,可惜不知道如何访问控件,在网上看到一段代码记录下来,算是第一次学习笔记. 要想让程序联网需要授权,在AndroidManifest.x ...

  9. 纯css3跑马灯demo

    我们写跑马灯一般都是用js控制定时器不断循环产生,但是定时器消耗比较大,特别是程序中很多用到定时器的时候,感觉有的时候比较卡.但是css3样式一般不会.这里主要的思路就是用css3代替js定时器实现一 ...

  10. JavaScript的事件概述以及事件对象,事件流

    事件处理程序 JavaScript 事件对象是由访问 Web 页面的用户引起的一系列操作,例如:用户点击页面上的某个按钮或者鼠标移动到页面的某个图片上而产生一系列的互动的反馈. 我们通过为指定事件绑定 ...