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的更多相关文章

  1. CentOS 7 部署 ASP.NET Core 应用程序

    原文:CentOS 7 部署 ASP.NET Core 应用程序 看了几篇大牛写的关于 Linux 部署 ASP.NET Core 程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大 ...

  2. CentOS 7部署ASP.NET Core应用程序

    看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...

  3. 【转载】CentOS 7部署ASP.NET Core应用程序

    看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...

  4. 【转】CentOS 7部署ASP.NET Core应用程序

    很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...

  5. 【详细】【转】CentOS 7部署ASP.NET Core应用程序

    很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...

  6. 部署ASP.NET Core最简单的办法,使用IIS部署ASP.NET Core应用

    本文迁移自Panda666原博客,原发布时间:2021年3月28日.写原文的时候.NET的最新版本是5.0,现在7的preview出来了,时间真快啊.抽空再写个在Windows Server Core ...

  7. 在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.总结 ...

  8. Linux下自动化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)

    1.先配置好Docker阿里云加速,可以使用阿里云容器服务 (可自己在阿里云申请,要不然安装东西直接很慢)注意:https://XXXX.mirror.aliyuncs.com为阿里云加速服务分配地址 ...

  9. CentOS 下部署 ASP.NET Core环境

    一.安装dotnet 1.下载运行环境 https://www.microsoft.com/net/download/linux 下载Runtime:https://go.microsoft.com/ ...

随机推荐

  1. 通过Consul Raft库打造自己的分布式系统

    通用的CP系统有etcd和consul, 通用的对立面就是专用系统. 所以在某些场合是有这种需求的. 然而etcd embed的可用性极差, Windows上面跑会出现各种问题, 而且不能定制协议, ...

  2. Apache HTTPD 换行解析漏洞--CVE-2017-15715

    CVE-2017-15715 一.漏洞描述 Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页.其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1 ...

  3. Istio 之ServiceEntry

    使用服务条目资源(ServiceEntry)可以将条目添加到 Istio 内部维护的服务注册表中.添加服务条目后,Envoy 代理可以将流量发送到该服务,就好像该服务条目是网格中的服务一样.通过配置服 ...

  4. python应用(4):变量与流程

    程序是什么?就是一堆代码啰.但是代码是有组织而来的,不是凭空堆砌出来的.有一个"古老"的说法:程序=数据结构+算法,意思是,程序是由一些数据结构(数据的组织结构)加上某些算法而形成 ...

  5. [Android systrace系列] 抓取开机过程systrace

    ------------------------------------------------------------------------- 这篇文章的小目标:了解抓取开机过程systrace的 ...

  6. Django 在test.py 中测试文件的配置

    import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTING ...

  7. 谈谈 rm -rf * 后的几点体会(年轻人得讲码德)

    事情始末 平时经常开玩笑,删库跑路.删库跑路,今天我真的rm -rf *了.早上来,一个同事说要查日志,但是日志我又备份到云磁盘了,我就想着把那一天的日志wget下来看看,然后分析.本来是想放在/va ...

  8. 解决IDEA更新为最新的2020.3版后,右键运行居然没有以xml形式运行的Run显示

    一.前言 个人一直喜欢用IDEA最新版,结果更新后,发现TestNg批量执行,选中testng.xml右键没Run,如下图: 刚开始以为是配置错误呢,下载了2018.2版本的IDEA,还能正常运行,于 ...

  9. django+channels+dephne实现websockrt部署

    当你的django项目中使用channels增加了websocket功能的时候,在使用runserver命令启动时,既可以访问http请求,又可以访问websocket请求.但是当你使用uWSGI+n ...

  10. 2016 ACM/ICPC ECNA Regional I.Waif Until Dark(最大流)

    这是一道ECNA的16年题,问有n个小朋友,m个玩具,不同孩子有不同喜好的玩具,每个玩具可能属于一个类别,同一类别的玩具最多只能用一定次数,问最大匹配 这个就很裸的二分图,掏出dinic板子,首先最后 ...