【Linux】Ubuntu上安装.NET 9运行时与ASP.NET Core项目部署入门

文章目录

  • 前言
  • 一、运行时安装
    • [1.1 Ubuntu系统配置微软官方软件源](#1.1 Ubuntu系统配置微软官方软件源)
    • [1.2 安装.NET运行时](#1.2 安装.NET运行时)
    • [1.2.1 查看可安装的aspnetcore运行时版本](#1.2.1 查看可安装的aspnetcore运行时版本)
    • [1.2.2 注册 Ubuntu .NET 向后移植包](#1.2.2 注册 Ubuntu .NET 向后移植包)
    • [1.2.3 安装的aspnetcore运行时](#1.2.3 安装的aspnetcore运行时)
  • [二、ASP.NET Core部署](#二、ASP.NET Core部署)
    • [2.1 设置ASP.Net Core端口](#2.1 设置ASP.Net Core端口)
    • [2.2 打包文件](#2.2 打包文件)
    • [2.3 Ubuntu安装文件传输和解压缩工具](#2.3 Ubuntu安装文件传输和解压缩工具)
    • [2.4 上传文件与解压](#2.4 上传文件与解压)
    • [2.5 持久化运行服务](#2.5 持久化运行服务)
    • [2.6 查找持久化运行服务的进程ID](#2.6 查找持久化运行服务的进程ID)
    • [2.7 客户端访问](#2.7 客户端访问)

前言

本篇文章包含如何在Unbuntu上安装.NET 9运行时,并且完整记录将一个ASP.NET Core项目部署到Linux服务器上。


一、运行时安装

1.1 Ubuntu系统配置微软官方软件源

在Linux系统上启用Microsoft软件包存储服务,需要匹配当前系统的版本

bash 复制代码
wget https://packages.microsoft.com/config/ubuntu/$(系统版本)/packages-microsoft-prod.deb

ubuntu 24.04版本为例

bash 复制代码
wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb

1.2 安装.NET运行时

.NET运行时包含两种,dotnet-runtime与aspnetcore-runtime。前者是dotnet-runtime一个通用的运行时环境,用于支持.Net core应用程序的执行,它包含了.Net Core应用程序所需的所有运行时组件和依赖项。而后者aspnetcore-runtime其实是dotnet-runtime的一个超集,在dotnet-runtime的基础上多了关于web的各类服务。比如说通过使用Kestrel web服务器来处理HTTP请求和响应,已经各类用来处理请求管道的中间件,如授权鉴权,拦截器等。

也就是说aspnetcore-runtime是包含dotnet-runtime的。我们在安装aspnetcore-runtime的时候会自动安装对应版本的dotnet-runtime。接下来我们通过安装aspnetcore-runtime 9.0 来演示。

1.2.1 查看可安装的aspnetcore运行时版本

bash 复制代码
apt-cache search aspnetcore-runtime

上述指令可以看到目前微软官方软件源提供的可安装的运行时版本。截止到本文为止该软件源默认只提供8.0的版本。我们可以通过注册 Ubuntu .NET 向后移植包存储库来实现从.NET 6开始的安装版本

执行sudo apt update后,直接尝试sudo apt install aspnetcore-runtime-9.0。若提示 "无此包",再考虑 backports PPA,注册 Ubuntu .NET 向后移植包。

1.2.2 注册 Ubuntu .NET 向后移植包

注册 Ubuntu .NET 向后移植包并且更新

如果登录的账户是root类超管,可以去除sudo

bash 复制代码
--添加.NET backports 软件源:
sudo add-apt-repository ppa:dotnet/backports
--更新软件包列表:
sudo apt update

1.2.3 安装的aspnetcore运行时

下载.NET 9.0运行时

csharp 复制代码
apt install aspnetcore-runtime-9.0

查看.net 运行时版本

bash 复制代码
dotnet --list-runtimes
dotnet --info

执行dotnet --info结果

显示安装的.NET 运行时包括.NETCore 和AspNetCore运行时。

bash 复制代码
Host:
  Version:      9.0.7
  Architecture: x64
  RID:          ubuntu.24.04-x64

.NET SDKs installed:
  No SDKs were found.

.NET runtimes installed:
  Microsoft.AspNetCore.App 9.0.7 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 9.0.7 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
  None

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

二、ASP.NET Core部署

2.1 设置ASP.Net Core端口

appsettings.json文件下添加Kestrel配置。指定Kestrel web服务器运行该服务的时候启动的端口
此处演示启动50005端口

csharp 复制代码
"Kestrel": {
  "Endpoints": {
    "Http": {
      "Url": "http://*:50005"
    }
  }
}

"http://*:50005"表示 "监听服务器所有网络接口的 50005 端口",确保外部可访问;若仅需本地访问,像是配合 Nginx 反向代理,可改为"http://localhost:50005"。本处是简单处理。

2.2 打包文件

右键项目开启打包,输出目录为文件夹。并访问该目录,将打包文件压缩成在zip格式

2.3 Ubuntu安装文件传输和解压缩工具

如果Ubuntu服务器已经具备了该功能跳过该步骤

安装文件传输工具

bash 复制代码
apt install lrzsz

安装解压缩工具与使用

bash 复制代码
sudo apt install unzip
unzip $(文件名)

2.4 上传文件与解压

切换到指定的目录下新建一个文件夹用于存放上传的打包文件

bash 复制代码
mkdir dotnet
cd dotnet
unzip $(文件名)

2.5 持久化运行服务

bash 复制代码
nohup dotnet $(文件名).dll &

执行指令后会返回一个进程ID,用于杀死该进程

bash 复制代码
araby@VM-4-2-ubuntu:~/dotnet/aspNetCoreDemo$ nohup dotnet PublishTest.dll &
[1] 1738235
araby@VM-4-2-ubuntu:~/dotnet/aspNetCoreDemo$ nohup: ignoring input and appending output to 'nohup.out'

杀死进程

bash 复制代码
kill 1738235

这种方式在服务器断电重启后会无法自动启动服务,需要手动创建守护进程。创建守护进程的方式我会在下一篇博客里分享。

2.6 查找持久化运行服务的进程ID

查找dotnet下的服务

bash 复制代码
ps aux | grep dotnet

记得dll名称,找到指定dll对应的ID

bash 复制代码
ps -ef | grep -v grep | grep $(dll名称).dll

重新部署的时候需要先kill进程,部署完毕后在持久化进程。


2.7 客户端访问

相关推荐
yuxb7321 分钟前
Linux 文本处理与 Shell 编程笔记:正则表达式、sed、awk 与变量脚本
linux·笔记·正则表达式
刘一说32 分钟前
CentOS 系统 Java 开发测试环境搭建手册
java·linux·运维·服务器·centos
wdxylb6 小时前
云原生俱乐部-shell知识点归纳(1)
linux·云原生
飞雪20077 小时前
Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
linux·macos·阿里云·vmware·虚拟机·aliyun·alibaba cloud
路溪非溪8 小时前
关于Linux内核中头文件问题相关总结
linux
Lovyk10 小时前
Linux 正则表达式
linux·运维
Fireworkitte11 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil90011 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char12 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
淮北也生橘1213 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习