Centos 安装.NET Core环境
https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install
一、概述
本篇讨论如何把项目发布到Linux环境,主要包括以下内容:
1、项目打包
2、配置Nginx转发
3、配置守护服务Supervisor
在介绍实际内容前,有两个疑问需要探讨一下:
1、我们的项目发布后可以自宿主运行,为什么要配置nginx转发?
答:nginx是专业的网络服务器,功能强大,可以帮忙处理静态资源、SSL等。(简单来说就是Kestrel没有nginx、IIS等专业)
官方解释:Kestrel is great for serving dynamic content from ASP.NET Core. However, the web serving capabilities aren't as feature rich as servers such as IIS, Apache, or Nginx. A reverse proxy server can offload work such as serving static content, caching requests, compressing requests, and SSL termination from the HTTP server. A reverse proxy server may reside on a dedicated machine or may be deployed alongside an HTTP server.
2、为什么要配置守护服务?
答:这个问题比较简单,我们的程序可能没有那么健壮,如果进程意外终止了,守护进程可以自动重新启动进程。
二、打包与发布
利用VS 2017发布项目非常简单,执行发布命令即可。需要注意的是saleservice.xml文件不会被发布,需要手动拷贝到发布目录,有个简单的办法,我把发布的路径从PublishhOutput 改成bin\Release\netcoreapp2.0\,Release模式编译一下再发布就可以,不过这不是什么大问题。
将发布目录copy到目标服务器,运行以下代码启动程序:
# dotnet SaleService.dll
通过运行 # curl http://localhost:5000/api/products 可以查看程序是否运行成功。
由于系统默认监听localhost:5000这个地址,所以即使防火墙开通了5000端口,外部也是无法通过IP来访问的。需要增加以下代码来处理:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls("http://*:5000")
.Build();
当然,如果我们要通过nginx代理访问项目,并不会通过服务器IP来访问,上面步骤就不需要。
在调试项目时,我们在launchSettings.json中设置了启动页面,但项目部署后,这个配置不会有效果,如果希望输入 http://localhost:5000 就跳转到指定页面,需要做如下处理:
修改app.UseMvcWithDefaultRoute()
//app.UseMvcWithDefaultRoute();
app.UseMvc(routes => routes.MapRoute(name: "default", template: "{controller=Account}/{action=Index}/{id?}"));
增加一个Controller

public class AccountController : Controller
{ public ActionResult Index()
{
return Redirect("/index.html");
}
}

三、配置Nginx代理
1、安装
# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum install nginx
2、配置
运行命令:
|
1
|
#vi /etc/nginx/conf.d/default.conf |
修改文件内容如下:

server {
listen 80;
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和项目。
此时应该可以通过 http://192.168.0.110/api/product 来访问项目,实际访问时,页面报错:

这个问题是由于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
如果通过localhost可以访问,通过IP访问报404错误,请注意确认防火墙是否打开。
四、跨域访问的问题
跨域是指从一个域名的网页去请求另一个域名的资源,跨域的严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域。
在前端的Ajax代码中我们把localhost改成了服务器的IP:
|
1
2
3
4
5
6
|
$("#query").click(function (event) { $.getJSON("http://192.168.109.131/api/products", function (result) { }); }); |
此时原来正常的程序会报错:No 'Access-Control-Allow-Origin' header is present on the requested resource
处理办法:

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddCors();
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials()); app.UseMvcWithDefaultRoute();
app.UseStaticFiles();
}

其中services.AddCors()可以不用加,WebHost.CreateDefaultBuilder已经加了。
五、配置守护进程
1、 安装Supervisor
|
1
2
|
# yum install python-setuptools# easy_install supervisor |
2、 配置Supervisor
|
1
2
3
|
# mkdir /etc/supervisor# echo_supervisord_conf > /etc/supervisor/supervisord.conf# vi /etc/supervisor/supervisord.conf |
在文件底部增加:
|
1
2
|
[include]files = conf.d/*.ini |
在/etc/supervisor建一个conf.d的文件夹,在其下新建一个saleservice.ini文件,内容如下:
|
1
2
3
4
5
6
7
8
9
|
[program:SaleService]directory=/home/PublishOutput/ ; 命令执行的目录command=dotnet SaleService.dll ; 运行程序的命令autorestart=true ; 程序意外退出是否自动重启stdout_logfile=/var/log/SaleService.out.log ; 输出日志文件stderr_logfile=/var/log/SaleService.err.log ; 错误日志文件environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量user=root ; 进程执行的用户身份stopsignal=INT |
启动supervisor
|
1
|
supervisord -c /etc/supervisor/supervisord.conf |
关闭与重启:
|
1
2
|
关闭:supervisorctl shutdown重启:supervisorctl reload |
验证我们的项目是否启动成功
|
1
|
ps -ef | grep SaleService |
3、 配置supervisord为服务
在/usr/lib/systemd/system文件夹下新建文件:supervisord.service
|
1
|
vi /usr/lib/systemd/system/supervisord.service |
内容如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
[Unit]Description=Supervisor daemon[Service]Type=forkingExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.confExecStop=/usr/bin/supervisorctl shutdownExecReload=/usr/bin/supervisorctl reloadKillMode=processRestart=on-failureRestartSec=42s[Install]WantedBy=multi-user.target |
这样就可以了。
服务管理的一些命令:
|
1
2
3
4
5
6
7
8
9
|
启动/关闭服务# systemctl start supervisord# systemctl stop supervisord设置自动启动supervisord# systemctl enable supervisord验证是否为开机启动:# systemctl is-enabled supervisord |
把ngnix也设置为开机自启动,然后重启系统看是否成功
出处:https://www.cnblogs.com/lonelyxmas/p/10523249.html
Centos 安装.NET Core环境的更多相关文章
- .NET Core项目部署到Linux(Centos7)(五)Centos 7安装.NET Core环境
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- 快速搭建CentOS+ASP.NET Core环境支持WebSocket
环境:CentOS 7.x,.net core 2 以下.net core 2安装操作为官方方法.如果你使用Docker,那么更简单了,只需要docker pull microsoft/dotnet就 ...
- Linux - 安装 dotnet core 环境
Linux - 安装 dotnet core 环境 系统环境:CentOS7 官方安装指导 https://www.microsoft.com/net/learn/get-started/linux ...
- centos安装php7.2环境
centos安装php7.2环境 安装apache服务 yum -y install httpd 首先获取rpm: rpm -Uvh https://dl.fedoraproject.org/pub/ ...
- Linux安装.Net core 环境并运行项目
原文:Linux安装.Net core 环境并运行项目 一 安装环境 1. 从微软官网下载 Linux版本的.NetCoreSdk 2.0 安装包 打开终端: 第一步: sudo yum insta ...
- CentOS下安装.net core环境并部署WebAPI
1.安装CentOS 7 2.安装.net Core 2环境,参考官方文档:(建议采用SDK (tar.gz)安装) https://www.microsoft.com/net/download/li ...
- windows 安装 .net core 环境
windows 安装 环境说明 window10系统 .net core 1.0.1 visual studio code 安装 .net core Windows系统下安装软件基本上属于傻瓜式安装, ...
- centos 配置.Net core 环境并部署dotnet Core文件
一.配置环境[Microsoft dotnet Core] 1) Add the dotnet product feed sudo rpm -Uvh https://packages.microsof ...
- Windows/Centos安装GO语言环境
转载:http://www.haiyun.me/archives/1009.html Centos下使用epel源安装: 1 yum install golang Centos/Linux下源码安装g ...
随机推荐
- nginx之访问静态文件
如何配置nginx,访问服务器上的静态文件? 1.在目录/data/interface_test下创建静态文件queryAppData.json,内容如下: 如何访问该文件呢? 2.修改/usr/lo ...
- redis学习 --Sorted Set
一.概述: Sorted Set(有序集合)和Set类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中.它们之间的主要差别是Sorted Set中的每一个成员都会有一个分数(sc ...
- Microsoft SQL Server 简介
SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行M ...
- 牛客提高D4t3 清新题
分析 树上从下往上线性基合并即可 并不需要启发式/xyx 代码 #include<iostream> #include<cstdio> #include<cstring& ...
- JavaScript浅析
目录 JacaScript概述 ECMAScript和JavaScript的关系 ECMAScript的历史: JavaScript的引入方式: 引入额外的JS文件: JavaScript的语言规范: ...
- Chrome开发小技巧--浏览器控制台现写并运行js代码--snippets
想简单等运行一段js代码,以前可能会新建一个html 里面包含script标签,或者引入一个js,然后chrome浏览器打开.这样很麻烦. 想再console控制台写,也不方便,换行处理麻烦. 基于在 ...
- vm虚拟机用批处理启动和关闭
title vmware 虚拟机开启中 cls&&echo 正在开启VMware虚拟机,请稍候... "D:\vmware\vmware.exe" -x " ...
- SPSS输出结果如何在word中设置小数点前面显示加0
SPSS输出结果如何在word中设置小数点前面显示加0 在用统计分析软件做SPSS分析时,其输出的结果中,如果是小于1(绝对值)的数,那么会默认输出不带小数点的数值.例如0.362和 -0.141被显 ...
- Pikachu漏洞练习平台实验——php反序列化、XXE、SSRF(九)
1.序列化和反序列化 1.1.概述 在理解这个漏洞前,你需要先搞清楚php中serialize(),unserialize()这两个函数. 序列化serialize()序列化说通俗点就是把一个对象变成 ...
- 使用Angular2+的内置管道格式化数据
在简书看到一篇关于Angualr运用内置管道格式化数据的总结,感觉挺实用的,转载一下以供参考: [转载]https://www.jianshu.com/p/a8bd5a1d2c53 PS:管道是在HT ...