本文主要介绍了阿里云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. Oracle 截取指定长度的字符

    去掉回车,换行符号,截取指定长度的字符 具体代码示例: --Function --去掉前后空格,截取字符,字符长度为P_Length create or replace function get_St ...

  2. Python套接字

    1.客户端/服务器架构 什么是客户端/服务器架构?对于不同的人来说,它意味着不同的东西,这取决于你问谁以及描述的是软件还是硬件系统.在这两种情况中的任何一种下,前提都很简单:服务器就是一系列硬件或软件 ...

  3. Azure 经典模式中虚拟机证书指纹的生成和作用

    用户在使用经典虚拟机时,经常会有如下疑问:门户主板页面中的 SSH/RDP 证书指纹这项信息是怎么来的?用途是什么?为什么有的时候为空?有没有对虚拟机使用有什么影响?以下我们进行一些基本的介绍: 证书 ...

  4. iOS8模糊效果UIVisualEffectView的使用

    iOS8模糊效果UIVisualEffectView的使用 效果: 源码: // // ViewController.m // EffectView // // Created by XianMing ...

  5. Python学习---深入编码学习1225

    1.1. Python2 Py2中只有2中数据类型,Str和Unicode,而且str中保存的是bytes,Unicode中保存的是unicode 一切我们能看到的明文都是unicode数据类型, b ...

  6. 沉淀再出发:用python画各种图表

    沉淀再出发:用python画各种图表 一.前言 最近需要用python来做一些统计和画图,因此做一些笔记. 二.python画各种图表 2.1.使用turtle来画图 import turtle as ...

  7. Mysql常用的锁机制

    一.引言                                                                                                 ...

  8. August 24th 2017 Week 34th Thursday

    If you have choices, choose the best. If you have no choice, do the best. 如果有选择,那就选择最好的:如果没有选择,那就努力做 ...

  9. Python 处理脚本的命令行参数-getopt

    # -*- coding:utf-8 -*- import sys def test(): """ 参数列表:sys.argv 参数个数:len(sys.argv) 脚本 ...

  10. GCD vs NSOperation

    GCD is a lightweight way to represent units of work that are going to be executed concurrently. You ...