.NET Core项目在Linux服务器部署步骤和注意事项
【.NET Core】.net core项目从一台服务器迁移到另一台服务器时候,在重新编译时候,突然报错“错误NETSDK1004找不到资产文件“\obj\project.assets.json”。运行 NuGet 包还原以生成此文件”,是因为之前在项目引用的包找不到了,解决方案如下错误信息.Net Core编译.net core时报错找不到资产文件project.assets.jso找不到资产文
概述
在开发过程中,可以通过Kestre服务器 or IIS启动项目,进行本地访问。但是想让项目在外网被访问到,就需要把项目部署到能被外网访问到的服务器上,下面就分享下.net core项目在linux服务器上的部署。
跨平台项目部署
服务器使用的是腾讯云轻量应用服务器,Linux系统 ,版本:CentOs 7.6,部署的项目版本为.NET Core 3.1
-
发布需要部署到服务器上的项目, 填写发布选项并进行项目发布
-
根据发布的目标位置,找到相应打包后的项目文件夹
-
使用工具FinalSell or(xshell、sftp)打开Linux服务器;
(没有服务器的小伙伴可以到腾讯云、阿里云、百度云进行购买)
-
安装.NET Core的依赖环境
注册Microsoft密钥
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
更新yum库
sudo yum update
安装 .NET Core 运行时
sudo yum -y install aspnetcore-runtime-3.1
安装 .NET Core SDK 运行时
sudo yum -y install dotnet-sdk-3.1
若需要部署高版本项目的小伙伴可以选择对应版本的runtime和sdk
查看Dotnet 信息
dotnet --info
查看Dotnet 版本
dotnet --version
若安装yum过程中,遇到问题or错误可以查看该文章: 重装yum: https://blog.csdn.net/homewm/article/details/80642851
-
将压缩包上传到Linux服务器中,并进行解压:
unzip publish.zip
-
解压后,运行项目:
dotnet NswagCodeGenerators.dll
-
项目运行正常,nice!
访问的端口号需要进行开放,不然会被防火墙拦截,导致无法访问
守护进程的使用
我们关闭FinalShell后,会发现原本运行正常的项目无法访问,因为在我们断开linux的链接时,把当前的进程进行的了清除。所以我们为了保证项目的稳定性,需要使用Linux的守护进程,保证我们的项目运行.
Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等…
-
创建服务文件
sudo nano /etc/systemd/system/KestrelSer.service
-
文件代码
[Unit] Description=Kestrel running on CentOS [Service] WorkingDirectory=/projects/wwwroot/code_generators/publish/ Type=simple User=root Group=root ExecStart=/usr/share/dotnet/dotnet /projects/wwwroot/code_generators/publish/NswagCodeGenerators.dll Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 SyslogIdentifier=dotnet-example Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy=multi-user.target
按CTRL+O保存,CTRL+X退出
- Linux 具有区分大小写的文件系统。 将 ASPNETCORE_ENVIRONMENT 设置为“生产”会导致搜索配置文件 appsettings.Production.json,而不是 appsettings.production.json
- 早期版本的dotnet安装的是/usr/bin/下,因此环境变量也就在该目录,后期的版本则安装到了/usr/share/dotnet下
- 如果通过控制台直接进行复制,代码不会进行换行,因为代码中有注释,所以文件会无法运行成功,直接打开KestrelSer.service文件,进行复制即可。
- 保存文件并启用服务(按需选择即可)
systemctl enable KestrelSer.service
# 将服务设置为每次开机启动
systemctl start KestrelSer.service
# 服务立即启动 下次不启动
systemctl enable --now KestrelSer.service
# 立即启动且每次重启也启动 - 查看守护进程的运行状态
systemctl status KestrelSer.service
- 查看日志
sudo journalctl -fu KestrelSer.service
- 最后断开连接,看看效果
7.重启服务
systemctl restart KestrelSer.service
参考文章:
Linux部署.NET Core: https://www.cnblogs.com/fancunwei/p/9308953.html
重装yum: https://blog.csdn.net/homewm/article/details/80642851
dotnet安装目录:https://blog.csdn.net/yedajiang44/article/details/121848792
更多推荐
所有评论(0)