本來不想寫后端了,沒想到最近用到了獲取硬件信息的接口,不過對方只提供TCP協(xié)議接口,前端沒法直接調(diào)用,只好又把.NET拾起來。哎好久沒用了。。。。
第一部分 .net core環(huán)境部署
1、.net core runtime下載
下載地址:https://dotnet.microsoft.com/en-us/download/dotnet/6.0
頁面的右側(cè)是runtime 左側(cè)是SDK,下載右側(cè)的二進制版本Binaries,根據(jù)麒麟系統(tǒng)的CPU 選擇合適的版本:X86 、arm架構(gòu)32、64位自己找到下載文件,我自己的服務(wù)器是X86_64的,所以我直接下載X64版本,下載的文件名是:aspnetcore-runtime-6.0.36-linux-x64.tar.gz
2、發(fā)布.net core webapi
開發(fā)完的.net core webapi發(fā)布到文件夾中,本文發(fā)布到publish文件夾中,然后壓縮成publish.zip
3、將上述兩個壓縮包都復(fù)制到麒麟系統(tǒng)中
我這里都放到路徑:/home/administrator/kfq/donet中
(1)執(zhí)行命令:zip publish.zip,將其解壓到/home/administrator/kfq/donet/publish目錄
(2)執(zhí)行命令: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
如果已經(jīng)有PATH變量了,則在后面加:后再加/home/administrator/kfq/donet/dotnet,下面是示例:
export PATH=$PATH:/home/administrator/kfq/donet/dotnet
5、更新系統(tǒng)全局變量
執(zhí)行命令:source profile
執(zhí)行完就可以再執(zhí)行:dotnet --info或者dotnet --version,看時候出來dotnet的信息,出來了就說明.net core6部署成功了。
6、運行.net core程序
通過命令:dotnet /home/administrator/kfq/donet/publish/net6webapi.dll(和exe文件同名,項目名)就可以啟動.net core程序了。
第二部分 .net core程序開機自啟動
1、創(chuàng)建 Systemd 服務(wù)文件
在 /etc/systemd/system/ 目錄下,創(chuàng)建一個新的服務(wù)文件 swdotnet.service,我直接用touch命令創(chuàng)建的文件編輯不了,不知道什么原因,后來我就直接在外面把文件寫好,然后復(fù)制到這個目錄中了。文件中的代碼如下所示:
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] 部分定義了服務(wù)的描述和依賴關(guān)系。在這里,服務(wù)需要在網(wǎng)絡(luò)配置完成后啟動。
[Service] 部分定義了如何啟動你的應(yīng)用。
ExecStart 行指定了如何啟動 .NET Core 應(yīng)用。
WorkingDirectory 指定了工作目錄,就寫dll文件的目錄就行。
Restart=always 保證服務(wù)在崩潰時會自動重啟。
[Install] 部分告訴 Systemd 在系統(tǒng)啟動時如何處理這個服務(wù)。
WantedBy=multi-user.target 表示該服務(wù)將作為多用戶模式的一部分啟動。
以上代碼中我試過ExecStart=dotnet /home/administrator/kfq/donet/publish/net6webapi.dll,卻不行,不知道為什么。而且會遇到很多問題,可以看系統(tǒng)日志來排查,看日志的命令:tail -n 20 /var/log/syslog。有個遇到的問題是提示我的文件有可執(zhí)行權(quán)限,要把這個權(quán)限去掉,運行命令:sudo chmod 644 swdotnet.service。就行了。
2、下面的代碼是其他人寫的,我記錄下,上面成功了,可以直接看第三步。
沒試過,我自己成功的就是上面的代碼,下面的好像設(shè)置了用戶和組,反正我沒設(shè)置也跑起來了。
[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" #換成需要監(jiān)聽的端口
Restart=always
# 用戶和組
User=www-data
Group=www-data
# 環(huán)境變量
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
解釋下參數(shù)。User 和 Group:推薦使用非 root 用戶(如 www-data)運行服務(wù),提升安全性。
3、設(shè)置開機自啟動
主要是以下四個命令:
(1)sudo systemctl daemon-reload。每次修改了服務(wù)文件,都需要讓 Systemd 加載新的配置。執(zhí)行這個命令。
(2)sudo systemctl enable yfweb.service。讓服務(wù)在開機時自動啟動
(3)sudo systemctl start yfweb.service。立即啟動服務(wù)
(4)sudo systemctl status yfweb.service。如果服務(wù)運行正常,狀態(tài)應(yīng)顯示為 active (running)。你應(yīng)該會看到服務(wù)正在運行,并監(jiān)聽指定的端口
這樣設(shè)置后如果沒報錯,就成功設(shè)置了開機啟動,如果有問題,那就要具體問題具體分析了,主要是看下系統(tǒng)日志。
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