Centos中部署NetCore项目(一)

前言

本文是基于centos8,dotnetcore3.1。

(为了服务器安全使用,程序部署最好不要直接root账号进行操作。)

如果使用sudo命令时候,提示用户不在sudoers文件中的解决方法。原因是centos把用户权限保存在了/etc/sudoers中,并且sudoers默认为只读的。

则需要先以root登录系统,授予当前用户相应的权限

一般操作如下

--第一步、修改文件属性

chmod +wrx /etc/sudoers

--第二步、 执行命令修改配置(或者直接编辑soduers文件在【root ALL=(ALL) ALL】添加username ALL=(ALL) ALL)    --其中username为对应的用户名称
echo 'username ALL=(ALL) ALL' >> /etc/sudoers      

--第三步、恢复文件属性

chmod -w /etc/sudoers

 

 修改完成后的文件

 

 

在Centos中安装NetCore SDK

不同步版本的centos,安装步骤或者命令可能会不一样。最好是参照官方的说明https://docs.microsoft.com/zh-tw/dotnet/core/install/linux-centos

执行命令

sudo dnf install dotnet-sdk-3.1

 

 

 

安装完成后,查看dotnet信息

dotnet --info

 

 

发布并部署dotnetcore应用程序

主要由两种方式发布dotnetcore项目:1、vs发布dotnetcore项目,2、使用dotnet publish命令来发布

第一步、发布项目

第一种方式:使用vs发布项目,右键对应的项目--【发布】

 

 【高级】中配置目标框架,部署模式等

 

 

 第二种方式:使用dotnet命令发布

.Net Core 发布命令与.Net FrameWork发布命令是不同的。.Net FrameWork使用的是donet MSBuild,而.Net Core 可以使用 dotnet publish 。

dotnetcore发布命令示例:dotnet publish D:\ProjectCode\XXX.WebApi.csproj -c release -r win-x64 -o D:\ProjectCode\Release\XXX.WebApi --self-contained false

解释:dotnet publish "解决方案/项目的路径" -c "发布关键字" -r "运行平台" -o "发布输出的路径" --self-contained "是否包含运行时的组件"

当在对应项目目录下执行脚本发布时,则无需指定项目路径,默认当前文件夹的项目;

发布关键字:release或者debug

运行平台:linux还是windows,可以不指定

 

 是否包含运行时的组件:值是true或者false,就是是不包含dotnetcore运行组件,一般在目标服务器上已经安装dotnetcore了,就无需再包含运行组件了。这样可以降低发布包的占用空间,特别是在网络不是很好的情况下,也降低网络传输。

完整示例:

dotnet publish -c release -o bin/publishfile --self-contained -false

 

 

当然可以将其做成批处理文件,例如pubish.bat

cd /d %~dp0
dotnet publish -c Release -o bin/publishfile --self-contained false
pause

 

需要注意的是,部分项目必须文件可能不会随着发布而复制到发布目标文件夹中,需要手动复制,或者指定使用批处理命令来复制。例如swagger需要使用到项目.xml文件

 

第二步、将发布的目标文件夹进行压缩打包,并上传到centos中进行解压缩

 

 

将压缩包上传到centos中,并进行解压缩

 

 

第三步,启动项目

运行命令

dotnet xxxx.xxx.dll --urls="http://5589"

示例如下

 

 

 

 

注意,需要设定Centos防火墙,否则外部无法访问。不建议直接将防火墙关闭

使用ctrl+c可停止当前运行dotnetcore项目。当然直接使用控制台守护进程运行dotnetcore,就无法再进行其他操作了。所以一般不会如此操作。

我们可以以后台运行的方式启动dotnetcore项目

使用命令

nohup dotnet xxx.dll --urls="http://*:5889" > /dev/null 2>&1 &

相关解释

nohup 就是后台运行的命令

/dev/null:/dev/null相当于执行了command 1 > /dev/null。执行command产生了标准输出stdout(用1表示),重定向到/dev/null的设备文件中

/dev/null可以理解为/dev路径下的空文件;该命令将command命令的标准输出输出到空文件中

2>&1:可以理解为执行command产生的标准输出重定向到文件中,标准错误也重定向到文件中,期间只打开一次文件,&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的文件。

最后的 & 是必须的!

运行示例

 

 

 

 

管理dotnetcore程序

ps -aux | grep dotnet                     #查看dotnetcore进程
kill xxxx                                            #杀死xxxx进程,xxxx为进程Id

 

 

 

 (启动的dotnet项目,但是外部可能无法访问,有可能是因为没有配置开放防火墙对应的端口所致。)

虽然后台运行可以不影响控制台进程进行其他操作,但是后台运行没有对应的守护,而且不方便管理。所以很多时候会借助supervisor进行管理。这个后续再补充了。

posted on 2020-08-10 00:33  john_yong  阅读(763)  评论(0编辑  收藏  举报

导航