CentOS 8 部署 ASP.NET Core 3.1 应用程序 kestrel+Nginx IIS+kestrel
vs2019发布到IIS 下载文档https://files.cnblogs.com/files/netlock/%E4%BD%BF%E7%94%A8VS2019%E5%8F%91%E5%B8%83NETCore%E7%A8%8B%E5%BA%8F%E5%B9%B6%E9%83%A8%E7%BD%B2%E5%88%B0IIS.zip
服务器安装IIS


选择完点击下一步,从互联网选择更新等待安装,安装好了最好重启一下。重启好了。打开控制面板----管理工具--------IIS管理器 看图是下一个不是上一个 建议右击保存到开始屏幕后面好找

打开右击网站,添加网站,如下图所示,网站名字就是一个命名,应用程序可以共用一个也可以新建,后面还要配置应用程序池,一般选择集成的类型,.Net 项目(除了Core)选择.NET CLR v4.xxx的版本,如果没有,就是安装功能的时候你没有添加。

运行起来就算只有一个Index.html文件都能访问。如果没有出来考虑一下错误
1、网站没有权限,你要点击网站下面你建立的那个网站授权。授予IIS的权利;
2、.Net CRL版本过低了现在有的.Netfarnwork都用了4.8了IIS上面不支持了那么高的,还要自行安装;
3、端口没有开放,远程服务器的端口要去控制台自己开的,我的是阿里云,就要上控制台管理出站入站规则里面添加出站、进站规则;
4、防火墙的问题,关了试试;
5、目录浏览打开了,需要关闭
.Net Core3.1发布IIS
Net Core3.1 发布到IIS要安装两个工具 aspnetcore-runtime 跟 dotnet-hosing

最好本地vs发布环境和服务器上的core环境相一致。vs 发布环境安装 SDK3.1.2。IIS服务器上安装 core Runtime 3.1.2和Hosting Bundle 3.1.2 这2个安装包。(注意,如果iis服务器环境安装了以前版本的core,比如说3.0,发布后可能会有500错误。本人发布遇到这个问题,删除旧版本统一新版本解决。)
core 3.1下载地址 https://dotnet.microsoft.com/download/dotnet-core/3.1
发布之后 运行dotnet xxx.dll 成功继续下一步
注意:
1、这里的应用程序池要改为.NET CLR版本选择无托管代码;
2、如果安装了dotnet-hosing其他的项目启动503 就安装这个 https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145
安装IIS和Windows Server Hosing之后 ,重启IIS服务,检查IIS"模块"中是否有 “AspNetCoreModule2”

创建网站,选择Asp.Net Core的发布目录,设置IIS应用程序池为“无托管 代码”

如果是64位,注意要设置,如下图

坑
注意:如果是RazorPage项目,可能需要设置下面的属性为true。

首先是你的服务器需要有core 的运行环境,安装前先关闭iis
dotnet-hosting-3.1.4-win.exe 可以去微软的官网找最新的版本(去微软的官网找你要的版本就好了)
安装成功后,第一个坑出现了,启动iis,发现原来在iis上的网站都报503错误了。
直接玩大了,最后发现就是这个东西搞的鬼,你卸载它iis之前的网站就正常了。一度让我都要放弃发布到iis上去了。
但是因为公司需要还是硬着头皮继续上。
网上找了半天终于有说的
C:\Windows\System32\inetsrv\config\applicationHost.config 修改此文件下的两处地方
<add name="AspNetCoreModuleV2" image="%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll" preCondition="bitness64" />
<add name="AspNetCoreModuleV2" preCondition="bitness64" />
终于ok
安装成功,iis上的其它网站也不报503的错误了
但是core的网站报503,去它大爷啊,在iis上core竟然有这么多问题,关键报503错误又不晓得是什么问题
后来直接运行发布的core 的exe文件竟然没办法正常运行
终于找到问题
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145 下载安装搞定
CentOS安装 .NET Core SDK
SDK 安装:请参照微软官方文档 https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos
CentOS 7则需要先 sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
.NET Core 3.1 在 CentOS 8 的默认包存储库中有提供,直接使用下面命令安装 SDK:
sudo dnf install dotnet-sdk-3.1
安装完成后,使用 dotnet --info 命令查看是否能正确输出当前 SDK 信息

建立目录存放net项目
mkdir dotnet
cd dotnet
发布项目

将发布文件夹(Publish)目录文件复制至新建的目录
首先压缩打包好的部署文件上传到刚才创建的目录 netlock

可以在这设置端口 *代表所有 配置一个HTTP就行 把HTTPS删了 因为没有SSL

启动站点
dotnet NetLock.Presentation.Api.dll 或者指定端口 dotnet NetLock.Presentation.Api.dll --urls http://*:1031

ctrl+z可以退出至命令行 此时项目已运行成功 有防火墙记得开端口

防火墙命令
firewall-cmd --zone=public --add-port=1031/tcp --permanent # 开放1031端口 firewall-cmd --zone=public --list-ports #查看防火墙所有开放的端口 firewall-cmd --reload # 配置立即生效 sudo systemctl start firewalld #打开防火墙 systemctl stop firewalld.service #关闭防火墙 firewall-cmd --state #查看防火墙状态
firewall-cmd --reload 重启防火墙
shutdown -r now #立刻重启(root用户使用)
添加nginx做反向代理
上面我们是使用的控制台的方式启动的,这种方式不能处理反向代理,负载均衡等,所以我们建议在Linux上面使用Nginx作为反向代理服务器。我们安装Nginx。
1 使用命令 sudo yum install epel-release 添加nginx包存储库
2 使用命令 sudo yum install nginx 安装nginx
3 使用命令 sudo systemctl start nginx 启动nginx
4 使用命令 ps -ef |grep nginx 验证nginx是否启动成功
5 可以使用命令 sudo systemctl enable nginx 设置nginx开机启动
6 使用命令 sudo systemctl start nginx重启nginx
7 Nginx默认开启80端口,我们要把80端口添加到防火墙中,添加完以后重启防火墙:firewall-cmd --zone=public --add-port=80/tcp --permanent

好了之后用ip地址访问就出现45.32.15.83

配置nginx,设置代理端口
配置文件/etc/nginx nginx.conf文件
先把默认这个注释或者改也可以

然后添加一个 微软官方配置
server {
listen 80; #监听的端口 也就是网站程序将来要使用点端口
location / {
proxy_pass http://localhost:1031; #此处即asp.net core 程序真实的地址。即上边设置好的地址和端口
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_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
改好之后 重启Nginx
nginx -s reload sudo systemctl start nginx重启nginx
重点 配置完成之后必须执行
setsebool -P httpd_can_network_connect 1 写入配置文件的命令,重启后保留
shutdown -r now #立刻重启(root用户使用)
这就可以访问了。我们在Linux上面部署就成功了
就可以直接用80端口访问了 反向代理了1031端口
添加守护进程
为什么要添加守护进程,有以下原因
1 asp.net core程序运行在shell中,shell关闭会导致该web应用关闭
2 应用程序意外终止的话需要在shell里重新启动
3 服务器宕机或者意外重启的话,需要重新启动shell,然后重新启动web程序
使用守护进程supervisor
1)相关命令
1 使用命令 yum install epel-release 和 yum install supervisor 安装supervisor
2 使用命令 systemctl start supervisord.service 启动服务
3 使用命令 systemctl status supervisord.service 查看服务状态
4 设置开机启动 systemctl enable supervisord.service
5 重启 supervisorctl reload
2)文件配置
1 在 /etc/supervisord.d 创建文件 netlock.ini
2 配置 netlock.ini 如下
[program: NetLock.Presentation.Api] 程序的名称
command = dotnet NetLock.Presentation.Api.dll 执行的命令
directory = /root/dotnet/netlock 命令执行的目录
environment = ASPNETCORE__ENVIRONMENT=Production 环境变量
user = root 执行进程的用户
stopsignal = INT
autostart = true 是否自动启动
autorestart = true 是否自动重启
startsecs = 2 自动重启间隔
stderr_logfile = /root/dotnet/log/netlock.err.log 标准错误日志自己建文件夹
stdout_logfile = /root/dotnet/log/netlock.log 标准输出日志自己建文件夹
把后面汉字删除 复制上去 重启就行了。
这样就可以服务器开机自动启动Coreweb网站
坑:
1、域名无法访问,502错误,解决方法
可以关闭防火墙。systemctl stop firewalld.service。但是这种方法太彻底。
可以只开通对应的端口即可
firewall-cmd --query-port=80/tcp查询端口是否开放
firewall-cmd --zone=public --add-port=80/tcp --permanent 开放指定的端口,这里需要开放的端口包括:80,Core网站对应的端口,
systemctl restart firewalld.service 重启防火墙,使之生效。
2、一切都无误,但是还是无法访问域名,但是ip地址可以访问,这里需要设置linux服务器的网络访问配置
setsebool -P httpd_can_network_connect 1 写入配置文件的命令,重启后保留
3、检查windows端的网络防火墙,要么关闭,要么在入站、出站规则中允许指定的端口。网卡的dns要设置成linux服务器的ip地址,用nslookup www.sjj.com检查一下是否正常即可。用tracert 跟踪一下,如果没有走指定的dns,可以到windows/system32/driver/etc/hosts文件指定一下。
4、遇到Coreweb访问都正常,但是涉及到访问数据库就不正常的情况(数据库不在linux服务器上),此时需要:
1、设置数据库可以远程访问
2、linux打开指定的端口可以允许通过,例如1433。
综上,就可以实现通过域名可以反向代理到指定的Coreweb网站上。
参考博客https://www.cnblogs.com/w5942066/p/13411646.html
CentOS 8 部署 ASP.NET Core 3.1 应用程序 kestrel+Nginx IIS+kestrel的更多相关文章
- CentOS 7 部署 ASP.NET Core 应用程序
原文:CentOS 7 部署 ASP.NET Core 应用程序 看了几篇大牛写的关于 Linux 部署 ASP.NET Core 程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大 ...
- CentOS 7部署ASP.NET Core应用程序
看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...
- 【转载】CentOS 7部署ASP.NET Core应用程序
看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...
- 【转】CentOS 7部署ASP.NET Core应用程序
很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...
- 【详细】【转】CentOS 7部署ASP.NET Core应用程序
很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...
- 部署ASP.NET Core最简单的办法,使用IIS部署ASP.NET Core应用
本文迁移自Panda666原博客,原发布时间:2021年3月28日.写原文的时候.NET的最新版本是5.0,现在7的preview出来了,时间真快啊.抽空再写个在Windows Server Core ...
- 在Linux CentOS上部署Asp.Net Core项目(Tengine、Asp.Net Core、Centos、MySql)
一.前言 1.简单记录一下Linux CentOS 7中安装与配置Tengine的详细步骤. 2.简单比较一下Tengine 和Nginx 3.搭建Asp.net Core和部署 Web程序 4.总结 ...
- Linux下自动化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)
1.先配置好Docker阿里云加速,可以使用阿里云容器服务 (可自己在阿里云申请,要不然安装东西直接很慢)注意:https://XXXX.mirror.aliyuncs.com为阿里云加速服务分配地址 ...
- CentOS 下部署 ASP.NET Core环境
一.安装dotnet 1.下载运行环境 https://www.microsoft.com/net/download/linux 下载Runtime:https://go.microsoft.com/ ...
随机推荐
- 拿到这份 Java、C++ 软件开发完整学习路线图,我面试再也没挂过..
大家好,我是柠檬. 柠檬哥作为一个普通大学.非计算机专业,自学后端技术进入腾讯做后端开发工作,我自己也是非科班自学计算机成功转行软件开发(有想听柠檬哥转行之路经历的吗,可以留言告诉我,人多就写写),体 ...
- java类private/this的使用
package 类的练习; public class Person { private String name; private int age; private String sex; privat ...
- 【mq读书笔记】消息过滤机制
mq支持表达式过滤和类过滤两种模式,其中表达式又分为TAG和SQL92.类过滤模式允许提交一个过滤类到FilterServer,消息消费者从FilterServer拉取消息,消息经过FilterSer ...
- CentOS6.5上增加中文字体库,确保前端WEB可以正常显示
1 下载字体 可以在网上下载,也可以在 windows 目录下(C:\Windows\Fonts)找到对应字体,这里是从另一套系统上 copy simsun.ttf 文件. 2 查看当前系统中已安装的 ...
- Generalizing from a Few Examples: A Survey on Few-Shot Learning 小样本学习最新综述 | 三大数据增强方法
目录 原文链接:小样本学习与智能前沿 01 Transforming Samples from Dtrain 02 Transforming Samples from a Weakly Labeled ...
- cJSON的使用
1 安装cJSON github地址:https://github.com/DaveGamble/cJSON.git 下载完成后进入cJSON目录,执行下面命令生成Makefile文件 mkdir b ...
- 微服务注册到Nacos的IP私网172.x.x.x网段无法访问的问题
解决方案一 显示声明注册服务实例的外网IP,默认就是使用私网的IP造成无法访问的,配置如下: spring: cloud: nacos: discovery: ip: 101.37.6.8 解决方案二 ...
- moviepy音视频开发:音频拼接函数concatenate_audioclips介绍
☞ ░ 前往老猿Python博文目录 ░ concatenate_audioclips函数用于将多个音频剪辑进行拼接合成一个顺序播放的剪辑. 调用语法: concatenate_audioclips( ...
- 第9.5节 Python的readlines读取文件内容及其参数hint使用分析
一. 语法 readlines(hint=-1) readlines函数用于从文件或流中一次性读取多行数据,返回数据存入一个列表中. 参数hint释义: 这个参数在readlines的官方文档说明是用 ...
- PyQt(Python+Qt)学习随笔:QListWidget插入多项的insertItems方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 除了insertItem方法能插入项外,QListWidget支持一次插入多个项,对应的方法就是in ...