在CentOS上部署Asp.net Core应用程序

作为一个Linux新手,许多人向我鼓吹说CentOS多么强大,于是我就开始把一个演示程序发布到CentOS,想试一下它到底有多强大。在此之前,我将同样的程序已经成功发布到了Ubuntu,我觉得,既然已经有了前一次的成功经验,不论CentOS还是Ubuntu都是Linux,道理应该差不多吧。但事实证明,还是有些差异的,某些在CentOS上频出的问题在Ubuntu上却没有,所以我的感觉是Ubuntu部署Asp.net Core程序更容易些。

过程很不顺利,但最终经过一天摸索已摸清个七八成,应用总算能运行了。

Asp.net Core应用需要反向代理配合才能运行,IIS、Apache和Nginx等Web服务软件都可以作为它的反向代理。这里使用Nginx作为反向代理。

1.安装.NET Core SDK。四个命令,依次执行:

sudo yum install libunwind libicu

curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=847103

sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet

sudo ln -s /opt/dotnet/dotnet /usr/local/bin

2.安装nginx。

yum install nginx

3.上传应用程序。使用工具不限,在Windows上可以用MobaXterm,这个东西不错,既能登录系统,也能传送和下载文件,还可以可视化地浏览服务器上的目录、打开文件进行编辑。

4. 配置nginx。打开/etc/nginx/nginx.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;

}

此时,应用内部的Kestrel监听的端口是5000,而外部用户访问应用仍然使用80端口。

注意找到“user XXX;”这句,"XXX"可以为任何字串,这个东西要记住,稍后把.net Core应用监听服务设置为系统服务时需要它。

5.经过第4步配置后,进入应用程序所在目录,执行

dotnet app.dll(app.dll是asp.net core应用程序发布后生成的文件,需要用你自己的应用名称替代app.dll)

一切安好的话,此时应用应该可以访问了,打开浏览器去试一下。

到此为止,应用程序已经部署好了。但是,你发现了,有个命令窗口一直开着,它就是执行dotnet xxxx.dll那个窗口,如果这个窗口关闭了,那么应用程序也随即不能访问了。作为完美型的程序猿,肯定不希望这个窗口总趴在屏幕上,这时就用到了系统服务,让应用程序监听服务在系统启动时自动启动,省去了每次启动都需要再次执行dotnet命令去运行服务。

6.将应用程序的监听服务设置为系统服务。这一步中,许多介绍部署.net core应用的文章都使用一个叫“Supervisor”的东西,这个东西我不熟,当然,其实我对整个Linux就不熟,通过参考资料,我使用系统自带的systemd(据说以前的版本没有这个东西,我用的是CentOS 7)来制作守护进程。

在/etc/systemd/system/目录下建一个服务文件xxxx.service(用自己的名称替换xxxx),然后打开,写入:

[Unit]
    Description=应用描述
    [Service]
    WorkingDirectory=/sites/test_app   #工作目录,合理配置
    #执行dotnet命令的地方,注意配置为自己机器上正确的dotnet所在路径及程序所在路径 
    ExecStart=/usr/local/bin/dotnet /sites/test_app/WebApp.dll  
    Restart=always
    RestartSec=10
    # 注意,这里User的值应该与第4步nginx.conf配置文件里user XXX的XXX相同。
    # 比如在nginx.conf中,有一句:user nginx;那么此处也为User的值就为nginx
    User=nginx
 
    Environment=ASPNETCORE_ENVIRONMENT=Production 
    [Install]
    WantedBy=multi-user.target

上面“#”号后面的是注释,我加了些说明,实际使用时可以移除这些注释。

在这步中遇到个问题,一开始,在“ExecStart ……“后面有个注释,在执行
    systemctl enable xxxx.service
时老是报错。后来把注释移除,并且把这句后面的空格删除后就正常了。

7.将服务设置为开机自启,这样每当机器重启就不需要再执行dotnet命令来启动应用程序监听了,那个碍眼的dotnet监听窗口也可以关闭了。

设置服务开机自启:

systemctl enable xxxx.service

启动服务:

systemctl start xxxx.service

查看服务状态:

systemctl status xxxx.service

如果服务没能正常启动,这个命令可以显示哪里出错。如果有错误,修改错误。

到此,部署完成,应该能访问应用了。

第二天,我想起了已经把监听服务设置成了系统服务,可以在重启后不需要执行dotnet命令,于是我就想测一测到底靠不靠谱,就把机器重启了。结果浏览器给我回馈了个“Bad Gateway”,真是不靠谱啊,说好的Linux强大呢?

我用systemctl status检查了服务,显示运行中,不是服务没启动,说明系统服务还是靠谱的。那怎么不能访问了呢?网上找了半天没找到想要的答案,突然想到,是不是nginx这玩意挂了,因为在安装、配置nginx时这货就曾经瘫过,使用nginx -s reload命令想重启一下nginx,结果发现它提示nginx.pid文件出了问题。关于这个问题的解决办法,我在《Nginx在CentOS中丢失nginx.pid文件的处理》中提到过。

在Ubuntu下部署与这个差不多,某些命令不一样。参考:https://docs.microsoft.com/zh-cn/aspnet/core/publishing/linuxproduction。

时间: 2025-01-13 07:27:32

在CentOS上部署Asp.net Core应用程序的相关文章

尝试在Linux上部署Asp.net Core应用程序

快两个月没接触.net,倒是天天在用Linux,所以想尝试一下在Linux运行喜欢的.net 应用. 安装CentOS 安装.Net core for Linux 创建Asp.net Core应用程序 安装Nginx 配置Nginx代理 1,安装CentOS系统 这个网上教程太多滤过. 2,安装跨平台的.NET Core SDK for CentOS7 sudo yum update sudo yum install libunwind libicu sudo yum install dotne

Web Server 在IIS上部署ASP.NET Core项目

在IIS上部署ASP.NET Core项目 一.配置应用程序池为无托管: 二.安装ASPNETCoreModule:(核心) 下载地址:https://go.microsoft.com/fwlink/?linkid=844461 安装包:DotNetCore.1.0.4_1.1.1-WindowsHosting.exe 没有安装是没有红色标记的这项的:

在 Azure 上部署 Asp.NET Core Web App

在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core的网站呢?Azure 的 Web App 服务是个很好的选择. 下面我们会通过 Visual Studio 创建一个 Asp.net Core demo 应用,然后把这个 demo 应用部署到 Azure Web App.通过阅读本文,您将能了解到如何创建 Asp.NET Core 应用程序和如何在Azure上创建 Web App 并部署

使用Docker部署ASP.NET Core应用程序实践

前言 最近把很火的Docker给看了,于是就磨拳擦掌要去实践一下.于是就拿之前一个aps.net core的项目(已被停止)去练手.该项目之前在ubuntu14.04上确保可以正常运行,所以docker化应该不会有太多问题.搜索了下微软提供了asp.net core的官方docker镜像,但我为了学习docker决定从linux的基础镜像开始制作docker镜像,同时为了少绕弯路,决定从确保能运行的ubuntu14.04开始. 准备 环境 OS:Ubuntu 14.04 .NET Core SD

使用 Docker 在 Linux 上托管 ASP.NET Core 应用程序

说在前面 在阅读本文之前,您必须对 Docker 的中涉及的基本概念以及常见命令有一定了解,本文侧重实战,不会对相关概念详述. 同时请确保您本地开发机器已完成如下安装: Docker 18.06 或更高版本的 Docker 客户端 .NET Core SDK 2.2 或更高版本 Visual Studio Code 代码编辑器,以及 C# 语法插件 1.17.1 或更高版本 注:本文实验环境是 Ubuntu 18.04 LTS.如果您的机器是 Window,也可以把 Docker 装在虚拟机或服

vs2017 远程调试部署在centos上的asp.net core程序(通过附加程序的方式)

    前言 有时候必须在服务器上调试代码.比如做微信公众号开发,需要做一些url回调, 此时无法在开发电脑上做调试.所以远程调试代码就很有必要了.经过2个小时摸索,顺利实现. (注意:用jexus时无法远程调试,因为jexus隐藏了dotnet进程,它把dotnet作为自己的子进程,所以无法附加dotnet进程.) 1.在vs2017中设置centos服务器ssh连接信息 菜单 工具->选项    跨平台-- 连接管理器,如下图,添加ssh服务器 2.在centos服务器上安装unzip软件

在CentOS上部署Asp.Net MVC3的第一次尝试

关注mono已经很久了,现在才有时间真正的尝试一下在linux中部署asp.net的网站,也算是记录 一下自己的第一次尝试吧. 我的实践的环境是win7 + VM10 + CentOS6.5 下面就是具体的步骤: 1.在linux下搭建asp.net所需要的环境(mono 3.12.0+jexus 5.6.3.12),这一步也已经有很多 可以参考的文章了,大家可以看看惊鸿哥的博客和张善友先生的博客来搭建环境,我搭建的最终如 下: 2.环境搭建好了,当然就是要开发了.开发我是在VS上,将发布后的文

在IIS上部署Asp.Net Core 2.2.0

1. .NET Core与Windows环境 Asp.Net Core 2.2.0 Windows 10 2. 先决条件   下载并安装.Net Core Hosting Bundle. 3. 部署过程 Visual Studio 发布程序 新建IIS站点 调整应用程序池,.NET CLR版本选择"无托管代码" 最后附上微软官方文档地址:点击查看 原文地址:https://www.cnblogs.com/wxlv/p/netcore-to-iis.html

CentOS 下部署 ASP.NET Core环境

一.安装dotnet 1.下载运行环境 https://www.microsoft.com/net/download/linux 下载Runtime:https://go.microsoft.com/fwlink/?LinkID=825888 安装dotnet Runtime >yum install libunwind libicu > mkdir -p /opt/dotnet && tar zxf dotnet.tar.gz -C /opt/dotnet > ln -