在本篇文章中,主要记录及介绍.NET6项目发布及部署在Windows及Linux的过程,希望对你有一定的参考价值。
在本次部署实战中,用到的Windows系统版本是windows11,Linux系统是Ubuntu 22.04 LTS。
需要注意的是,在本次Windows系统部署的过程,是托管到Windows服务中的,而不是部署到IIS
托管到windows服务需要在Program.cs的CreateHostBuilder方法中,添加UseWindowsService()
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseWindowsService();
Windows部署
发布要求
配置:Release
目标框架:net6.0
部署模式:独立
目标运行时:win-x64
1、以管理员身份运行PowerShell:点击“开始”菜单,输入PowerShell,右键点击Windows PowerShell,然后选择“以管理员身份运行”
2、在PowerShell窗口中,执行以下指令
New-Service -Name "ApiService" -BinaryPathName "D:\发布\ApiService\ApiHost.exe" -DisplayName "ApiService" -Description API项目 -StartupType Automatic
命令参数说明:
- Name:服务名称
- BinaryPathName:服务可执行文件路径 + exe可执行文件名
- DisplayName:指定被用户界面程序用来标识服务的友好名称
- Description:服务列表中的描述
- StartupType:启动服务的类型
3、回车执行,出现以下内容说明创建成功
Status Name DisplayName
------ ---- -----------
Stopped ApiService 通道业务服务
使用sc命令管理服务
1、使用管理员身份运行命令提示符cmd:点击“开始”菜单,输入cmd,右键点击命令提示符,然后选择“以管理员身份运行”
2、服务管理指令如下
// 启动服务
sc start name;
// 停止服务
sc stop name;
// 删除服务
sc delete name;
命令参数说明:
- name:上面创建服务的名称
ApiService
启动服务失败处理建议
1、我的电脑-->右键-->管理-->本地用户和组;
2、选择“组”-->双击Administrators-->单击“添加”-->单击“高级”-->单击“立即查找”-->在下面的列表中选择Network Service用户-->两次单击“确定”-->加入。
3、项目的Program启动类的Main方法中添加Windows服务builder.Host.UseWindowsService();。
Linux部署
发布要求
配置:Release
目标框架:net6.0
部署模式:独立
目标运行时:linux-x64
安装运行环境及SDK
// 卸载所有.NET包
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*';
// 删除Microsoft存储库
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list;
// 更新源
sudo apt-get update;
// 安装运行时
sudo apt-get install -y aspnetcore-runtime-6.0;
// 安装SDK
sudo apt install dotnet-sdk-6.0;
// 检查版本
dotnet --version;
安装Supervisor
1、执行指令sudo apt-get install supervisor;安装Supervisor
2、执行指令cd /etc/supervisor/conf.d;进入配置目录
3、执行指令sudo vim supervisord.conf;创建并编辑自定义配置文件
4、配置文件supervisord.conf的保存内容如下,只需要修改 ApiHost、命令执行的目录,然后执行:wq指令保存退出
[program:ApiHost] #程序名称
command=dotnet ApiHost.dll --urls=http://*:8080 #要执行的命令 Flower_Api是程序名称 并指定端口
directory=/www/wwwroot/ApiService_Linux_x64 #命令执行的目录
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=root #进程执行的用户身份
stopsignal=INT
autostart=true #是否自动启动
autorestart=true #是否自动重启
startsecs=1 #自动重启间隔
stderr_logfile=/var/log/ApiHost.err.log #标准错误日志
stdout_logfile=/var/log/ApiHost.out.log #标准输出日志
5、执行重新加载配置指令
sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf;
6、执行指令sudo service supervisor stop;停止Supervisor
7、执行指令sudo service supervisor start;启动Supervisor



评论一下吧
取消回复 评论守则