本来不想写后端了,没想到最近用到了获取硬件信息的接口,不过对方只提供TCP协议接口,前端没法直接调用,只好又把.NET拾起来。哎好久没用了。。。。
第一部分 .net core环境部署
1、.net core runtime下载
下载地址:https://dotnet.microsoft.com/en-us/download/dotnet/6.0
页面的右侧是runtime 左侧是SDK,下载右侧的二进制版本Binaries,根据麒麟系统的CPU 选择合适的版本:X86 、arm架构32、64位自己找到下载文件,我自己的服务器是X86_64的,所以我直接下载X64版本,下载的文件名是:aspnetcore-runtime-6.0.36-linux-x64.tar.gz
2、发布.net core webapi
开发完的.net core webapi发布到文件夹中,本文发布到publish文件夹中,然后压缩成publish.zip
3、将上述两个压缩包都复制到麒麟系统中
我这里都放到路径:/home/administrator/kfq/donet中
(1)执行命令:zip publish.zip,将其解压到/home/administrator/kfq/donet/publish目录
(2)执行命令:tar zxvf aspnetcore-runtime-6.0.36-linux-x64.tar.gz -C dotnet,将其解压到/home/administrator/kfq/donet/dotnet目录
4、配置.net core全局变量
编辑文件vim /etc/profile,在最后面添加:
export DOTNET_ROOT=/home/administrator/kfq/donet/dotnet
export PATH=/home/administrator/kfq/donet/dotnet
如果已经有PATH变量了,则在后面加:后再加/home/administrator/kfq/donet/dotnet,下面是示例:
export PATH=$PATH:/home/administrator/kfq/donet/dotnet
5、更新系统全局变量
执行命令:source profile
执行完就可以再执行:dotnet --info或者dotnet --version,看时候出来dotnet的信息,出来了就说明.net core6部署成功了。
6、运行.net core程序
通过命令:dotnet /home/administrator/kfq/donet/publish/net6webapi.dll(和exe文件同名,项目名)就可以启动.net core程序了。
第二部分 .net core程序开机自启动
1、创建 Systemd 服务文件
在 /etc/systemd/system/ 目录下,创建一个新的服务文件 swdotnet.service,我直接用touch命令创建的文件编辑不了,不知道什么原因,后来我就直接在外面把文件写好,然后复制到这个目录中了。文件中的代码如下所示:
Description=SwWeb .NET Core Application
After=network.target
[Service]
WorkingDirectory=/home/administrator/kfq/donet/publish
ExecStart=/home/administrator/kfq/donet/dotnet/dotnet /home/administrator/kfq/donet/publish/net6webapi.dll
Restart=always
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=ASPNETCORE_URLS=http://0.0.0.0:5000
[Install]
WantedBy=multi-user.target
解释上面每个变量的意思:
[Unit] 部分定义了服务的描述和依赖关系。在这里,服务需要在网络配置完成后启动。
[Service] 部分定义了如何启动你的应用。
ExecStart 行指定了如何启动 .NET Core 应用。
WorkingDirectory 指定了工作目录,就写dll文件的目录就行。
Restart=always 保证服务在崩溃时会自动重启。
[Install] 部分告诉 Systemd 在系统启动时如何处理这个服务。
WantedBy=multi-user.target 表示该服务将作为多用户模式的一部分启动。
以上代码中我试过ExecStart=dotnet /home/administrator/kfq/donet/publish/net6webapi.dll,却不行,不知道为什么。而且会遇到很多问题,可以看系统日志来排查,看日志的命令:tail -n 20 /var/log/syslog。有个遇到的问题是提示我的文件有可执行权限,要把这个权限去掉,运行命令:sudo chmod 644 swdotnet.service。就行了。
2、下面的代码是其他人写的,我记录下,上面成功了,可以直接看第三步。
没试过,我自己成功的就是上面的代码,下面的好像设置了用户和组,反正我没设置也跑起来了。
[Unit]
Description=DCOWebhook ASP.NET Core Web API
After=network.target
[Service]
WorkingDirectory=/var/www/dco
ExecStart=/usr/bin/dotnet /var/www/dco/DCOWebhook.dll --urls "http://0.0.0.0:5000" #换成需要监听的端口
Restart=always
# 用户和组
User=www-data
Group=www-data
# 环境变量
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
解释下参数。User 和 Group:推荐使用非 root 用户(如 www-data)运行服务,提升安全性。
3、设置开机自启动
主要是以下四个命令:
(1)sudo systemctl daemon-reload。每次修改了服务文件,都需要让 Systemd 加载新的配置。执行这个命令。
(2)sudo systemctl enable yfweb.service。让服务在开机时自动启动
(3)sudo systemctl start yfweb.service。立即启动服务
(4)sudo systemctl status yfweb.service。如果服务运行正常,状态应显示为 active (running)。你应该会看到服务正在运行,并监听指定的端口
这样设置后如果没报错,就成功设置了开机启动,如果有问题,那就要具体问题具体分析了,主要是看下系统日志。
4、以下几个是我参考的文章,也赋在下面把。
https://cloud.tencent.com/developer/article/2491778
https://blog.csdn.net/weixin_48916144/article/details/147371288
https://blog.csdn.net/liqz2009/article/details/122377218
http://blog.tool90.com/331.html