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/ ...
随机推荐
- JUC详解--【Foam番茄】
1.什么是JUC java.util 工具包 业务:普通的线程代码 Thread Runnable 没有返回值,效率相比于 Callable 相对较低! 2.线程和进程 进程:一个程序,QQ.exe ...
- Java + maven + httpclient + testng + poi实现接口自动化
一.maven中引入httpclient.testng.poi依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...
- 趣文分享:C 语言和 C++、C# 的区别在什么地方?
任务: 把大象放到冰箱里.
- 知识解析:C语言函数有一些什么?为你呈现最全函数大全
大家双节快乐呀~国庆节过去了一半,大家放了几天假呀?玩的开心吗? 如果假日没有其他安排,不要宅在家虚度光阴哦~看看我的文章或者视频学习一些知识吧~ 今天为大家分享C语言库函数知识. 以下图片以字母 ...
- 锐安信sslTrus与GeoTrust SSL证书的对比
当您想要为您的网站购买一款SSL证书时,是不是既想要价格便宜,又想要安全性能服务好的证书,最后又在品牌上犹豫不决?如何选择SSL证书?哪款SSL证书是最适合您的?本文将详细对比分析锐成信息平台上畅销品 ...
- 图解连接阿里云(一)创建阿里云物联网平台产品和设备,使用MQTT.fx快速体验
1. 打开 https://www.aliyun.com/ 注册账号 2.注册账号登录后点击控制台 3. 在下图1处输入物联网平台,会弹出2处所示物联网平台的入口,点击红色箭头所示处,进入物联网平 ...
- nacos单机,集群安装部署
nacos单机启动 准备 下载nacos安装包 下载地址 准备centos环境 (本次测试使用docker) PS C:\Users\Administrator> docker run -tid ...
- HOOK API函数跳转详解
原文链接:https://blog.csdn.net/cosmoslife/article/details/7670951 结合课件逆向11分析
- 20191226_rpm命令
安装rpm包: [root@localhost ~]# rpm -ivh test.rpm rpm查询命令: [root@localhost ~]# rpm -qa | grep mysql mysq ...
- Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?
这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...