当前位置: 首页 > news >正文

Linux部署.Net Core Web项目

本文主要记录我在Linux(Ubuntu)上部署.net core 的操作记录,也便于以后部署。
如对您有所帮助,不胜荣幸~

文章目录

  • 前言
  • 一、准备工作
    • 1. 版本信息
    • 2. windows端web项目
  • 二、操作步骤
    • 1. Linux 配置 .net 运行环境
      • 1.1 查看最新 .net 运行环境的下载路径
      • 1.2 安装 dotnet SDK
      • 1.2.1 下载安装包
      • 1.2.2 解压安装包
      • 1.2.3 设置环境变量
      • 1.3 验证
    • 2. windows 端 web 项目发布选项设置
    • 3. 将web发布文件从windows上传到LInux
    • 4. Linux 运行 web 项目
    • 5. 设置 web 项目 开机自启
      • 5.1 安装supervisor
      • 5.2 在supervisor中为.net web 项目添加配置信息
        • 5.2.1 创建.net web项目的日志输出文件夹
        • 5.2.2 进入/etc/supervisor/conf.d
        • 5.2.3 新建config文件
        • 5.2.4 添加开机自启等配置项
        • 5.2.5 重启supervisor
        • 5.2.6 查看supervisor服务是否正常运行
        • 5.3.5 为supervisor开启可视化web站点管理界面(可选操作)
  • 总结


前言

本文主要介绍如何将windows上开发的 dotnet core web 应用程序部署到 Linux服务器上(Ubuntu 22.04)。

本人所使用的软件版本如下:

  • 操作系统版本:Ubuntu 22.04
  • web 项目版本:.net 6.0

本人在windows端部署的网站如下。端口:5001。本文目标就是将其部署到Ubuntu上去。
在这里插入图片描述


一、准备工作

1. 版本信息

  • 操作系统版本:Ubuntu 22.04
  • web 项目版本:.net 6.0

2. windows端web项目

二、操作步骤

1. Linux 配置 .net 运行环境

众所周知,所有 .net 项目的运行都需要 .net 运行环境。
.net 运行环境分两种:sdk 和 runtime(运行时) 。

  • sdk:sdk包含runtime,同时可以为.net 开发人员提供.net 项目的运行编译打包环境。
  • runtime:runtime 是sdk的一个子集,仅仅可以使得.net程序在操作系统上运行。

如果无需在Linux上做.net开发,可以只安装runtime,我这里主要演示sdk的安装。

微软官方参考文档:
在 Ubuntu 上安装 .NET SDK 或 .NET 运行时
使用安装脚本或通过提取二进制文件在 Linux 上安装 .NET

1.1 查看最新 .net 运行环境的下载路径

前往 .net 官方下载地址 ,页面内容打开如下图所示:
在这里插入图片描述
我们选择上图中的.NET 6.0,进入下图页面,选择合适自己操作系统架构的 SDK 地址。
在这里插入图片描述

ubuntu 查看系统架构的命令如下:

dpkg --print-architecture

在这里插入图片描述
我的是amd64,选择x64。
在这里插入图片描述

点击【copy】按钮复制得到下载地址:
https://download.visualstudio.microsoft.com/download/pr/868b2f38-62ca-4fd8-93ea-e640cf4d2c5b/1e615b6044c0cf99806b8f6e19c97e03/dotnet-sdk-6.0.407-linux-x64.tar.gz

1.2 安装 dotnet SDK

1.2.1 下载安装包

我们使用wget命令下载复制得到的runtime安装包

wget https://download.visualstudio.microsoft.com/download/pr/868b2f38-62ca-4fd8-93ea-e640cf4d2c5b/1e615b6044c0cf99806b8f6e19c97e03/dotnet-sdk-6.0.407-linux-x64.tar.gz

在这里插入图片描述

1.2.2 解压安装包

在当前主目录下创建.dotnet 文件夹

mkdir -p .dotnet

在这里插入图片描述
创建成功:
文件夹选项,设置显示隐藏文件后可以见到.dotnet文件夹:
在这里插入图片描述
将安装包内的文件解压到.dotnet 文件夹中

tar -zxvf dotnet-sdk-6.0.407-linux-x64.tar.gz -C .dotnet

在这里插入图片描述
解压成功。
在这里插入图片描述

1.2.3 设置环境变量

要使环境变量对所有用户有效,需要修改profile文件:

sudo vim /etc/profile 

在这里插入图片描述
键入[i],插入以下语句:

export DOTNET_ROOT=$(pwd)/.dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools

在这里插入图片描述
再键入[Esc],退出编辑模式。
键入[:wq]保存并退出Vim。
注销或者重启就可以生效。

1.3 验证

重启后,通过dotnet --info 命令查看dotnet信息。
在这里插入图片描述
设置完成。

SDK 安装成功。

2. windows 端 web 项目发布选项设置

Visual Studio 中 web 项目的发布选项需要将 TargetRuntime 改成 Linux版本,选择适合自己的Linux架构版本,前文中已经讲过如何查看自己Linux的架构了。本人的amd64,选择x64。
在这里插入图片描述
Deployment Mode(部署方式) :

  • Self-contained (独立应用) 自带dotnet运行时,可以部署至一台空白环境服务器,无需提前安装配置dotnet运行时。缺点是:部署包较大。
  • Framework-dependent(框架依赖型) 生成跨平台的部署包,用户需要在Linux上安装相应版本的运行时。

我之前已经安装好.net 6.0 SDK,包含了运行时,所以这里我选择Framework-dependent。

3. 将web发布文件从windows上传到LInux

设置成功后,选择发布,将web应用程序发布到文件夹。
发布成功后,使用ftp将web发布文件从windows上传到Linux上。
PS:本人在Linux上的web发布项目为:/home/qyh/workspace/WebPublishFolder/WowCrtAdvrts
在这里插入图片描述

上传成功:
在这里插入图片描述
上图中程序入口就是:Jcjy.Web(你的web项目名称)

4. Linux 运行 web 项目

控制台进入.net web项目路径:

cd ~/workspace/WebPublishFolder/WowCrtAdvrts

在这里插入图片描述
运行web项目:

dotnet Jcjy.Web.dll

浏览器输入ip+端口号,如下图所示。部署成功。
在这里插入图片描述
到目前为止Linux上部署.Net Core Web已经讲完了。接下来我主要讲下如何利用Nginx做反向代理。

5. 设置 web 项目 开机自启

supervisor是python开发的通用进程管理程序,可以将普通的命令行进程变成后台守护进程,监控进程状态,当进程异常退出时可自动重启。

5.1 安装supervisor

sudo apt-get install supervisor

在这里插入图片描述
如图所示,安装完成。

5.2 在supervisor中为.net web 项目添加配置信息

5.2.1 创建.net web项目的日志输出文件夹

我们先把web项目的日志输出文件夹创建好,这里我准备将日志放到这个目录下:/var/log/web/dotnet/

sudo mkdir -p /var/log/web/dotnet

5.2.2 进入/etc/supervisor/conf.d

supervisor安装好之后,在/etc/下会有一个supervisor文件夹,conf.d就是存放supervisor的配置文件的文件夹。

cd /etc/supervisor/conf.d

在这里插入图片描述

5.2.3 新建config文件

我们为.net web 项目创建配置文件:

sudo touch WowCrtAdvrts.conf

这里的【WowCrtAdvrts】是你的web 项目名称,

在这里插入图片描述

5.2.4 添加开机自启等配置项

编辑 WowCrtAdvrts.conf 文件

sudo vi WowCrtAdvrts.conf
i

在这里插入图片描述
输入一下配置项:

[program:WowCrtAdvrts]
command=dotnet Jcjy.Web.dll
directory=/home/qyh/workspace/WebPublishFolder/WowCrtAdvrts
environment=ASPNETCORE__ENVIRONMENT=Production 
user=www-data  
stopsignal=INT
autostart=true 
autorestart=true 
startsecs=1 
stderr_logfile=/var/log/web/dotnet/WowCrtAdvrts.err.log 
stdout_logfile=/var/log/web/dotnet/WowCrtAdvrts.out.log 

directory就是我们的.net core web项目所在目录;
stderr_logfile是错误日志所在路径,stdout_logfile是输出日志所在路径,我统一放在了/var/log/web/dotnet/下面;
在这里插入图片描述
然后输入ESC->:wq保存退出即可。
在这里插入图片描述
修改完成。

5.2.5 重启supervisor

sudo service supervisor stop 
sudo service supervisor start

在这里插入图片描述

5.2.6 查看supervisor服务是否正常运行

sudo supervisorctl

5.3.5 为supervisor开启可视化web站点管理界面(可选操作)

supervisor自带了可视化管理界面,需要我们做一下配置就能开启。
在/etc/supervisor 目录下,打开supervisor.conf 文件

cd /etc/supervisor
sudo vi supervisor.conf
i

在这里插入图片描述

添加如下配置项

[inet_http_server]    
port=127.0.0.1:8001     
username=admin
password=123456

在这里插入图片描述

保存修改并退出

ESC
:wq

重启supervisor

sudo service supervisor stop 
sudo service supervisor start

总结

以上就是今天要讲的内容,总的来说还是很简单的,但是我在具体操作时参考网上教程还是踩了一些坑。本文如对您有所帮助,不胜荣幸~

相关文章:

Linux部署.Net Core Web项目

本文主要记录我在Linux(Ubuntu)上部署.net core 的操作记录,也便于以后部署。 如对您有所帮助,不胜荣幸~ 文章目录前言一、准备工作1. 版本信息2. windows端web项目二、操作步骤1. Linux 配置 .net 运行环境1.1 查看最新 .net 运行环境的下载路径1.2 安装…...

【C++】STL之stack、queue的使用和模拟实现+优先级队列(附仿函数)+容器适配器详解

之前的一段时间,我们共同学习了STL中一些容器,如string、vector和list等等。本章我们将步入新阶段的学习——容器适配器。本章将详解stack、queue的使用和模拟实现优先级队列(附仿函数)容器适配器等。 目录 (一&…...

第⑦讲:Ceph集群RGW对象存储核心概念及部署使用

文章目录1.RadosGW对象存储核心概念1.1.什么是RadosGW对象存储1.2.RGW对象存储架构1.3.RGW对象存储的特点1.4.对象存储中Bucket的特性1.4.不同接口类型的对象存储访问对比2.在集群中部署RadosGW对象存储组件2.1.部署RGW组件2.2.集群中部署完RGW组件后观察集群的信息状态2.3.修改…...

从异步到promise

一,背景 1.1,js的单线程 这一切,要从js诞生之初说起,因为js是单线程的语言。 js单线程原因:作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程&…...

Linux系统中进行JDK环境的部署

一、为什么需要部署JDK。 JDK:Java Development Kit,是用于Java语言开发的环境。 部署JDK不需要懂得Java语言,只需要掌握Linux相关命令即可。 二、部署版本与环境。 系统:安装在VMware环境下的CentOS7.6; JDK版本&a…...

Leetcode.1033 移动石子直到连续

题目链接 Leetcode.1033 移动石子直到连续 Rating : 1421 题目描述 三枚石子放置在数轴上,位置分别为 a,b,c。 每一回合,你可以从两端之一拿起一枚石子(位置最大或最小),并将其放入…...

【Java】在SpringBoot中使用事务注解(@Transactional)时需要注意的点

在SpringBoot中使用事务注解(Transactional)时需要注意的点Transactional是什么使用事务注解(Transactional)时需要注意的点Transactional是什么 Transactional是Spring框架提供的一个注解,用于声明事务边界和配置事务…...

找到序列最高位的1和最高位的0并输出位置

前言: 该题为睿思芯科笔试题,笔试时长20分钟。 题目描述 接口如下: module first_1_and_0#(parameter WIDTH 8 )(input [WIDTH-1:0] data_in ,input target ,output exist ,outpu…...

面试总结sdiugiho

一、进程与线程的区别 进程: 一个在内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以有多个线程; windows 任务管理器中 一个 exe 就是一个进程。 线程: 进程中的一个执行任务(控制…...

WIN10無法再使用 IE 瀏覽器打开网页解决办法

修改 Registry(只適用 Win10) 微軟已於 2023 年 2 月 14 日永久停用 Internet Explorer,會透過 Edge 的更新讓使用者開啟 IE 時自動導向 Edge,其餘如工作列上的圖示,使用的方法則是透過「品質更新」的 B 更新來達成&am…...

搭建SpringBoot和Mysql Demo

1. 引言 在上一篇文章中,介绍了如何搭建一个SpringBoot项目;本篇文章,在上一篇文章的基础上,接着介绍下怎样实现SpringBoot和MySQL的整合。在后端开发中,数据库开发是绕不开的话题,开发中很多的时间都是在…...

晶振03——晶振烧坏的原因

晶振03——晶振烧坏的原因 首先要清楚的一件事情是:晶振分为无源晶振与有源晶振两大类。基于这两类晶振的内部结构与工作原理的差异,晶振被烧坏的情况也要分为两大类: 针对无源晶振被烧坏的情况有以下两点: 1、手焊操作不当 假…...

项目管理的难点

一、项目团队建设 建设一支高效的项目团队,明确团队队员的职责是项目经理进行项目管理的首要条件,也是项目目标能否实现的关键。 1.1 学会放权 任何人都不能掌握所有的知识和技能,要敢于相信别人,让别人去做。 放权就要选择最…...

day22 ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

问题: ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点 首先,二叉搜索树是一种常见的数据结构,它具有以下特点: 每个节点最多有两个子节点,分别为左子节点和右子节…...

ChatGPT 这个风口,普通人怎么抓住?

最近在测试ChatGPT不同领域的变现玩法,有一些已经初见成效,接下来会慢慢分享出来。 今天先给大家分享一个,看完就能直接上手的暴力引流玩法。 所需工具: 1)ChatGPT(最好是plus版,需要保证快速…...

Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(2)

本篇将总结实际项目开发中Python代码规范检查、自动编排的一些工具,特点,使用方法,以及如何在Pycharm中集成这些工具,如autoflake、yapf、black、isort、autopep8代码规范和自动编排工具。上一篇总结的pylint、pyproject-flake8、…...

acme.sh从 letsencrypt 生成SSL免费证书并自动更新证书

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书 ACME 协议: Automatic Certificate Management Environment 自动化证书管理环境 文档: github: https://github.com/acmesh-official/acme.shgitee: https://gitee.com/neilpang/acme.sh中文文档: https://git…...

基于html+css的evenly布局

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...

【从零开始学习 UVM】10.5、UVM TLM —— UVM TLM Blocking Get Port

文章目录 UVM TLM Get Port Example1. 创建一个发送方类,其端口类型为 uvm_blocking_get_imp3. 创建接收器类,等待 get 方法。4. 在更高层次上连接端口及其实现Get端口阻塞行为任何组件都可以通过 TLM get 端口请求从另一个组件接收事务。发送组件应定义获取端口的实现。该实…...

English Learning - L2 第 10 次小组纠音 辅音 [m] [n] [ŋ] 半元音 [w] [j] 2023.3.29 周三

English Learning - L2 第 10 次小组纠音 辅音 [m] [n] [ŋ] [w] [j] 2023.3.29 周三共性问题more Autumn [ɔː] 舌位偏前gone evening 前后鼻音不分Hes proud of this name 双元音缺乏滑动感bank thing 中的后鼻音发成前鼻音week what yolk 元音 [iː] [ɒ] 舌位偏前 [əʊ] …...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...