【.NET Core & Linux】项目部署步骤和注意事项
- 概述
- 跨平台项目部署
- 守护进程的使用
概述
在开发过程中,可以通过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:
- 将压缩包上传到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