前言

本文是基于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进行管理。这个后续再补充了。

Centos中部署NetCore项目(一)的更多相关文章

  1. Centos中部署NetCore项目(二)

    前言 在centos中部署程序,一般都不会是使用控制台进程直接启动,或者是后台运行.而是一些守护进程管理工具进行管理,例如supervisor. 部署Web相关程序,使用nginx是比较普遍的, 安装 ...

  2. 在Linux系统中部署NodeJS项目

    在Linux系统中部署NodeJS项目 安装NodeJS 首先进入 Node 官网,下载对应的 Node包 下载下来后是一个后缀为 xz 的压缩包,我们把这个包上传到 Linux 系统中的 /usr/ ...

  3. CentOS 7 部署 node 项目

    CentOS 7 部署 node 项目 安装 node 环境 方法一:使用 wget 的方式下载压缩包进行解压 淘宝node镜像地址,进入地址选择自己想要安装的版本 wget https://npm. ...

  4. 在centos中部署jenkins

    在centos中部署jenkins,需要的环境:安装jdk,Apache-tomcat 这两步我前面文章里已写,再次忽略 到官网下载最新的jenkins 我这里的是  jenkins.war 把该文件 ...

  5. 在Tomcat中部署Web项目的操作方法,maven项目在Tomcat里登录首页报404

     maven项目在Tomcat里登录首页报404, 解决:编辑conf/server.xml进行配置<Host>里的<Context>标签里的path. <Context ...

  6. 在Tomcat中部署web项目的三种方式

    搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...

  7. linux 环境下tomcat中部署jfinal项目

    tomcat中部署jfinal项目 问题现象如下图 问题描述: 我在自己的windows7系统上tomcat下面跑这个项目没有任何问题吗,但是当我把项目上传到linux服务器上的tomcatwebap ...

  8. .NetCore中的程序通过Docker在CentOS中部署

    基础说明 安装Docker过程就略过了 创建一个Asp.Net Core程序 启用Docker支持,会生成Dockerfile文件,接下来看下这个文件,当然不同的版本生成的具体可能不一致 FROM m ...

  9. 在Linux服务器部署 .NET-Core 项目

    一.文章概要  这篇文章是讲述一个Linux 新手将 .NET-Core 项目部署在 Linux 服务器上的一个记录,以及在部署期间遇到的问题以及解决办法.有不恰当的地方.欢迎大神指正. 二.前期准备 ...

随机推荐

  1. Leetcode PHP题解--D125 107. Binary Tree Level Order Traversal II

    val = $value; } * } */ class Solution { private $vals = []; /** * @param TreeNode $root * @return In ...

  2. 【题解】[NOI2011]阿狸的打字机

    阿狸的打字机 \(\text{Solution:}\) 首先观察三种操作:一种是插入一个字符,一种是退回上一步(回到父亲节点). 所以,我们可以对操作串进行模拟,并处理出每一个串在树上的位置. 接下来 ...

  3. excel——VlookUp函数的使用

    VlookUp函数,查询两个表中的相同字段数据,并将需要引用的数据从B表填充到A表 1.打开A表,将需要查询的列选中 在需要引用的列输入 = 在上方,函数选择中选择VLOOKUP函数 Windows: ...

  4. Flutter 1.22 正式发布

    支持iOS 14和Android 11,新的i18n和l10n支持,可用于生产的Google Maps和WebView插件,新的App Size工具等等! 作者:Chris Sells 原文:http ...

  5. 3.字符设备led驱动

    1.硬件原理图 由图可知,led1,led2,led3,led4,分别对应GPB5,GPB6,GPB7,GPB8,由s3c2440芯片手册可得到如下图所示,分别配置GPBCON和GPBDAT即可 2. ...

  6. TMS, XYZ & WMTS的不同

    WMS是OGC定义的协议,用于请求任意区域的渲染地图图像.客户可以根据需要以平铺模式对其进行请求. WMS-C是OSGeo创建的WMS扩展,它向功能文档中添加了元数据,以使客户端知道在哪里发出请求,从 ...

  7. 多测师讲解 _接口自动化框架设计_高级讲师肖sir

    背景:因为把传入接口参数.组建测试用例.执行测试用例和发送报告,都放入一个.py文件对于接口的使用非常不灵活就需要数据和接口业务进行分离让代码之间的 耦合性降低.和实现接口的分层管理,所以需要对代码进 ...

  8. 怎样学好 java ?

    浅谈Java的学习之路--怎样学好JAVA ?Java - 近10年来计算机软件发展过程中的传奇,其在众多开发者心中的地位就如"屠龙刀"."倚天剑". Java ...

  9. MeteoInfoLab脚本示例:加载图片和透明图层

    MeteoInfoLab的georead函数提供了读取shape文件.image文件(JPG.PNG等,需要有相应的地理定位文件)文件生成图层的功能(事实上shaperead也是同样的功能,不过函数名 ...

  10. 【水】怎么在 HZOI 上水到更高的分

    前言 这些东西在联赛并用不了 预编译优化 40行优化 #define _CRT_SECURE_NO_WARNINGS #pragma GCC optimize(2) #pragma GCC optim ...