华为云云耀云服务器L实例评测|使用Linux系统与Docker部署.net/c#项目

news2025/2/25 18:31:01

目录

前言

如何在CentOS运行项目

登录CentOS

使用Rider打包

使用Visual Studio打包

项目运行

后台运行

开放端口 

如何在Docker中运行项目

项目运行


前言

本章详细介绍,.net Core项目从打包到部署上华为云云耀云服务器L实例的过程与一些细节问题。在这里我们分别以系统镜像的CentOS和应用镜像的Docker可视化Portainer进行举例,从零到一的部署过程。

如何在CentOS运行项目

登录CentOS

服务器选择,华为云云耀云服务器L实例为例,选择自己所在区域,然后选择系统镜像、CentOS

服务器购买完成后,第一步先去控制台,找到刚才购买的服务器,进行重置密码,一定要勾选“自动重启”这样修改的密码才能立刻生效。

然后在控制台找到弹性公网IP,与刚才修改的密码,登录自己的服务器

使用Rider打包

如果使用的IDE是Rider,点击右上角的小火箭图标,然后再点击下拉框中的编辑配置

在弹窗的窗口中,点击左上角的+号,选择Publish to folder(发布到文件夹)

 然后配置我们的一些打包信息

TargerLocation:打包文件的存放地址,默认即可

Targer framework:net的版本号,这个会默认与当前项目运行的版本相同

DeployMent Mode:在这个选项的下拉框中有两种发布模式,一个是Self-Contained,另一个是Framework-Dependent

  1. Self-Contained(自包含):这种模式下,发布的应用程序会包含所有需要运行的内容,包括.NET Core运行时和.NET Core库。这意味着应用程序可以在没有.NET Core运行时环境的机器上运行。
  2. Framework-Dependent(框架依赖):这种模式下,发布的应用程序不包含.NET Core运行时和库,它依赖于目标机器上的.NET Core运行时环境。

通俗一点就是,一个直接可以丢上去跑,一个需要先配置环境,为了方便,我这里就选择了Self-Contained,一般小项目其实包也大不了多少,如果项目很多,再考虑使用Framework-Dependent

Target runtime:运行的系统,毫无疑问,这里选择Linux-x64

配置完成后点击保存

点击运行,然后就去我们刚刚配置的TargerLocation路径下找到打包好的文件,如果没改的话一般默认是项目下的bin下面的Release中

使用Visual Studio打包

因为很多人使用Visual Studio,这里也演示一下使用Visual Studio如何打包。

在解决方案资源管理器中右键项目,选择发布。

在右边的窗口中点击发布,点击发布配置文件,选择文件夹,然后下一步

 然后选择发布文件,(默认即可),点击完成!

 然后点击显示所有设置,在弹出的窗口中,配置选择Release,部署模式也就是我们刚刚在RD那边打包时DeployMent Mode中的Self-Contained(自包含),目标运行选择我们的服务器系统Linux-x64。点击保存

点击窗口中的发布按钮,然后去刚刚设置的打包路径就可以看见打包好的文件了 

项目运行

将我们刚刚通过Rider或VisualStudio打包好的运行文件COPY到服务器上

 因为我们打包时选择了“独立”,因此不需要装.net

cd到项目copy到服务器的路径,如何直接通过命令   ./yourapp 来启动项目,"yourapp"为你的应用程序的实际名称。

如何发现可能会提示报错

-bash: ./WebApi: Permission denied

这是应用程序文件有执行权限。你可以使用chmod命令来添加执行权限

chmod +x yourapp

然后在执行一遍刚刚的命令,可能又会发现报了一大堆的错误提示

Please install libicu using your package manager and try again. Alternatively you can set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support.

不用慌, 这个错误是因为.NET Core运行时需要ICU库来处理全球化和本地化的字符串。在某些Linux发行版中,这个库可能没有预装。

你可以通过安装libicu库来解决这个问题。在UbuntuDebian上,你可以使用以下命令来安装:

sudo apt-get install libicu-dev

CentOSFedora上,你可以使用以下命令来安装:

sudo yum install libicu

如果你的应用程序不需要全球化和本地化的支持,你可以通过设置环境变量来禁用ICU功能:

export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1

然后再运行你的应用程序。此时就可以成功运行了

后台运行

我们可以使用nohup命令让项目在后台运行,nohup命令可以在你退出shell后继续运行你的进程。

CtRl + C结束掉刚才的运行任务,然后用如下命令来运行,这样所有的输出(包括stdout和stderr)都被重定向到output.log文件

nohup ./你的项目名称 > output.log 2>&1 &

 一般来说,没有特意指定output.log的路径情况下,他会在当前项目运行路径下生成,后续我们项目出现了什么问题,就可以把日志找出来看看了。

如果你想要检查你的程序是否在运行,你可以使用ps命令

ps aux | grep 你的项目名称

如果你想要停止你的程序,你可以使用kill命令

kill $(你的项目名称)

开放端口 

在控制台找到安全组,点击配置规则

添加入方向规则,优先级设为1,我的项目端口是5000,因此设置为5000,其他默认即可

我们来测试一下,可以正确发请求到服务器上的程序了

去控制台看看服务器的监控,服务器是昨天买的,也就是说刚刚部署项目cpu最高才用了2%,浪费了,这就去写几个死循环把cpu用起来。

如何在Docker中运行项目

因为我还买了一台云耀云服务器L实例的Docker可视化Portainer,里面已经装好了docker需要的环境,使用docker运行项目我们用这台服务器来测试,如果是装了其他系统,需要自己先去安装一下docker

 如果需要快速部署,VisualStudio发布的时候可以直接将项目发布到DockerHub上,我们直接在服务器上拉镜像就可以,不过,本章节我部署的方式并不是通过从hub拉取镜像,而是带着大家一起编写docker-compose和dockerfile

在上面 如何在CentOS 中运行项目中,我们对项目进行了打包,现在按照刚才的步骤,重新打包一个 Framework-Dependent(框架依赖):发布的应用程序不包含.NET Core运行时和库 如果你嫌麻烦,不想动,没关系,刚刚打包的那个项目也可以用,只不过会让我们接下来要做的事情多此一举。

在打包好的publish同级别路径下创建两个文件,docker-compose和dockerfile

接下来我们一起写一下这两个文件

首先打开Dockerfile,第一步构建镜像,也就是运行项目的环境,然后把项目copy进去,把下面代码中的端口改成你的项目的,然后写上运行命令,就完成了

#基于 `microsoft/dotnet:6.0-core` 来构建我们的镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0


#设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
WORKDIR /publish
#拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中 
COPY /publish /publish

# 监听5157
ENV ASPNETCORE_URLS=http://+:5157

#设置Docker容器对外暴露8003端口
EXPOSE 5157

#使用`dotnet WebApi.dll`来运行应用程序

CMD ["dotnet", "WebApi.dll", "--server.urls", "http://*:5157"]

然后打开docker-compose

version: '3'
services:
  webapi:
    image: webapi
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 5157:5157

在这个文件中,version即这个项目的版本号,image是先去hub上找镜像,找到就拉,找不到就执行我们刚刚的Dockerfile,然后把ports改成你项目中对应的版本号,就完成了。

要注意的一个细节就是,如果你像我一样在项目中使用了数据库,并且也想在docker中安装数据库,如下代码,我拉了一个mysql5.7.18,镜像名称设置为mysql,那么,我在项目中sql连接字符串就不可以使用127.0.0.1或者localhost了,而是要使用下面设置的mysql

version: '3'
services:
  mysql:
    restart: always
    image: mysql:5.7.18
    container_name: mysql-lable
    volumes:
      - /apps/mysql/mydir:/mydir
      - /apps/mysql/datadir:/var/lib/mysql
      - /apps/mysql/conf/my.cnf:/etc/my.cnf
      - /apps/mysql/source:/docker-entrypoint-initdb.d
    environment:
      - "MYSQL_ROOT_PASSWORD=password"
      - "MYSQL_DATABASE=lbhdatabase"
      - "TZ=Asia/Shanghai"
    ports:
      - 3306:3306
  webapi:
    image: webapi
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 5157:5157
    depends_on:
      - mysql

项目运行

这两个文件准备好后直接将publish拉到我们的服务器,改个名字。

然后在该路径下执行docker-compose up

 跑起来之后像上面的开放端口一样,打开自己项目的端口,这里我就不重复截图了

测试一下,ok

服务器信息,如果要后台执行,在刚刚的命令后面加一个 -d

docker-compose up -d

此时我的docker服务器已经跑了一个昨天测试时跑的AI识别webapi,和一个.net core 项目还有一个MySQL。再去看看监控,可以看出还是毫无压力的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/990856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XFF漏洞利用([SWPUCTF 2021 新赛]Do_you_know_http)

原理 常见的存在HTTP头注入的参数 User-Agent:使得服务器能够识别客户使用的操作系统,浏览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中) Cookie:网站为了辨别用户身份进行se…

前端js下载zip文件异常问题解决

目录 一,本文解决问题如下 二,原下载代码 1,ajax get 下载文件 2,下载异常图: 三,成功下载的 1, JQuery 实现文件下载xhr 2,图例 引言: 本人使用的ajax 下载&…

量化:基于支持向量机的择时策略

文章目录 参考机器学习简介策略简介SVM简介整体流程收集数据准备数据建立模型训练模型测试模型调节参数 参考 Python机器学习算法与量化交易 利用机器学习模型,构建量化择时策略 机器学习简介 机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。…

Mybatis日期检索格式报错

问题复现 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String ##…

适用于Linux的Windows子系统(PHP搭建lmap、redis、swoole环境)

目录 前言 一、Windows安装Linux子系统 二、Ubuntu搭建PHP开发环境 1.PHP 安装 2.Apache2 安装 3.MySQL安装 4.Redis安装 5.Swoole安装 总结 前言 系列分为三章(从安装到项目使用): 一、适用于Linux的Windows子系统(系统安装步骤…

提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除

文章目录 探索最新AR/VR应用在教育、游戏、医疗等领域的应用教育领域游戏领域医疗领域 深入了解Android内存管理与性能优化的方法与技巧垃圾回收机制内存泄漏使用弱引用避免过度渲染内存优化图像优化延迟加载Android中的调试技术应用程序分析 分享如何提高Android应用的易用性和…

服贸会2023 | 希尔贝壳入选“智赋百业”人工智能融合发展与安全应用典型案例

9月6日,服贸会(中国国际服务贸易交易会)“2023人工智能融合发展与安全应用”论坛在国家会议中心举行,论坛由国家工业信息安全发展研究中心、世界贸易网点联盟主办,旨在促进人工智能领域贸易合作,充分发挥人…

生动理解深度学习精度提升利器——测试时增强(TTA)

测试时增强(Test-Time Augmentation,TTA)是一种在深度学习模型的测试阶段应用数据增强的技术手段。它是通过对测试样本进行多次随机变换或扰动,产生多个增强的样本,并使用这些样本进行预测的多数投票或平均来得出最终预…

OpenCV(二十九):图像腐蚀

1.图像腐蚀原理 腐蚀操作的原理是将一个结构元素(也称为核或模板)在图像上滑动,并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配,那么该位置的像素值保持不变。如果结构元素的任何一个…

【软考】系统集成项目管理工程师(三)信息系统集成专业技术知识③

一、云计算 1、定义 通过互联网来提供大型计算能力和动态易扩展的虚拟化资源;云是网络、互联网的一种比喻说法。是一种大集中的服务模式。 2、特点 (1)超大规模(2)虚拟化(3)高可扩展性&…

Unity UGUI(二)核心组件

Unity Canvas相关知识学习 文章目录 Unity Canvas相关知识学习1. Canvas:1.1 Render Mode1.2 多个Canvas的显示顺序 2.Canvas Scaler:屏幕分辨率自适应2.1 UI Scale Mode 3. EventSystem4. Standalone Input Module5. Graphic Raycaster:图形…

创邻科技图数据库课程走进一流高校

《图数据库原理和实践》 正式开课! 最近,浙江大学计算机学院新开了一门名为 《图数据库原理和实践》 的新课程,该课程由创邻科技和浙江大学联合推出,吸引了许多学生踊跃参与! 曾为浙大学子的创邻科技CTO周研博士作为…

「Java开发指南」在MyEclipse中的Spring开发(一)

MyEclipse v2023.1.2离线版下载(Q技术交流:742336981) 1. 什么是Spring? 在MyEclipse中引入Spring比大多数框架更难,因为它不是一种单一用途的技术。Spring被认为是Java软件开发在几乎每个领域都有最佳实践的巨大框架&#xff0…

canvas绘制渐变色三角形金字塔

项目需求:需要绘制渐变色三角形金字塔,并用折线添加标识 (其实所有直接用图片放上去也行,但是ui没切图,我也懒得找她要,正好也没啥事,直接自己用代码绘制算了,总结一句就是闲的) 最终效果如下图: (以上没用任何图片,都是代码绘制的) 在网上找了,有用canvas绘…

sql server 查询某个字段是否有值 返回bool类型

sql server 查询某个字段是否有值 返回bool类型,true 或 false SELECT ColumnCode,CONVERT(BIT,CASE WHEN LEN(ColumnCode) > 0 THEN 1 ELSE 0 END) AS HasValue FROM dbo.TF_LessonCatalog

Java(一)安装并使用 java(Windows)

安装并使用java 前言一、初识Java1.Java的安装1.1下载JDK1.2JDK安装与使用1.2.1安装1.2.2 IDEA(编译器)使用 2.Java运行编程逻辑(重要后面要用)总结 前言 学习很重要,复习也很重要,对于编程语言的复习更为…

初试小程序轮播组件

文章目录 一、轮播组件(一)swiper组件1、功能描述2、属性说明 (二)swiper-item组件1、功能描述2、属性说明 二、案例演示(一)运行效果(二)实现步骤1、创建小程序项目2、准备图片素材…

Azure + React + ASP.NET Core 项目笔记一:项目环境搭建(二)

有意义的标题 pnpm 安装umi4 脚手架搭建打包语句变更Visual Studio调试Azure 设置变更发布 pnpm 安装 参考官网,或者直接使用npm安装 npm install -g pnpmumi4 脚手架搭建 我这里用的umi4,官网已附上 这里需要把clientapp清空,之后 cd Cl…

构建普适通用的企业网络安全体系框架

在当今数字化时代,网络安全已成为企业保护信息资产和业务运行的重要任务。恶意攻击、数据泄露、网络病毒等威胁不断演进,给企业和个人带来了巨大风险。为了应对这一挑战,许多企业已经采取了一系列网络安全措施,如制定了网络安全政…

Nacos:Spring Cloud Alibaba服务注册与配置中心

Nacos 英文全称为 Dynamic Naming and Configuration Service,是一个由阿里巴巴团队使用 Java 语言开发的开源项目。 Nacos 是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台(参考自 Nacos 官网)。 Nacos 的命名是由 3 部…