.NetCore在Linux中环境的搭建
本文实例及工具NetCore3.1、FinalShell
NetCore官方文档
https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos
请确保有足够权限,建议使用root账号操作
1、配置微软环境,一台服务器配置一次即可
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
或者
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
2、注册更新依赖
sudo yum update
时间有些长,耐心等待,中间有确认下载提示 输入Y,等到出现如下输出compele!则安装完成。
3、安装NetCore SDK,SDK中包含了rumtime运行时,所以没必要再去安装rumtime
sudo yum install dotnet-sdk-3.1
默认安装最新的3.1版本(2021-2-23最新为3.1.406),需要下载并安装要耐心等待
直到Complete
可输入 dotnet –version 可查看安装版本
知道Complete 然后输入dotnet --version 可查看安装版本
如果要卸载SDK及微软的相关环境
sudo yum remove dotnet-sdk-*
sudo yum remove libunwind libicu
sudo yum remove /etc/yum.repos.d/dotnetdev.repo
4、测试NetCore项目
配置NetCore项目的默认访问端口,并发布测试项目
public class Program { public static void Main(string[] args) { //在控制台中创建Web对象 BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) =>WebHost.CreateDefaultBuilder(args) //设置默认监听端口为5000 此处实例改为5011 //当有多个项目同时监听时 可变更此处端口 .UseUrls("http://*:5011") .UseStartup<Startup>() .Build(); }
在服务器上新建路径如:/data/Appcode/mzpro 把项目发布后的文件上传该路径下,可使用如FinalShell等以便于相关操作
此时需确认我们所需端口在服务器上是否开启,如果开启则会返回 yes
sudo firewall-cmd --query-port=5011/tcp
如果未开启则需要开启所需端口
firewall-cmd --zone=public --add-port=5011/tcp --permanent #开放5011端口 firewall-cmd --reload #重启防火墙 firewall-cmd --zone=public --list-ports #查看服务器上已开发的端口号
cd至该路径下/data/Appcode/mzpro 然后输入命令
sudo dotnet Mzpro.dll #注意项目主文件名称
输出信息解释如下
// 侦听地址和端口 Now listening on: http://[::]:5011 // 主机环境:Production Hosting environment: Production // 项目所在目录地址 Content root path: /data/Appcode/mzpro // 提示关闭技巧,Ctrl+C 可以关闭此主机 Application started. Press Ctrl+C to shut down.
此时就可以通过服务器IP+5011的方式访问该项目了。但此时Shell界面不能关闭,如果关闭了就无法访问了,ctrl+c 退出Shell界面。
在Linux中.Net Core默认使用微软官方的Kestrel进行代码托管,所以此时的Shell界面是不可退出的,如果退出项目也就无法访问了。但可以有多种方式解决此问题,比如将Shell界面后台方式
nohup dotnet Mzpro.dll &
比如使用Linux内置服务
# 1.进入/etc/systemd/system/文件夹 新建文件kestrel‐res.service写入以下代码:
[Unit]
# 说明
Description=Example .NET Web MVC Application running on Centos7 [Service]
# 设置Web目录
WorkingDirectory=/home/Res/
# donet运行指令
ExecStart=/usr/bin/dotnet /home/Res/Res.dll Restart=always
# 如果崩溃了 n秒后重启服务
RestartSec=10 SyslogIdentifier=dotnet‐example
# 以什么身份运行
User=root Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi‐user.target
# 设置自动启动服务
systemctl enable kestrel‐res.service
# 启动服务 systemctl start kestrel‐res.service
# 查看服务启动状态 systemctl status kestrel‐res.service
# 如果有问题
# 刷新所有服务项
systemctl daemon‐reload
# 尝试重新启动
systemctl restart kestrel‐res.service
但是Linux是一个很复杂的系统 我们的程序也是一个很复杂的程序 在各种断电 断网 系统更新的情况下永远都要保证服务器的正常运行,用上述两种方法都不是正统之道
常见的托管方式有
1、在Azure中进行托管
2、在Windows或Linux平台上使用 Docker 进行托管
3、在Windows平台的 IIS + Http.sys 中进行托管
4、在Windows平台使用IIS 进程内(InProcess)、进程外托管(Kestrel)
5、在Linux平台上使用Jexus进行托管
6、在Linux平台上使用Supervisor进行托管(官方推荐)
7、在Linux平台上使用 Apache + Kestrel 进行托管
具体实现及文档后续会陆续总结公布,届时可移步至我关于Supervisor、Jexus、Docker、IIS 等部署方式的相关文章。
才疏学浅,相关文档等仅供自我总结,如有相关问题可留言交流谢谢。