文章目录
- 前言
- 一、运行时安装
-
- [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部署)
前言
本篇文章包含如何在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 客户端访问
