5分钟内在Linux上安装.NET Core应用程序

作为开源的忠实粉丝,我喜欢 .NET Core 的跨平台特性。它开启了无限的可能性,从业余爱好项目、实验和概念验证,到在具有高安全性和可扩展性的经济高效基础设施上运行的大规模高负载生产应用程序。我通常从任何云平台提供商那里获得最简单、最便宜的基于 Ubuntu 的虚拟专用服务器 (VPS),每月 5 美元,而不是更复杂和昂贵的容器实例或云计算服务。

一旦您拥有了 Ubuntu VPS,我将指导您完成如何设置 .NET Core 运行时环境以及如何使用 Okta 身份验证部署 .NET Core Web 应用程序的步骤,所有这些仅使用终点站。

使用 Okta 的好处

Okta 是一项云服务,允许开发人员创建、编辑和安全地存储用户帐户和用户帐户数据,并将它们与一个或多个应用程序连接。使用 Okta,您不必担心手动实现注册、登录和注销流程。在我们的示例应用程序中,我们将设置 Okta 来处理 OAuth 登录的用户管理。设置 .NET Core 在 Linux 上运行有一些技巧(特别是在 AWS 或 Azure 等主机上进行容器化时),但不用担心 - 您将在本教程中获得很好的概述。

先决条件 

乌班图 20.04+
装有Ubuntu Desktop 20.04+的物理机或虚拟机
对于虚拟化我推荐VirtualBox 

在 Linux 上安装 .NET Core SDK/运行时
.NET Core SDK 或运行时:哪一个最好

.NET Core 运行时允许您在 Linux 上运行使用 .NET Core 制作但不包含运行时的应用程序。使用 SDK,您可以运行 .NET Core 应用程序,还可以开发和构建 .NET Core 应用程序。通常,您只需要生产环境中的运行时和开发环境中的 SDK。

今天我们将在同一台机器上构建并运行我们的示例应用程序。那么让我们安装 .NET Core SDK。

添加包存储库 

我们需要添加微软的包签名密钥来使包存储库受到系统的信任。

打开终端并运行以下命令: 

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

 安装SDK

sudo apt-get update; \sudo apt-get install -y apt-transport-https && \sudo apt-get update && \sudo apt-get install -y dotnet-sdk-3.1

为确保安装成功,请运行:

dotnet --version

输出应该是已安装的 .NET Core 版本。

在 Linux 上构建并运行 .NET Core 应用程序

复制源代码
为了这个例子,我准备了一个示例应用程序。让我们git将其从 GitHub 复制到我们的机器上。
 

git clone https://github.com/oktadeveloper/okta-netcore3-deploy-linux-example okta

进入我们刚刚复制源代码的文件夹:

cd okta

运行构建:

dotnet build

第一次构建可能需要一段时间。那么输出应该是这样的:

Build succeeded.0 Warning(s)0 Error(s)

运行 .NET Core 应用程序 

要在开发模式下运行应用程序,请键入:

dotnet run

运行示例应用程序将失败,因为我们需要首先设置 Okta 登录。

输出:

Unhandled exception. System.ArgumentNullException: Replace {clientId} with the client ID of your Application. You can copy it from the Okta Developer Console in the details for the Application you created. Follow these instructions to find it: https://bit.ly/finding-okta-app-credentials (Parameter 'ClientId')

登录您的Okta 开发者帐户

导航至Applications,然后选择Add Application

选择 Web 作为平台:

在下一个屏幕上添加以下内容: 登录重定向 URIhttps://localhost:5001/authorization-code/callback

注销重定向 URIhttps://localhost:5001/signout/callback

完成后,单击“完成”

记下您的客户端凭据(客户端 ID客户端密码)。

在您最喜欢的代码编辑器中打开appsettings.json并添加您的凭据。

您可以在仪表板的右上角 找到您的组织 URL :

现在示例应用程序已准备好运行:

dotnet run

输出:

info: Microsoft.Hosting.Lifetime[0]Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]Content root path: /home/ubuntu/okta

您现在可以打开浏览器窗口来http://localhost:5000查看应用程序的运行情况。您也可以尝试使用右上角的 Okta 进行记录。

故障排除

如果您在使用 Okta 登录后遇到关联错误,您需要手动将SameSitecookie 属性设置为None,并在服务器上启用 SSL (HTTPS)。详细了解 SameSite 如何影响您的应用程序。

要点

在 Linux 上开发 .NET Core 应用程序不再是科幻小说中的内容。由于 Microsoft 开始放弃闭源和依赖于平台的解决方案,基于 Linux 的开发环境有其优势。我相信VSCode和Rider等工具(也可在每个平台上使用)已经足够成熟,足以成为经典 Visual Studio IDE for Windows 的合理竞争对手。我已经成功使用 Linux 作为 .NET Core 的主要开发环境几年了。亲自尝试一下,并在下面的评论中告诉我们您的体验!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java:SpringBoot整合Spring Batch示例

目录 文档基础概念Tasklet方式示例Chunk方式示例参考文章 文档 https://docs.spring.io/spring-batch/docs/4.3.9/reference/html/index.html 基础概念 JobLauncher:作业启动器,启动作业的入口。对应的实现类为SimpleJobLauncher。Job:作业…

上海亚商投顾:沪指震荡调整跌 减肥药、华为概念股持续活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 沪指上个交易日低开后震荡调整,深成指、创业板指盘中跌超1%,宁德时代一度跌超3%&#xff…

apk和小程序渗透

apk和小程序域服务器通信使用的还是http协议,只是使用了加密。只要可以获取到http的请求报文,就可以回归到web渗透的层面。apk和小程序的渗透很复杂,涉及逆向时要进行脱壳,脱壳后反编译了,源代码没做加密就能直接逆向出…

华为eNSP配置专题-NAT的配置

文章目录 华为eNSP配置专题-NAT的配置0、参考文档1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、基本终端构成和连接2.2、各终端基本配置2.2.1、PC1和PC2的配置2.2.2、交换机不做任何配置2.2.3、网关路由器的配置2.2.4、模拟互联网的路由器的配置 3、配置静态NAT…

代码随想录第四十三天|343. 整数拆分 ● 96.不同的二叉搜索树

343.整数拆分 题目: 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 …

强化学习 | 强化学习基础知识(图解)

强化学习是机器学习的一个领域。它是关于在特定情况下采取适当的行动来最大化奖励。它被各种软件和机器用来找到在特定情况下应该采取的最佳行为或路径。强化学习与监督学习的不同之处在于,在监督学习中,训练数据具有答案键,因此模型本身使用…

RabbitMQ从0到1完整学习笔记一:《基础篇》

目录 启篇 一、初识MQ 1.1 同步调用 1.2异步调用 1.3 技术选型 二、RabbitMQ 架构 2.2 收发消息 2.2.1 交换机 2.2.2 队列 2.2.3 绑定关系 2.2.4 发送消息 2.3 数据隔离 2.3.1 用户管理 2.3.2 virtual host 三、SpringAMQP 3.1 案例入门 3.1.1 导入依赖 3.1.2 消息发送 3.1.2 消…

图像识别-人脸识别与疲劳检测 - python opencv 计算机竞赛

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是…

threejs(2)-Geometry进阶详解

一、全面讲解UV与应用 在本节中,我们将讨论Three.js中的UV映射,包括UV映射的概念、与顶点位置的关系和区别以及如何在Geometry中设置UV坐标。我们将使用BufferGeometry进行示例说明。 颜色对应 什么是UV映射? UV映射是一种将二维纹理映…

Ubuntu系统如何进行网络连接-连接电脑局域网-物联网开发-Ubuntu系统维护

一、前言 在Ubuntu系统的维护中,我们常常需要对VMware中的Ubuntu虚拟机配置网络连接,以连接服务器下载或安装软件包以及进行网络通信等。 基于上述问题,本文将着重分享Ubuntu配置网络链接的若干方法。 二、网络连接模式 打开VM,右…

【Java 进阶篇】JavaScript 动态表格案例

在这篇博客中,我们将深入了解JavaScript如何创建和操作动态表格。我们将从头开始构建一个动态表格,并逐步添加各种功能,使其能够实现数据的添加、删除和编辑。这个示例将有助于理解如何在前端开发中使用JavaScript创建交互性强大的表格。 准…

网站如何优化加速,让网站降低延迟

优化网站架构 精简页面加载过程:通过消除冗余代码和不必要的图像,并采用CDN资源分发,以减少加载时间。 精心规划内容架构:通过使用恰当的标题和描述,使搜索引擎能够快速理解页面的内涵。 选择性能出众的前端框架&…

RT-Thread学习笔记(三):线程管理

线程管理 线程管理相关概念什么是时间片轮转调度器锁线程运行机制线程的五种状态 动态和静态创建线程区别动态和静态创建线程优缺点RT-Thread动态线程管理函数动态创建线程动态删除线程 RT-Thread静态线程管理函数静态创建线程 线程其他操作线程启动线程延时获得当前执行的线程…

Java并发面试题:(六)悲观锁和乐观锁和Java内存模型和CAS原理

悲观锁和乐观锁的区别 什么是悲观锁? 基本上我们理解的操作前对资源加锁,操作完后释放锁。说的都是悲观锁。悲观锁认为所有的资源都是不安全的,随时会被其他线程操作、更改。所以操作资源前一定要加一把锁、防止其他线程访问。 什么是乐观锁&…

【23种设计模式】装饰器模式

个人主页:金鳞踏雨 个人简介:大家好,我是金鳞,一个初出茅庐的Java小白 目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客&am…

Excel·VBA单元格区域数据对比差异标记颜色

之前的一篇博客《ExcelVBA单元格重复值标记颜色》,是对重复的整行标记颜色 而本文是按行对比2个单元格区域的数据,并对有差异的区域(一个单元格区域有的,而另一个单元格区域没有的)标记颜色,且只要存在任意…

单链表经典OJ题:合并有序链表

目录 ​编辑 题目: 图例: 分析: 解法: 解法1: 解法2: 解法的对比: 解法2: 注意事项: 图例: 代码演示: 代码分析: 代码缺点: 重复…

[MySQL]BLOB/TEXT column ‘xxx‘ used in key specification without a key length

报错信息: SQLSTATE[42000]: Syntax error or access violation: 1170 BLOB/TEXT column xxx used in key specification without a key length 原因: MySQL的唯一索引不支持text类型的字段!

C++初阶-类和对象(上)

类和对象(上) 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装访问限定符封装 五、类的作用域六、类的实例化七、类的对象大小的计算如何计算类对象的大小类对象的存储方式猜测 八、类成员函数的this指针this指针的引出…

网站如何才能不被黑,如何做好网络安全

当企业网站受到攻击时,首页文件可能被篡改,百度快照也可能被劫持并重定向到其他网站。首要任务是加强网站的安全防护。然而,许多企业缺乏建立完善的网站安全防护体系的知识。因此,需要专业的网站安全公司来提供相应的保护措施。今…