OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境
一、在OpenEuler上搭建.NET运行环境
基于包管理器安装
- 添加Microsoft软件源:运行命令
sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm
,将Microsoft软件源添加到系统中,以便后续能够从该源安装.NET相关的包。 - 安装.NET运行时或SDK:若只需要运行.NET应用程序,可安装运行时。比如安装ASP.NET Core运行时,执行
sudo dnf install aspnetcore-runtime-8.0
。如果要进行.NET开发,则安装SDK,命令为sudo dnf install dotnet-sdk-8.0
。可根据实际需求替换版本号。 - 验证安装:安装完成后,可以通过
dotnet --info
命令来查看.NET的安装信息,确认是否安装成功。也可以使用dotnet --list-runtimes
查看已安装的运行时列表。
基于二进制文件安装
- 下载.NET二进制文件:从.NET官方网站下载适合OpenEuler系统的.NET二进制文件,例如
dotnet-sdk-8.0.203-linux-x64.tar.gz
。 - 解压文件:创建一个目录用于存放解压后的文件,如
mkdir -p $HOME/dotnet
,然后解压下载的文件到该目录,tar zxf dotnet-sdk-8.0.203-linux-x64.tar.gz -C $HOME/dotnet
。 - 配置环境变量:如果使用
bash
shell,将环境变量添加到~/.bashrc
文件,执行echo 'export DOTNET_ROOT=$HOME/dotnet' >> ~/.bashrc
和echo 'export PATH=$PATH:$HOME/dotnet' >> ~/.bashrc
。若是zsh
shell,则添加到~/.zshrc
文件。添加完后执行source ~/.bashrc
或source ~/.zshrc
使环境变量生效。 - 验证安装:使用
dotnet --info
或dotnet --list-runtimes
命令验证安装是否成功。
基于容器安装
- 拉取.NET容器镜像:可以从openeuler-docker-images等镜像仓库拉取.NET相关的容器镜像,例如
docker pull openeuler/dotnet-aspnet:8.0.3-oe2203sp3
。 - 运行容器:使用
docker run
命令来运行容器,如docker run -it --name dotnet-aspnet-container openeuler/dotnet-aspnet:8.0.3-oe2203sp3
,可以根据实际需求添加端口映射、挂载数据卷等参数。
二、在OpenEuler上部署基于.NET的应用程序
准备工作
- 安装.NET运行时环境:确保OpenEuler系统已安装适合应用程序版本的.NET运行时。如果应用程序是基于.NET Core 3.1开发的,需安装.NET Core 3.1运行时;若基于.NET 8开发,则安装.NET 8运行时。可通过包管理器或二进制文件的方式安装,具体操作参考上文。
- 获取应用程序文件:将基于.NET的应用程序文件(包括.dll文件、相关配置文件等)准备好,可以通过从代码仓库拉取、从本地复制或通过网络传输等方式获取到OpenEuler服务器上的指定目录,如
/opt/apps/myapp
。
配置应用程序
- 配置文件修改:根据实际部署环境,修改应用程序的配置文件,如
appsettings.json
。可能需要修改数据库连接字符串、日志路径、缓存配置等信息。比如将数据库连接字符串中的服务器地址修改为实际的数据库服务器地址。 - 环境变量设置:根据应用程序需求,设置相应的环境变量。如果应用程序需要读取某个环境变量来确定运行模式,可以使用
sudo vim /etc/profile
命令打开配置文件,在文件末尾添加export MY_APP_ENV=production
,保存并退出后,执行sudo source /etc/profile
使环境变量生效。
部署应用程序
- 使用dotnet命令运行:进入应用程序所在目录,使用
dotnet
命令运行应用程序。例如应用程序的主项目文件是MyApp.dll
,则执行dotnet MyApp.dll
。若应用程序有特定的启动参数,可在命令后添加,如dotnet MyApp.dll --server.urls=http://localhost:5000
。 - 作为服务运行:为了便于管理和监控,可以将应用程序配置为系统服务。创建一个.service文件,如
sudo vim /etc/systemd/system/myapp.service
,在文件中输入以下内容:
[Unit]
Description=My.NET Application
After=network.target[Service]
WorkingDirectory=/opt/apps/myapp
ExecStart=/usr/bin/dotnet /opt/apps/myapp/MyApp.dll
Restart=always
RestartSec=10
SyslogIdentifier=myapp
User=root
Group=root[Install]
WantedBy=multi-user.target
保存并退出后,执行sudo systemctl enable myapp.service
将服务设置为开机自启,然后使用sudo systemctl start myapp.service
启动服务。
验证与监控
- 验证应用程序:在浏览器中输入应用程序的访问地址,如
http://localhost:5000
,查看应用程序是否正常运行,能否正确显示页面和执行相关功能。也可以使用curl
命令进行测试,如curl http://localhost:5000/api/values
,检查是否能获取到正确的响应数据。 - 监控应用程序:可以使用
systemctl status myapp.service
命令查看服务的运行状态和日志信息。还可以结合ELK(Elasticsearch、Logstash、Kibana)等日志管理工具来收集和分析应用程序的日志,以便及时发现和解决问题。
相关文章:

OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境
一、在OpenEuler上搭建.NET运行环境 基于包管理器安装 添加Microsoft软件源:运行命令sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm,将Microsoft软件源添加到系统中,以便后续能够从该源安装.…...

神经网络的通俗介绍
人工神经网络,是一种模仿人类大脑工作原理的数学模型。人类的大脑是由无数的小“工作站”组成的,每个工作站叫做“神经元”。这些神经元通过“电线”互相连接,负责接收、处理和传递信息。 一、人类大脑神经网络 人类大脑的神经网络大概长这…...

基于 AWS SageMaker 对 DeepSeek-R1-Distilled-Llama-8B 模型的精调与实践
在当今人工智能蓬勃发展的时代,语言模型的性能优化和定制化成为研究与应用的关键方向。本文聚焦于 AWS SageMaker 平台上对 DeepSeek-R1-Distilled-Llama-8B 模型的精调实践,详细探讨这一过程中的技术细节、操作步骤以及实践价值。 一、实验背景与目标 …...
如何使用DeepSeek R1
以下是如何使用DeepSeek R1的详细步骤: ### 一、注册DeepSeek账户 1. **访问官方网站**: - 打开浏览器,访问[chat.deepseek.com](http://chat.deepseek.com)。 2. **注册账户**: - 使用电子邮件、Google账户或86手机号码…...

大屏 UI 设计风格的未来趋势
在科技飞速革新的时代,大屏设备的应用领域不断拓展,从城市的智能交通指挥中心,到商场的互动广告大屏,再到家庭的超大尺寸智能电视,大屏已然成为信息展示与交互的关键载体。大屏 UI 设计风格也随之不断演变,…...

unity学习22:Application类其他功能
目录 1 是否允许后台运行 1.1 Application.runInBackground,显示是否允许后台运行 1.2 设置的地方 2 打开URL 2.1 Application.OpenURL("") 打开超链接 3 退出游戏 3.1 Application.Quit() 退出游戏 4 场景相关 5 返回游戏状态 6 控制游戏的行…...

51单片机入门_02_C语言基础0102
C语言基础部分可以参考我之前写的专栏C语言基础入门48篇 以及《从入门到就业C全栈班》中的C语言部分,本篇将会结合51单片机讲差异部分。 课程主要按照以下目录进行介绍。 文章目录 1. 进制转换2. C语言简介3. C语言中基本数据类型4. 标识符与关键字5. 变量与常量6.…...

定位的叠放次序 z-index
浮动定位和绝对定位的区别: 浮动只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字,但是绝对定位(固定定位)会压住下面标准流所有的内容。...
ESP32-S3模组上跑通esp32-camera(36)
接前一篇文章:ESP32-S3模组上跑通esp32-camera(35) 一、OV5640初始化 2. 相机初始化及图像传感器配置 上一回继续对reset函数的后一段代码进行解析。为了便于理解和回顾,再次贴出reset函数源码,在components\esp32-camera\sensors\ov5640.c中,如下: static int reset…...
前端性能优化:HMR热更新和预获取加载
最近发现项目开发,有点加载快,有点却是卡机式,甚至刷新导致白屏情况。于是,我找开发和性能优化的方法,找到下面几种。 本文将深入探讨 预获取(Prefetch)、动态导入(Dynamic Import&…...
【自学笔记】计算机网络的重点知识点-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 计算机网络重点知识点一、计算机网络概述二、网络分类三、网络性能指标四、网络协议与体系结构五、数据交换方式六、物理层与数据链路层七、网络层与运输层八、应用…...

算法基础学习——二分查找(附带Java模板)
有单调性的数列一定可以使用二分,没有单调性的题目也可能可以使用二分; (一)整数二分 二分的本质: 在某个整数区间内,存在某种性质使得区间内左半边的数都不满足该性质;而右半边的数都满足该性…...
【llm对话系统】大模型源码分析之llama模型的long context更长上下文支持
1. 引言 Llama模型的一个重要特性是支持长上下文处理。本文将深入分析Llama源码中实现长上下文的关键技术点,包括位置编码(position embedding)的外推方法、注意力机制的优化等。我们将通过详细的代码解析来理解其实现原理。 2. 位置编码的外推实现 2.1 旋转位置…...

单片机基础模块学习——NE555芯片
一、NE555电路图 NE555也称555定时器,本文主要利用NE555产生方波发生电路。整个电路相当于频率可调的方波发生器。 通过调整电位器的阻值,方波的频率也随之改变。 RB3在开发板的位置如下图 测量方波信号的引脚为SIGHAL,由上面的电路图可知,NE555已经构成完整的方波发生电…...

Hive:struct数据类型,内置函数(日期,字符串,类型转换,数学)
struct STRUCT(结构体)是一种复合数据类型,它允许你将多个字段组合成一个单一的值, 常用于处理嵌套数据,例如当你需要在一个表中存储有关另一个实体的信息时。你可以使用 STRUCT 函数来创建一个结构体。STRUCT 函数接受多个参数&…...

最优化问题 - 内点法
以下是一种循序推理的方式,来帮助你从基础概念出发,理解 内点法(Interior-Point Method, IPM) 是什么、为什么要用它,以及它是如何工作的。 1. 问题起点:带不等式约束的优化 假设你有一个带不等式约束的优…...

vim交换文件的工作原理
在vim中,交换文件是一个临时文件,当我们使用vim打开一个文件进行编辑(一定得是做出了修改才会产生交换文件)时候,vim就会自动创建一个交换文件,而之后我们对于文件的一系列修改都是在交换文件中进行的&…...

CISCO路由基础全集
第一章:交换机的工作原理和基本技能_交换机有操作系统吗-CSDN博客文章浏览阅读1.1k次,点赞24次,收藏24次。交换机可看成是一台特殊的计算机,同样有CPU、存储介质和操作系统,只是与计算机的稍有不同。作为数据交换设备&…...

网络直播时代的营销新策略:基于受众分析与开源AI智能名片2+1链动模式S2B2C商城小程序源码的探索
摘要:随着互联网技术的飞速发展,网络直播作为一种新兴的、极具影响力的媒体形式,正逐渐改变着人们的娱乐方式、消费习惯乃至社交模式。据中国互联网络信息中心数据显示,网络直播用户规模已达到3.25亿,占网民总数的45.8…...
2024年终总结——今年是蜕变的一年
2024年终总结 摘要前因转折找工作工作的成长人生的意义 摘要 2024我从国企出来,兜兜转转还是去了北京,一边是工资低、感情受挫,一边是压力大、项目经历少,让我一度找不到自己梦寐以求的工作,我投了一家又一家ÿ…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

DAY 45 超大力王爱学Python
来自超大力王的友情提示:在用tensordoard的时候一定一定要用绝对位置,例如:tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾: tensorboard的发展历史和原理tens…...

Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...