本文主要介绍了阿里云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. Python初学者第十二天 购物车程序小作业

    12day 作业题目: 购物车程序 作业需求: 数据结构: goods = [ {"name": "电脑", "price": 1999}, ...

  2. 在 Windows Server Container 中运行 Azure Storage Emulator(二):使用自定义的 SQL Server Instance

    上一节,我们解决了 Azure Storage Emulator 自定义监听地址的问题,这远远不够,因为在我们 DEV/QA 环境有各自的 SQL Server Instance,我们需要将 ASE ...

  3. 企业级Apache详解

    安装Apache #Apache安装 rpm -qa|grep httpd yum install httpd #2编译安装: -->推荐安装 cd /root/software yum -y ...

  4. 编写VBA宏生成页面

    概述 依据详细设计中表设计,借用excel宏编写VBA生成页面. 特色 高定制.高效率.兼容所有生成要求.不依赖低耦合.任意Sheet适用 缺陷 不支持批量Sheet页生成 VBA源码 Sub lis ...

  5. 记录windows下编译chromium,备忘

    编译windows下chromium,时间:20170619, 官方地址:https://chromium.googlesource.com/chromium/src/+/master/docs/wi ...

  6. 初始python(一)

    一.python特性概要 1. python是解释性脚本语言. 2. python特性总结 2.1 字节码 2.2 动态语义 在赋值是确定数据类型 2.3 缩进(4个空格) 3. python定义编码 ...

  7. 深入浅出SharePoint2010——请假系统实战

    一.需求分析文档 二.请假系统无代码解决方案 2.1 数据框架设计 2.2 权限设计 2.3 表单设计 2.4 工作流设计 2.5 门户主页设计 三.请假系统第三方解决方案(Nintex) 四.请假系 ...

  8. Lua操作mysql

    require "luasql.mysql" --创建环境对象 env = luasql.mysql() --连接数据库 conn = env:connect("数据库名 ...

  9. Debian9+PHP7+MySQL+Apache2配置Thinkphp运行环境LAMP

    因工作需要,配置了一台服务器,运行THINKPHP框架程序,记录配置过程如下: 安装net版Debian9,完成后,如下: 1.配置基本的网络 php install net-tools 安装net- ...

  10. form表单提交行为

    项目中有一个表单如下图,当我填完数据源名称这个input后,点击回车键本意是想跳到下一个input处,然而呢却触发了下面的添加这个按钮的事件,这是怎么回事呢,明明添加这个按钮并没有设置type=&qu ...