如何将Asp.net Core站点部署到CentOS

我们要想在linux系统中运行asp.net core程序,有两种方式:

  1. 直接部署在linux系统中
  2. 通过docker镜像部署在linux系统中

今天就来看下,如何直接把asp.net core应用站点部署到CentOS中!

安装.NET Core SDK

添加微软包地址到rpm(安装升级RPM包)

复制代码
#其中i表示安装,v表示显示安装过程,h表示显示进度,U是表示升级包

rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

更新rpm包

复制代码
rpm update

检查net core版本,更新完以后,默认会安装最新版的NET Core SDK,可以通过以下命令查看版本

复制代码
dotnet --info

手动安装.net core sdk

复制代码
yum install dotnet-sdk-3.1

发布asp.net core到linux系统

asp.net core程序发布到本地文件夹

通过visual studio 发布菜单,将asp.net core应用程序发布到本地应用程序文件夹。

选择linux x64环境,前面已经安装了SDK,建议直接框架依赖。

默认是保存到Release下的publish目录里面,发布后可以直接点击链接导航到目标文件夹。

  • 上传到linux系统

通过XShell,将文件上传到CentOS中的/data/sites/yourapp目录下,其中yourapp可以自己随便命名和创建。

复制代码
//递归创建目录 -p 表示递归创建
 mkdir -p /data/sites/yourapp

XShell上点击新建传输,直接将windows文件夹中的文件拖动到linux文件夹中即可。

如果上传不成功,需要给文件夹设置权限

复制代码
sudo mkdir -p /data/sites/yourapp
// 修改权限为当前登录用户,否则无法上传
sudo chown -R 用户:用户组 /data
  • 启动应用程序

文件上传上去后,我们进入的Linux系统中,先切换目录到/data/sites/yourapp,再通过dotnet yourapp.dll命令来启动应用程序。

复制代码
# cd /data/sites/yourapp
//如果当前用户权限不足,在前面加 sudu 提权
# dotnet yourapp.dll

如果我们执行命名后,提示如下界面,表示服务启动成功

复制代码
// 主机环境:Production
Hosting environment: Production
// 根目录
Content root path: /data/sites/yourapp
// 侦听地址和端口
Now listening on: http://0.0.0.0:5100
// 提示关闭技巧,Ctrl+C 可以关闭此主机
Application started. Press Ctrl+C to shut down.

yourapp 可自行重命名成自己的应用程序启动文件名

  • 将应用程序修改成常驻服务

前面通过命名启用站点的方式,很容易被关闭,只要控制台被关闭,服务就会被关闭。而且运行在控制台模式下,无法执行其它操作。

接下来我们把它修改成常驻服务:

定位到文件夹 /etc/systemd/system,输入命令

复制代码
//创建dotnet寄宿服务配置文件kestrel-dotnet.service,并进入编辑状态
sudo vi kestrel-dotnet.service

// 按 i 将编辑器转换为输入模式
// 将以下内容 copy 到当前编辑器中
[Unit]
Description=Example .NET Web Site running on Centos

[Service]
WorkingDirectory=/data/sites/yourapp
ExecStart=/usr/bin/dotnet yourapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

// 按 esc 键推出编辑模式,输入命令 :wq! 保存并退出

执行以上命令后,我们还需要注册和启动服务

复制代码
// 注册服务
sudo systemctl enable kestrel-dotnet.service
// 启动服务
sudo systemctl start kestrel-dotnet.service

以上命令执行完成后,我们就完成了常驻服务了。

这个时候,我们可以用浏览器打开我们刚部署的站点,如:http://192.168.1.110:5100

如果可以正常访问就表示部署完成了。如果不能正常访问,我们可以通过以下几种方式来判断服务是否正常。

外部浏览器无法访问服务排查方法

  • 查看服务是否正在运行

    //服务未启动,外部肯定无法访问服务器,需要查看服务是否在线
    //通过以下命令,查看kestrel-dotnet.service是否存在,如果不存在则重启服务
    //查看kestrel-dotnet.service是否存在

    systemctl | grep running

    //如果不存在,启动服务

    systemctl start kestrel-dotnet.service

  • 查看端口是否正在监听

    //如果服务存在,但是应用程序监听错误,也会导致外部无法访问
    //查看本机的监听端口是否正常开启,如果没有正常开启,检查站点服务是否启动异常

    netstat -nao

  • 查看本地是否可访问

    //先排查本机服务是否能正常访问,如果本机能正常访问,表示本地服务正常。那就需要从其它因素考虑原因。
    //尝试请求服务,如果有响应,表示服务正常

    curl http://192.168.1.110:5100

  • 查看端口是否添加到防火墙白名单

    //如果端口没有对外暴露,外部应用程序是无法访问的。这种情况,就是本机能正常访问,而外部无法访问很常见的因素
    //检查防火墙对外暴露端口,是否包含自己部署的应用程序端口号

    firewall-cmd --zone=public --list-ports

    //添加端口到白名单

    firewall-cmd --add-port=5100/tcp

    //添加成功后,再重新访问,查看请求是否正常

以上就是将asp.net core部署到linux系统中的过程,我们终于可以真正体验跨平台的乐趣了。

相关推荐
RainCityLucky9 分钟前
Java Swing 自定义组件库分享(十六)
java·笔记·后端
贰先生19 分钟前
Xiuno BBS 审计之问题16:get_magic_quotes在 PHP 8.0 被移除
后端
IT_陈寒30 分钟前
Vite的热更新突然失效,原来我忽略了这个配置
前端·人工智能·后端
云浪34 分钟前
Milvus + RAG 实战:《红楼梦》问答助手
前端·人工智能·后端
☆凡尘清心☆37 分钟前
CentOS Stream 9 源码编译搭建 Zabbix7.0.29 完整部署方案(部署成功)
linux·运维·centos
阿部多瑞 ABU1 小时前
告别手工核图:基于 .NET + MuPDFCore 的 CAD 等轴测 PDF 材料表提取与新旧版本对比实战
后端·算法·ui·pdf·c#
卷无止境1 小时前
FastAPI 的 WebSocket 装了些什么
后端·python·fastapi
wsad05322 小时前
CentOS 10 上使用 Docker Compose 部署 Discuz X5.0 论坛完整教程
linux·docker·centos·discuz
AINative软件工程2 小时前
Agent 上下文账本工程:别让工具结果把 128K 窗口塞成垃圾场
后端·架构·ai编程
卷无止境2 小时前
FastAPI 的 Request 类装了什么
后端·python